Slurmクラスタ構築日記
HPCといえばSlurmだよね ラズパイが腐るほどあるので、Slurmクラスタを作る。流れとしては、Slurmの全体像を理解してから、実際にSlurmをインストールして、クラスタを構築。んで、MPIジョブを投入できたら最高ですね。 参考文献 slurm公式 Slurmの全体像 クラスタを使って並列分散処理をしたいとき、どうするか?例えばMPIを使ってなにかを計算したいとき、どうするか?直接mpirunをすればいいよね?簡単だ。うん。ユーザがおれ一人で他の人がクラスタを使わない前提であれば直接実行していいよね。しかし、HPCシステムってのは基本的にはいろんな人に使われるんですよ。そんな時にいろんな人が同時にMPIのジョブを実行すると何が起こるか? まあ、これは予想だけど、基本的に1つのMPIプロセスに対して1つのコアが割り当てられるので、コア数を超えるプロセスが割り当てられそうなときは、mpirunの実行が失敗すると思うんですよ。 このようなリソース競合によるジョブの実行失敗などを防いだり、その他、リソースのマネジメントをするのがリソースマネジメントシステム(RMS)だよね。SlurmもRMSなわけだ。いろいろなRMSがあるわけで、その中でもSlurmの特徴が三つある。 ある一定期間、ユーザが計算資源(ノード)を占有することを許す 各ノードに対して、ジョブのスタート、実行、監視を可能にする 待ち行列内のpending jobに対して、恣意的な実行を可能にする slurmのアーキテクチャ 各ノードでslurmdデーモンが動いている。そして、マネジメントノード(マスターノード)ではslurmctldデーモンが動いている。ユーザはクライアントアプリを使って、slurmctldにアクセスし、ジョブのサブミットや、状態の確認ができる。 Slurmのインストール 参考文献 文献1 文献2(一番参考になった資料) 前提 ノード間でuidが同じユーザが作られていること これは、最初にラズパイの設定をするときにユーザ名を一律に決めておくことで解決できる。 ノード間でシステムの時刻が一致している事 これは、raspi-configのロケール設定でAsia/Tokyoを選ぶことで解決できる マスターノードのあるディレクトリをnfsとして外部にエクスポートしておくといろいろとらく マスターノード、スレーブノードのホスト名を決めておく /etc/hosts マスターノードの設定 リポジトリからのインストール sudo apt install slurm-wlm -y Slurmの設定 設定ファイルの場所は /etc/slurm/slurm.conf この場所に、デフォルトの設定ファイルを持ってくる cp /usr/share/doc/slurm-client/examples/slurm.conf.simple.gz . gzip -d slurm.conf.simple.gz mv slurm.conf.simple slurm.conf 設定ファイル(slurm.conf)の内容は厳密にかかないとだめ SlurmctldHost=node01(<ip addr of node01>) # e.g.: node01(192.168.1.14) # actual : zeta(172.20.2.1) SelectType=select/cons_res SelectTypeParameters=CR_Core ... ... ClusterName=glmdev ... ... NodeName=zeta NodeAddr=172.20.2.1 CPUs=4 Sockets=1 CoresPerSocket=4 State=UNKNOWN NodeName=slave1 NodeAddr=172.20.2.3 CPUs=4 Sockets=1 CoresPerSocket=4 State=UNKNOWN NodeName=slave2 NodeAddr=172.20.2.4 CPUs=4 Sockets=1 CoresPerSocket=4 State=UNKNOWN NodeName=slave3 NodeAddr=172.20.2.5 CPUs=4 Sockets=1 CoresPerSocket=4 State=UNKNOWN NodeName=slave4 NodeAddr=172.20.2.6 CPUs=4 Sockets=1 CoresPerSocket=4 State=UNKNOWN PartitionName=mycluster Nodes=slave[1-4] Default=YES MaxTime=INFINITE State=UP cgroup関係の設定ファイルをつくる /etc/slurm/cgroup.confに ...