Parallellaでクラスタリング その4 Slurmの導入

前回の記事で3台以上のクラスタリングの構成ができましたが、より高度なリソース管理を行いたいと思います。分散処理のリソースマネージャとしてはTorqueの方が日本語情報が豊富なようですが、ここでは敢えてSlurmを使ってみたいと思います。

まず、管理ノード (兼演算ノード)にするparallella01にmungeをインストールします。インストールできたら/usr/sbin/create-munge-keyを実行してmungedを起動します。

$ sudo apt-get install munge
...
$ sudo /usr/sbin/create-munge-key
...
$ sudo /etc/init.d/munge start
 * Starting MUNGE munged
 ...fail!
munged: Error: Logfile is insecure: group-writable permissions set on "/var/log"

/va/logディレクトリに書き込み権限がないと怒っています。調べてみたところ、mungeのデフォルトオプションを指定してやればよいようです。

$ sudo vi /etc/default/munge
...
OPTIONS="--force"
$ sudo /etc/init.d/munge start
  * Starting MUNGE munged
    ...done.

無事にインストールできました。なお、OPTIONSには --syslog も指定できますが、/var/log以外にも色々と怒られるので --force で逃げるのが無難です。

次に、slurmをインストールします。ubuntuでのパッケージ名はslurm-llnlです。インストール自体は問題なく進められると思います。インストールできたら、設定ファイル slurm.conf を作成します。/usr/share/doc/slurm-llnl/examples/slurm.conf.simple.gzを参考に作成してもよいですし、JavaScriptに対応したブラウザからローカルの/usr/share/doc/slurm-llnl/slurm-llnl-configurator.htmlを開いて生成してもよいと思います。後者はJavaScriptで生成されるので、Parallellaがheadless環境の場合は母艦のLinux等にこのconfiguratorをコピーしても動作させられます。

$ sudo apt-get install slurm-llnl
...
$ vi /etc/slurm-llnl/slurm.conf
...

さて、ここまでできたら、演算ノードの方にもmungeとslurmをインストールしていきます。

p02$ sudo apt-get install munge slurm-llnl
...

管理ノードのmunge.keyとslurm.confをすべての演算ノードにコピーして、mungeとslurmを起動します。mungeは管理ノードと同様のエラーが出ますので、前述の手順で対応する必要があります (ここでは割愛します)。slurmの再起動時は、restartではなくstop->startcleanがよいようです。

# 管理ノードからすべての演算ノードへコピー
p01$ sudo scp /etc/munge/munge.key parallella@p02:~
p01$ sudo scp /etc/slurm-llnl/slurm.conf parallella@p02:~
# すべての演算ノードで以下の作業を行う
p02$ sudo mv ~parallella/munge.key /etc/mumge
p02$ sudo chmod 400 /etc/munge/munge.key
p02$ sudo chown munge:munge /etc/munge/munge.key
p02$ sudo vi /etc/default/munge
...
p02$ sudo /etc/init.d/munge start
...
p02$ sudo mv ~parallella/slurm.conf /etc/slurm-llnl/
p02$ sudo /etc/init.d/slurm-llnl stop
p02$ sudo /etc/init.d/slurm-llnl startclean

さて、ここまでできたら準備完了です。管理ノードからsinfoコマンドで確認してみます。

p01$ sinfo
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
debug*       up  infinite     4  idle parallella[01-04]

ちゃんと認識されているようです。試しに hostname コマンドを実行してみます。

$ srun -N 4 hostname
parallella02
parallella04
parallella03
parallella01

OpenMPIも試してみます。

$ cd ~/parallella-examples/para-para
$ srun -N 4 mpirun hello-mpi.elf
Hello World from MPI Process 1 on machine parallella01
Hello World from MPI Process 0 on machine parallella03
Hello World from MPI Process 3 on machine parallella04
Hello World from MPI Process 2 on machine parallella02
Hello World from MPI Process 0 on machine parallella04
Hello World from MPI Process 0 on machine parallella02
Hello World from MPI Process 2 on machine parallella02
Hello World from MPI Process 1 on machine parallella01
Hello World from MPI Process 1 on machine parallella01
Hello World from MPI Process 3 on machine parallella04
Hello World from MPI Process 3 on machine parallella03
Hello World from MPI Process 2 on machine parallella03
Hello World from MPI Process 0 on machine parallella01
Hello World from MPI Process 2 on machine parallella03
Hello World from MPI Process 3 on machine parallella04
Hello World from MPI Process 1 on machine parallella02

いいんじゃないでしょうか 🙂

2016/01/12追記: 次の記事へ続きます。

Parallellaでクラスタリング その4 Slurmの導入」への1件のフィードバック

  1. ピンバック: Parallellaでクラスタリング その5 Slurmで実行 | CB1300SFのある生活

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です