メインコンテンツに移動

始動テスト6

いい加減うまくいってほしいのじゃが.

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の方を出すってのわ出来ないんですかねえ?ま,ええけどな