AWS ParallelCluster用語・サービス名を調べる

2020.07.08

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは網走の大村です。
AWS ParallelClusterのBlack Belt Online Seminarを視聴したのですが、HPC業界では一般的な用語・サービスが馴染みがなさすぎてわかりませんでした。基本的な用語を調べた備忘録です。

【AWS Black Belt Online Seminar】AWS ParallelCluster ではじめるクラウドHPC - YouTube

AWS ParallelCluster とは

並列コンピューティングで膨大な計算処理を実行する環境を簡単に構築できるサービスです。クラウドサービスの特徴を活かし計算処理をするマシンを自動で必要な台数起動し、計算が終わったら終了してくれます。コスト効率よく膨大な計算処理を並列で実行可能です。

HPC(High Performance Computing)ってなに

そもそもHPCとは何の意味なのでしょうか? 調べてみると計算量の多い処理をこなすための環境で巨大なスパコンか、多数のサーバ郡が一般的には必要ということがわかりました。ハイパフォーマンスという名前の通りです。

Wikipediaより引用

1980年代以前はベクトル計算機が主流であったが、近年ではスカラー計算機を超並列にする方向が盛んである。HPC用クラスタをHigh-Performance Computing Cluster、HPCC(en:HPCC)という。システムの構築や利用には高いレベルの技術的スキルが不可欠であるが、汎用の部品で構成することができる。柔軟性、演算性能の面で優れ、比較的低コストであるため、並列コンピューティングによるHPCはスーパーコンピュータ業界に普及しつつある

weblio辞書より引用

ハイパフォーマンスコンピューティングとは、単位時間当たりの計算量が非常に多い計算処理のことである。ハイパフォーマンスコンピューティングは、実施に膨大な時間やコストがかかる大規模な実験の代用や、不確定要素の多さから実験が困難な自然科学現象の解明、といった目的で行われることが多い。

ジョブスケジューラ(ジョブ管理システム)ってなに

ジョブスケジューラは、ユーザが「ジョブ(計算するスクリプトやデータ)」をジョブスケジューラに投げると、ジョブスケジューラはジョブをキューとして管理し、よしなに計算処理してくれるマシンに仕事を割り当て効率よく管理してくれる仕組み。

ジョブスケジューラの種類

「SGE, Torque, Slurm に対応」と書いてありますが、私にはまったく馴染みのない言葉です。 ここで挙げられた名前はグリッドコンピューティング分野で一般的なジョブスケジューラでした。

SGE(Sun of Grid Engine)

注意: AWS ParallelClusterでは将来のリリースでSGEのサポートが削除される予定。

TORQUE(Terascale Open-source Resource and QUEue Manager)

注意: AWS ParallelClusterでは将来のリリースでTORQUEのサポートが削除される予定。

Slurm

AWS ParallelClusterのデフォルトのジョブスケジューラはSlurmでした。他がAWS ParallelClusterでのサポート終了予定だからそうなりますよね。

ジョブスケジューラとAWS ParallelCluster

既存のHPC環境を利用者には馴染みのあるジョブスケジューラをAWS ParallelClusterでも使えるので移行が容易につながるわけですね。

MPI/NCCL環境ってなに

MPI/NCCL環境がセットアップ済みと申されましても、ありがたさをわかっていないです。

MPI(Message Passing Interface)

複数のマシンにまたがって並列計算できる仕組み。複数の計算処理マシンのメモリ領域間で通信しながら計算。

NCCL(NVIDIA Collective Communications Library)

NVIDIA GPU向けに最適化されたライブラリ。特定のGPUインスタンスを使った演算処理するときに使える環境がインストール済みということでした。

やってみた

構築が簡単という触れ込みなのでとりあえず環境作って、なにかジョブを実行させてみましょう。

AWS ParallelClusterコマンドのインストール

pclusterコマンドが使えるようになります。

sudo pip3 install aws-parallelcluster

バージョン確認。

pcluster version
2.7.0

コンフィグ作成

対話式でクラスタの設定ファイルを作成できます。 クラスタとは最大何台のインスタンスを起動させて計算させるとか、計算処理させるマシン郡(計算ノード)の設定の単位です。

> pcluster configure

リージョンを選択します。ap-northeast-1を選択しました。

Allowed values for AWS Region ID:
1. ap-northeast-1
2. ap-northeast-2
3. ap-south-1
4. ap-southeast-1
5. ap-southeast-2
6. ca-central-1
7. eu-central-1
8. eu-north-1
9. eu-west-1
10. eu-west-2
11. eu-west-3
12. sa-east-1
13. us-east-1
14. us-east-2
15. us-west-1
16. us-west-2
AWS Region ID [ap-northeast-1]: 1

EC2のキーペアを選択します。既存のキーペアが候補にでてきたのそのまま使いました。

Allowed values for EC2 Key Pair Name:
1. sandbox-key
EC2 Key Pair Name [sandbox-key]: 1

ジョブスケジューラを選択します。デフォルトのslurmを使います。

Allowed values for Scheduler:
1. sge
2. torque
3. slurm
4. awsbatch
Scheduler [slurm]:

OSを選択します。デフォルトのままamazon linux2で計算ノードは常時0個で、最大10個起動するt2.microインスタンス。常時起動のマスタノードもt2.microで進めます。

Allowed values for Operating System:
1. alinux
2. alinux2
3. centos6
4. centos7
5. ubuntu1604
6. ubuntu1804
Operating System [alinux2]:
Minimum cluster size (instances) [0]:
Maximum cluster size (instances) [10]:
Master instance type [t2.micro]:
Compute instance type [t2.micro]:

AWS ParallelClusterのVPCを作ってくれるのでyes作ります。1が推奨構成のネットワーク構成でしたの1を選択して進めます。

Automate VPC creation? (y/n) [n]: y
Allowed values for Network Configuration:
1. Master in a public subnet and compute fleet in a private subnet
2. Master and compute fleet in the same public subnet
Network Configuration [Master in a public subnet and compute fleet in a private subnet]: 1

推奨構成

クラスタの作成

コンフィグ作成後、任意の名前をつけて自分用のクラスタを作成します。一発コマンド打って5〜10分待ちです。

> pcluster create abashiri-cluster
Beginning cluster creation for cluster: abashiri-cluster
Creating stack named: parallelcluster-abashiri-cluster
Status: parallelcluster-abashiri-cluster - CREATE_COMPLETE
ClusterUser: ec2-user
MasterPrivateIP: 10.0.0.10

作成できたか確認してみます。abashiri-clusterができていました。

> pcluster list
abashiri-cluster  CREATE_COMPLETE  2.7.0

AWS ParallelClusterを使ってみよう

マスタノードにログインします。pcluster ssh [作成したクラスタ名]コマンドでsshと同じ感じで接続できます。

> pcluster ssh abashiri-cluster -i ~/aws/sandbox-key.pem

ec2-user@ip-10-0-0-10 ~]$

キューの確認

BlackBeltと公式のユーザガイドもジョブスケジューラにSGEを使用しており、Slurmとコマンドに互換性はなくコマンド調べるところからはじまりました。 Slurmはsqueueでキューを確認できます。

$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)

ジョブの準備

job.shというホスト名を返すだけのシェルスクリプトを作りました。

#!/bin/bash
hostname

ジョブを登録

sbatch [スクリプト名]コマンドでジョブとしてキューに入れます。JOBID2としてキューに登録されました。

$ sbatch job.sh
Submitted batch job 2

キューに入っています。

$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
                 2   compute   job.sh ec2-user PD       0:00      1 (Nodes required for job are DOWN, DRAINED or reserved for jobs in higher priority partitions)

放置してたら終わってました。シェルスクリプトと同ディレクトリにslurm-[JOBID].outとして結果が返ってきてました。 計算ノードでhostnameを実行して標準出力に返した結果がマスターノードにファイルとして保存される動きをしました。

$ ll
total 12
-rw-rw-r-- 1 ec2-user ec2-user 22 Jul  7 07:57 job.sh
-rw-rw-r-- 1 ec2-user ec2-user 15 Jul  7 08:01 slurm-2.out

計算ノードで自動的に起動してきたホスト名が書かれていました。

$ cat slurm-2.out
ip-10-0-28-153

もう一度実行

再実行したら別の計算ノードが起動してくるので、出力結果のホスト名が変わるはずです。

$ sbatch job.sh
Submitted batch job 3

$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
                 3   compute   job.sh ec2-user PD       0:00      1 (Nodes required for job are DOWN, DRAINED or reserved for jobs in higher priority partitions)
$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)

slurm-3.outが新たに生成されています。

$ ll
total 12
-rw-rw-r-- 1 ec2-user ec2-user 22 Jul  7 07:57 job.sh
-rw-rw-r-- 1 ec2-user ec2-user 15 Jul  7 08:01 slurm-2.out
-rw-rw-r-- 1 ec2-user ec2-user 15 Jul  7 09:08 slurm-3.out

先程とは違う計算ノードが起動してhostnameを叩いてきたのでしょう、ホスト名が変わっています。AWS ParallelClusterを使ってなにかを実行するという目的は達成しました。

$ cat slurm-3.out
ip-10-0-27-237

クラスターの削除

クラスタの後片付けもコマンドで一発です。今回の構成だとマスターノードとしてt2.microが常時起動しています。

> pcluster delete abashiri-cluster
Deleting: abashiri-cluster
Status: DynamoDBTable - DELETE_COMPLETE                                         Deleting: abashiri-cluster
Cluster deleted successfully.

おわりに

大量に計算ノード立ち上げてなにかしてみたいけど、並列プログラミングを覚えないとスパコンを活かした遊びができないと悟った。

1週間でスパコンを完全に理解する | Developers.IO

参考

unix15_sge.key