いい加減うまくいってほしいのじゃが.
SLURM-SERVERインストール
make munge.key.create make slurm-server openssl 1:1.1.1-8.el8 munge 0.5.13-1.el8 maria 3:10.3.11-2.module_el8.0.0+35+6f2527ed httpd 2.4.37-12.module_el8.0.0+185+5908b0db mailx 12.5-29.el8 readline 7.0-10.el8 pam 1.3.1-4.el8 libcurl 7.61.1-8.el8 python-devel 3.6.8-2.module_el8.0.0+33+0a10c0e1 boost boost-1.71.0 libevent-devel 2.1.8-5.el8 openpmix v3.1.4 slurm slurm-19-05-4-1 gfortran 8.2.1-3.5.el8 cmake 3.11.4-3.el8 ompi v4.0.2 boost-mpi boost-1.71.0 slurm-server slurm-19-05-4-1
SLURM-CLIENTインストール
make munge.key.copy make slurm-client openssl 1:1.1.1-8.el8 munge 0.5.13-1.el8 maria 3:10.3.11-2.module_el8.0.0+35+6f2527ed httpd 2.4.37-12.module_el8.0.0+185+5908b0db mailx 12.5-29.el8 readline 7.0-10.el8 pam 1.3.1-4.el8 libcurl 7.61.1-8.el8 python-devel 3.6.8-2.module_el8.0.0+33+0a10c0e1 boost boost-1.71.0 libevent-devel 2.1.8-5.el8 openpmix v3.1.4 slurm slurm-19-05-4-1 gfortran 8.2.1-3.5.el8 cmake 3.11.4-3.el8 ompi v4.0.2 boost-mpi boost-1.71.0 slurm-client slurm-19-05-4-1
試し斬り
# smgr Command:v NODE PARTITION C:S:T MEM DISK FEATURE STAT REASON ib2007-3 F,B,E,L 1:2:1 3935 300000 kuzu idle none ib2007-4 F,B,E,L 1:2:1 3935 300000 noroma down none Command:on ib2007-4 scontrol update NodeName=ib2007-4 State=idle Command:v NODE PARTITION C:S:T MEM DISK FEATURE STAT REASON ib2007-3 F,B,E,L 1:2:1 3935 300000 kuzu idle none ib2007-4 F,E,B,L 1:2:1 3935 300000 noroma idle none
なんか手足がなくなって頭と胴体しかないのが寂しいが,テストは可能だ.
もう忘れちまったがプログラムはこれだ
boke.cpp:
#include <iostream>
#include <boost/mpi.hpp>
#include <boost/asio.hpp>
int main(int argc, const char * argv[]) {
boost::mpi::environment env;
boost::mpi::communicator com;
std::cout << "Hello, Boost.MPI CPU-" << com.rank() << " on " << boost::asio::ip::host_name() << std::endl;
return 0;
}
ほんでib2007-3 (h225) マシンでテストしてみる:
mpic++ boke.cpp -L/usr/local/lib -lboost_mpi -o boke mpirun -np 2 ./boke Hello, Boost.MPI CPU-0 on h225.229.249.10.1016485.vlan.kuins.net Hello, Boost.MPI CPU-1 on h225.229.249.10.1016485.vlan.kuins.net ← 何も言わなきゃそりゃローカルで実行 mpirun -np 2 --host ib2007-3,ib2007-4 ./boke Hello, Boost.MPI CPU-0 on h225.229.249.10.1016485.vlan.kuins.net Hello, Boost.MPI CPU-1 on h226.229.249.10.1016485.vlan.kuins.net ← 2ノードで1プロセスづつだ! mpirun -np 2 --host ib2007-4,ib2007-4 ./boke Hello, Boost.MPI CPU-0 on h226.229.249.10.1016485.vlan.kuins.net Hello, Boost.MPI CPU-1 on h226.229.249.10.1016485.vlan.kuins.net ← リモートノードで2プロセス mpirun -np 4 --host ib2007-4,ib2007-4,ib2007-3,ib2007-3 ./boke Hello, Boost.MPI CPU-1 on h225.229.249.10.1016485.vlan.kuins.net Hello, Boost.MPI CPU-0 on h225.229.249.10.1016485.vlan.kuins.net Hello, Boost.MPI CPU-2 on h226.229.249.10.1016485.vlan.kuins.net Hello, Boost.MPI CPU-3 on h226.229.249.10.1016485.vlan.kuins.net ← 2ノードで2プロセスづつ
ふむ.mpirunは無事にできている.
では, srunではどうだ. あれ? slurmdbd が文句があるみたいよ:
[2019-12-22T19:13:03.811] error: We should have gotten a new id: Table 'slurm_acct_db.fdlab_job_table' doesn't exist [2019-12-22T19:13:03.811] error: _add_registered_cluster: trying to register a cluster (fdlab) with no remote port
ん?Table?Mariaさんがらみ?あ,確かに全面再インストールで新しいのと付き合うんだっつうてマリアさま洗っときましたけど.あかんかったですかね.あ:スクリプトで sacctmgr create cluster fdlab 入れとくの忘れてるわー.再設定完了. バグっとるサーバーを再起動:
ではどうだ
SLURM-SERVERインストール
make munge.key.create make slurm-server selinux disabled maria 完了しました! MariaDBの管理パスワードを設定します. 以下のように答えると幸先が良い: Set root password: Y New password, Re-enter new password お好きなパスワード入力 ... Remove Anonymous Users: Y Disallow root login remotey : Y Remove test database : Y Reload priviledge talbes now: Y パスワードは覚えとくとよ. (HIT ENTER KEY) NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we'll need the current password for the root user. If you've just installed MariaDB, and you haven't set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none): (初めてならENTER) OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation. Set root password? [Y/n] Y New password: いつもの Re-enter new password:いつもの Password updated successfully! Reloading privilege tables.. Reloading privilege tables.. .... さっきのパスワードですよ: Enter password:いつもの maria slurm h225.229.249.10.1016485.vlan.kuins.netB9*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 openssl 1:1.1.1-8.el8 munge 0.5.13-1.el8 maria-devel 3:10.3.11-2.module_el8.0.0+35+6f2527ed httpd 2.4.37-12.module_el8.0.0+185+5908b0db mailx 12.5-29.el8 readline 7.0-10.el8 pam 1.3.1-4.el8 libcurl 7.61.1-8.el8 python-devel 3.6.8-2.module_el8.0.0+33+0a10c0e1 boost boost-1.71.0 libevent-devel 2.1.8-5.el8 openpmix v3.1.4 slurm slurm-19-05-4-1 gfortran 8.2.1-3.5.el8 cmake 3.11.4-3.el8 ompi v4.0.2 boost-mpi boost-1.71.0 slurm-server Fond user slurm [666] slurm-serverConfigure SlurmDbd... slurm-serverConfigure SlurmCtld... slurm-serverBuilding Database... sacctmgr create cluster fdlab Adding Cluster(s) Name = fdlab Would you like to commit changes? (You have 30 seconds to decide) (N/y): y slurm-serverジョブかきん・かんりサーバOK
よっしゃ. mpirunでテスト
mpirun -np 4 --host ib2007-4,ib2007-4,ib2007-3,ib2007-3 ./boke
Hello, Boost.MPI CPU-1 on h225.229.249.10.1016485.vlan.kuins.net
Hello, Boost.MPI CPU-0 on h225.229.249.10.1016485.vlan.kuins.net
Hello, Boost.MPI CPU-2 on h226.229.249.10.1016485.vlan.kuins.net
Hello, Boost.MPI CPU-3 on h226.229.249.10.1016485.vlan.kuins.net ← 2ノードで2プロセスづつ
よいですね. ではジョブで.
MPI.sh: #!/bin/bash #SBATCH --partition F #SBATCH --output my.log #SBATCH --error my.err #SBATCH --job-name="(^o^)" #SBATCH --mem-per-cpu=500 #SBATCH --time=0-00:04 #SBATCH --ntasks=4 echo -e "Main NODE:\c" hostname -a mpirun ./boke sb MPI.sh sl JobID User Partition JobName Timelimit Elapsed State MaxRSS MaxVMSize NodeList ------------ --------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- --------------- 15 sugimoto F (^o^) 00:04:00 00:00:02 COMPLETED ib2007-[3-4] 15.batch batch 00:00:02 COMPLETED 0 0.13G ib2007-3 15.0 orted 00:01:04 COMPLETED 0 0.38G ib2007-[3-4]
おう.なんか走るみたいだぞ.
cat my.log
Main NODE:ib2007-3.229.249.10.1016485.vlan.kuins.net
Hello, Boost.MPI CPU-2 on h226.229.249.10.1016485.vlan.kuins.net
Hello, Boost.MPI CPU-0 on h225.229.249.10.1016485.vlan.kuins.net
Hello, Boost.MPI CPU-3 on h226.229.249.10.1016485.vlan.kuins.net
Hello, Boost.MPI CPU-1 on h225.229.249.10.1016485.vlan.kuins.net
うまくいった!
だが, srunで別ノードを利用できない:
srun -n 2 -p F ./boke ← -n 2 は2スレッド使用 srun: job 17 queued and waiting for resources srun: job 17 has been allocated resources Hello, Boost.MPI CPU-0 on h225.229.249.10.1016485.vlan.kuins.net Hello, Boost.MPI CPU-1 on h225.229.249.10.1016485.vlan.kuins.net srun -N 2 -p F ./boke ← -N 2は2ノード使用 slurmstepd: error: ib2007-4 [1] pmixp_dconn_tcp.c:138 [_tcp_connect] mpi/pmix: ERROR: Cannot establish the connection slurmstepd: error: ib2007-4 [1] pmixp_dconn.h:243 [pmixp_dconn_connect] mpi/pmix: ERROR: Cannot establish direct connection to ib2007-3 (0) slurmstepd: error: ib2007-4 [1] pmixp_server.c:731 [_process_extended_hdr] mpi/pmix: ERROR: Unable to connect to 0 slurmstepd: error: ib2007-4 [1] pmixp_coll_ring.c:614 [pmixp_coll_ring_check] mpi/pmix: ERROR: 0x1542f0019d60: unexpected contrib from ib2007-4:1, expected is 0 slurmstepd: error: ib2007-4 [1] pmixp_server.c:935 [_process_server_request] mpi/pmix: ERROR: 0x1542f0019d60: unexpected contrib from ib2007-4:1, coll->seq=1, seq=0 slurmstepd: error: *** STEP 16.0 ON ib2007-3 CANCELLED AT 2019-12-23T14:36:29 *** slurmstepd: error: ib2007-4 [1] pmixp_dconn.h:289 [pmixp_dconn_accept] mpi/pmix: ERROR: Unexpected direct connection state: 3 slurmstepd: error: ib2007-4 [1] pmixp_server.c:1208 [_direct_conn_establish] mpi/pmix: ERROR: Failed to accept direct connection from 1(ib2007-4) srun: Job step aborted: Waiting up to 32 seconds for job step to finish. srun: error: ib2007-4: task 1: Killed srun: error: ib2007-3: task 0: Killed
まあ srun 使わないから, いいや. んー,でもやっぱ変だ.こいつ,うまくやってるみたいだな.真似してみる.
おう.こいつはうまくいくぞ! 要は
- openpmixを, /usr/local以外のフォルダー(/usr/local/pmix など)にインストール.
- slurmのビルドで, configure --with-pmix=そのフォルダ
- ompiのビルドで, configure --with-slurm --with-pmix=そのフォルダ --with-libevent --with-hwloc=internal --with-ompi-pmix-rte --disable-mca-dso
すればよかったのである.ってわかるわけないやろが!ときに,このようにインストールすると,従来のMPIとは大きな違いが出る:
- mpirun, mpiexec が存在しない
- ターミナルから srun を打つと, いきなりジョブということになって実行される
- ジョブ文では,オプションなしで srun 実行ファイル とすると,何気に実行される
都市伝説シリーズ
SLURMにまつわる都市伝説ーこれしたらダメが,ネットのあちこちで囁かれている.問題は,マニュアル・ドキュメントにマトモに書かれていないのが,そもそもの問題である.検証する.
伝説その壱:管理サーバーで計算するのは愚か者
サイトによっては,SLURMでは,管理サーバーは計算ノードにできない,という噂を聞く.
真っ赤な嘘である.試作ゴミクラスタでは無事に実行できる.
$ sn This is SERVER NODE PARTITION C:S:T MEM DISK FEATURE STAT REASON h223 F 1:2:1 3935 150000 noroma idle none h225 S 1:2:1 3935 300000 guzu idle none ← こいつ,管理サーバ h226 F 1:2:1 3935 300000 noroma idle none $ srun -N 1 -n 2 -p S ./boke Hello, Boost.MPI CPU-0 on h225.229.249.10.1016485.vlan.kuins.net Hello, Boost.MPI CPU-1 on h225.229.249.10.1016485.vlan.kuins.net
Sジョブなので,管理サーバーでMPIジョブが実行できた.もちろん,管理サーバーを含まない Fジョブでは複数台またがったMPIも可能なのぢゃよ:
$ srun -N 2 -n 4 -p F ./boke
Hello, Boost.MPI CPU-0 on h223.229.249.10.1016485.vlan.kuins.net
Hello, Boost.MPI CPU-2 on h226.229.249.10.1016485.vlan.kuins.net
Hello, Boost.MPI CPU-1 on h223.229.249.10.1016485.vlan.kuins.net
Hello, Boost.MPI CPU-3 on h226.229.249.10.1016485.vlan.kuins.net
ほれほれ,2台で2コアづつで4プロセスである.いいじゃないか,じゃあ管理サーバーもFジョブに参加しよう. サーバーの /usr/local/etc/slurm.conf を書き換えてッと
# smgr d This is SERVER クライアントに送るぞ scp /usr/local/etc/slurm.conf h223:/usr/local/etc/slurm.conf Password:いちゅもの scp /usr/local/etc/slurm.conf h226:/usr/local/etc/slurm.conf Password:いちゅもの # smgr r # smgr n NODE PARTITION C:S:T MEM DISK FEATURE STAT REASON h223 F 1:2:1 3935 150000 noroma idle none h225 S,F 1:2:1 3935 300000 guzu idle none h226 F 1:2:1 3935 300000 noroma idle none $ srun -N 3 -n 6 -p F ./boke slurmstepd: error: h223 [0] pmixp_coll_ring.c:614 [pmixp_coll_ring_check] mpi/pmix: ERROR: 0x14b62c006e10: unexpected contrib from h223:0, expected is 2 slurmstepd: error: h223 [0] pmixp_server.c:935 [_process_server_request] mpi/pmix: ERROR: 0x14b62c006e10: unexpected contrib from h223:0, coll->seq=0, seq=0 slurmstepd: error: h223 [0] pmixp_dconn.h:289 [pmixp_dconn_accept] mpi/pmix: ERROR: Unexpected direct connection state: 3 slurmstepd: error: h223 [0] pmixp_server.c:1208 [_direct_conn_establish] mpi/pmix: ERROR: Failed to accept direct connection from 0(h223) slurmstepd: error: h226 [2] pmixp_dconn_tcp.c:138 [_tcp_connect] mpi/pmix: ERROR: Cannot establish the connection slurmstepd: error: h226 [2] pmixp_dconn.h:243 [pmixp_dconn_connect] mpi/pmix: ERROR: Cannot establish direct connection to h225 (1) slurmstepd: error: h226 [2] pmixp_server.c:731 [_process_extended_hdr] mpi/pmix: ERROR: Unable to connect to 1 srun: Job step aborted: Waiting up to 32 seconds for job step to finish. slurmstepd: error: *** STEP 87.0 ON h223 CANCELLED AT 2019-12-24T18:02:16 *** srun: error: h223: tasks 0-1: Killed srun: error: h225: tasks 2-3: Killed srun: error: h226: tasks 4-5: Killed
これはできないのである.つまり,少なくとも試作ゴミでは,
- 管理サーバーは,単一ノードのジョブは実行できる
- 管理サーバーと,計算ノードが合作してMPIを実行することはできぬ.
- ポートがダブってるとか,そこらへんの事情があるんじゃないか?
伝説その弐:計算ノードに別名をつけると死ぬ
計算ノードに別名をつけることは, SLURM的には問題なく可能である.
# sn This is SERVER NODE PARTITION C:S:T MEM DISK FEATURE STAT REASON ib2007-1 F 1:2:1 3935 150000 kuzu idle none ← DNSさまより下賜されたh223が気に入らねえので, ib2007-1と名乗っている ib2007-3 S 1:2:1 3935 300000 kuzu idle none ← 本当は h225 ib2007-4 F 1:2:1 3935 300000 noroma idle none ← 本当は h226 $ srun -N 2 -n 4 -p F ./boke srun: error: Task launch for 89.0 failed on node ib2007-1: Invalid node name specified srun: error: Task launch for 89.0 failed on node ib2007-4: Invalid node name specified srun: error: Application launch failed: Invalid node name specified srun: Job step aborted: Waiting up to 32 seconds for job step to finish.
ほれ.名前を変えただけなのに,死んでしまう.やり方がまずいのか?全てのプロセスを一度ちゃんと止めて再起動すると
$ sn NODE PARTITION C:S:T MEM DISK FEATURE STAT REASON ib2007-1 F 1:2:1 3935 150000 noroma idle none ib2007-2 F 1:2:1 3935 200000 noroma idle none ib2007-3 S 1:2:1 3935 200000 guzu idle none ib2007-4 F 1:2:1 3935 200000 noroma idle none $ srun -N 3 -n 6 -p F ./boke Hello, Boost.MPI CPU-1 on h223.229.249.10.1016485.vlan.kuins.net Hello, Boost.MPI CPU-2 on h224.229.249.10.1016485.vlan.kuins.net Hello, Boost.MPI CPU-4 on h226.229.249.10.1016485.vlan.kuins.net Hello, Boost.MPI CPU-3 on h224.229.249.10.1016485.vlan.kuins.net Hello, Boost.MPI CPU-5 on h226.229.249.10.1016485.vlan.kuins.net Hello, Boost.MPI CPU-0 on h223.229.249.10.1016485.vlan.kuins.net
ほれ.なんの問題もねえよ. ところで, boost::asio::hostnameぢゃが,aliasの方を出すってのわ出来ないんですかねえ?ま,ええけどな