タグ別アーカイブ: clustering

Parallellaでクラスタリング その5 Slurmで実行

前回の記事の最後に、srunコマンドで分散処理を実行してみました。出力を見てみると、4つの演算ノードでプロセス0〜4が生成されてしまっています。これは期待した挙動ではありません。各演算ノードはデュアルコアなのでそれぞれ2つのプロセスが実行され、全体として0〜7の計8つのプロセスとして実行されることを期待しています。

つまり、各プロセスの演算結果をプロセス0で集約できるようにしたい訳です。そうなるよう、srunから直接実行するのではなく、スクリプトを書いてバッチとして実行するようにしてみました。

$ vi slurm.sh
#!/bin/sh
#SBATCH -o slurm.output
#SBATCH --nodes=4
#SBATCH --ntasks-per-node=2
mpirun parallella-examples/para-para/hello-mpi.elf

#SBATCHから始まる行は、sbatchへ渡すオプションとなります。ここでは

  • 標準出力の出力先をslurm.outputファイルへ
  • ノード数は4
  • 各ノードで実行されるタスク数は2

としています。その他のオプションについてはslurmのドキュメントを当たってみて下さい。それでは実行してみましょう。

$ sbatch slurm.sh
$ cat slurm.output 
Hello World from MPI Process 6 on machine parallella04
Hello World from MPI Process 7 on machine parallella04
Hello World from MPI Process 4 on machine parallella03
Hello World from MPI Process 5 on machine parallella03
Hello World from MPI Process 0 on machine parallella01
Hello World from MPI Process 1 on machine parallella01
Hello World from MPI Process 2 on machine parallella02
Hello World from MPI Process 3 on machine parallella02

期待通りの動作になりました 😉

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 で逃げるのが無難です。

続きを読む

Parallellaでクラスタリング その2 NFSの導入

2016/08/03追記: 新しいファームがNFSv4に対応しましたので、新たに記事を起こしました。こちらのNFSv3対応の記事は参考程度にご覧下さい。

ちょっと前の記事でクラスタリングを組んだことを書きましたが、アプリをコンパイルする度にバイナリを各ノードにコピーするのが面倒になったので、NFSを使ってファイルを共有することにしました。Parallellaのlinux kernelはNFSサーバ非対応なので、母艦をNFSサーバにします。

まず母艦のdebianにnfs-kernel-serverを入れて、設定を行います。USERNAMEは母艦でのユーザ名です。マウントポイント~USERNAME/parallellaは192.168.100.0/24以下からmountできるようにしておきます。

$ sudo apt-get install nfs-kernel-server
...
$ sudo vi /etc/idmapd.conf
...
Domain = ドメイン
...
$ sudo vi /etc/exports
/home/USERNAME/parallella 192.168.100.0/24(rw,sync,fsid=0,crossmnt,no_subtree_check)
$ mkdir parallella
$ systemctl restart nfs-kernel-server

続きを読む

Parallellaでクラスタリング

いわゆるBeowulf型のクラスタをParallellaで構築してみます。と言っても、最新のインストールイメージにデフォルトでOpenMPIがインストールされていますので、これを利用することで簡単にクラスタリングを試すことができます。

ここでは、ハブを介して2台のParallella DesktopをGbEで接続し、DHCPでMACアドレスに対して静的にIPアドレスを割り当てるものとします。片方のParallellaのホスト名をparallella01, もう一台をparallella02とし、parallella01をマスター演算ノードとします。parallella01, 02のホスト名・IPアドレスの紐付けは/etc/hostsあるいはLANのDNS等で引けるようにしておきます。

  1. parallella01でssh-keygenで公開鍵・秘密鍵のペアを生成します
  2. 生成した公開鍵をparallella02にコピーし、~/.ssh/authorized_keysに追加します
  3. parallella01で以下のコマンドを実行します
$ cd parallella-examples/para-para
$ mpirun -np 4 -host parallella01,parallella02 ./hello-mpi.elf
Hello World from MPI Process 0 on machine parallella01
Hello World from MPI Process 1 on machine parallella01
Hello World from MPI Process 2 on machine parallella02
Hello World from MPI Process 3 on machine parallella02

あっさりクラスタリングできました。-npオプションの引数は2ノード2コア=4となります。4より大きい値を指定するとNUMA云々でエラーになります。なお、para-paraアプリと同じようなアプリが~/test/mpiにもあります。こちらはアプリを自分でmakeする必要がありますが、基本的な実行方法は同じです。

今回は各ノードに個別に同じバイナリを置きましたが、マスター演算ノード(ここではparallella01)のファイルシステムをNFSでスレーブ演算ノード(ここではparallella02)にマウントさせる、という方法も可です。というか、そちらの方がよりBeowulfっぽいかも。ただ、Parallella標準のlinux kernelはNFSサーバに対応してないっぽいです。