SLURMアリ地獄にハマってもがいてたら腐海の底に落ちて,手足が少し減ったがミンチにはなってないみたいなので継続する. 打つ手は2つ:
- PMIxをインストールしない
- PMIxをデフォルト以外でインストール
ここでは,前者を試す.
SLURMインストール
make slurm openssl完了しました! munge完了しました! mungeExecuting: /usr/lib/systemd/systemd-sysv-install enable munge mungeまんげOK python-devel完了しました! boostSubmodule path 'tools/quickbook': checked out '944f760cc2decfe745540f0 boostboost ...failed updating 1 target... boostboost ...skipped 14 targets... boost...updated 1166 targets... boostぶうすと: いくつかびるどできん maria-devell完了しました! httpd完了しました! mailx完了しました! readline完了しました! libcurl完了しました! slurmlUsing python3 as default slurml./configure --prefix=/usr/local --with-munge slurmlconfig.status: executing libtool commands slurmlmake[1]: ディレクトリ '/local/packages/thirdparty/CLUSTER/BASE/slurm' から出 slurmlすらるむOK
Boostがこけてるが, まあ, だいたい普通にいくつかビルドできないから,気にもならねえ.数十個くらいはエラーしても気がつかねえだろう.使わないんだったらカンケーねーよ. スキップしたのはOMPI周りだろうな.
この段階でサポートされている並列計算を見てみる:
srun --mpi=list
srun: MPI types are...
srun: none
srun: openmpi
srun: pmi2
まあええけど, この openmpi って,なにをどうするつもりなんだろうね.
SLURM-SERVERインストール
make munge.key.create
make slurm-server
gfortran完了しました! ←もう誰も使わねえけど一応記念に
cmake完了しました!
ompimake[1]: ディレクトリ '/local/packages/thirdparty/CLUSTER/BASE/openpmix' から出
ompiえむぴーあいOK
boost-mpi...found 37811 targets...
boost-mpiぶうすとえむぴあいOK
slurm-serverConfigure SlurmDbd...
slurm-serverFirewallD is not running
slurm-serverConfigure SlurmCtld...
slurm-serverFirewallD is not running
slurm-serverジョブかきん・かんりサーバOK
試し打ち
ええっと, /usr/local/etc/slurm.conf のポイントはですね,
MpiDefault=pmi2
だけですね.ほんで
# sn NODE PARTS C:S:T MEM DISK FEAT STAT REASON ib2007-1 F,L,E,B 1:2:1 3935 150000 kuzu unkno none ib2007-2 F,L,E,B 1:2:1 3935 400000 noroma idle none ib2007-3 F,L,E,B 1:2:1 3935 300000 kuzu unkno none ib2007-4 F,L,E,B 1:2:1 3935 300000 noroma down AHO
といったところで, kuzuである管理サーバーib2007-3だけが生存している状況を考えます. で試す. あれ?生きてねえじゃんか.
# smgr This is SERVER Command: on ib2007-3
よっしゃ.試し斬りでござるよ.
$ 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
なるほど手動は動作する. では, ジョブで.
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=1
echo -e "Main NODE:\c"
hostname -a
mpirun ./boke
これで
$ sb MPI.sh Submitted batch job 10 $ sl 10 sugimoto F (^o^) 00:04:00 00:00:02 COMPLETED ib2007-3 10.batch batch 00:00:02 COMPLETED 0 0.13G ib2007-3 10.0 orted 00:00:03 COMPLETED 0 0.26G ib2007-3 $ cat my.log Main NODE:ib2007-3.229.249.10.1016485.vlan.kuins.net Hello, Boost.MPI CPU-0 on h225.229.249.10.1016485.vlan.kuins.net
やっほう.できたぞ.ntasks=2 にすると
$ cat my.log
Main NODE:ib2007-3.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-1 on h225.229.249.10.1016485.vlan.kuins.net
なるほど. ここまではこれでよいのだ.だが, srun は動作しない:
[h225.229.249.10.1016485.vlan.kuins.net:26024] OPAL ERROR: Not initialized in file pmix3x_client.c at line 112
--------------------------------------------------------------------------
The application appears to have been direct launched using "srun",
but OMPI was not built with SLURM's PMI support and therefore cannot
execute. There are several options for building PMI support under
SLURM, depending upon the SLURM version you are using:
Version 16.05 or later: you can use SLURM's PMIx support. This
requires that you configure and build SLURM --with-pmix.
Please configure as appropriate and try again.
このようにPMIx地獄への招待状が出てくる.もう騙されないぞ. 騙されないようにするには, SLURMではなく,OMPIの--with-pmiオプションを何とかするべきであるのだ. OMPIのconfigureの該当する部分は:
--with-cuda(=DIR) Build cuda support, optionally adding DIR/include --with-pmi(=DIR) Build PMI support, optionally adding DIR to the search path (default: no) --with-pmi-libdir=DIR Look for libpmi or libpmi2 in the given directory DIR, DIR/lib or DIR/lib64 --with-pmix(=DIR) Build PMIx support. DIR can take one of three values: "internal", "external", or a valid directory name. "internal" (or no DIR value) forces Open MPI to use its internal copy of PMIx. "external" forces Open MPI to use an external installation of PMIx. Supplying a valid directory name also forces Open MPI to use an external installation of PMIx, and adds DIR/include, DIR/lib, and DIR/lib64 to the search path for headers and libraries. Note that Open MPI does not support --without-pmix --with-pmix-libdir=DIR Look for libpmix the given directory DIR, DIR/lib or DIR/lib64
で, 現状の config.log をみると
configure:14098: WARNING: discovered external PMIx version is less than internal version 3.x configure:14100: WARNING: using internal PMIx
つまり, PMIxはinternal状態で稼働している. それはそれでよい. ところで, 黙っておくと internal が version 3.x になっているのね. だから出てくるエラーは pmix3x_client.c at line 112 の, PMIx Version 3って感じなのね.で, OMPIが自力で動くのならそれで良いのだけれども, SLURMの支配下で動作する場合には, SLURMがversion 3.xをちゃんとサポートしていないとエラーになる. ところがSLURMのPMIx V3をインストールすると.インストールフォルダー重複問題を解かない限り,ひどい目にあう,って寸法だ. 代わりの方法としてSLURM内蔵pmi2を使えば良いのだが,デフォルトでは,
configure:12423: checking if have cuda support configure:12432: result: no configure:12634: checking if user requested PMI support configure:12637: result: no
で, PMIは無しになっているわけだ.
さて,どうするか. --with-pmiの指定先は何だ? /usr/local/ なのか, /usr/local/lib/slurm であるのか? さらに Look for libpmi or libpmi2 と書いてあるが, 残念ながら現状ではそのようなライブラリはない. 試しに, --with-pmi をつけてOMPIのconfigureを実行すると
ompi checking if user requested PMI support... yes
ompi checking for pmi.h in /usr/local... not found
ompi checking for pmi.h in /usr/local/include... found
ompi checking pmi.h usability... no
ompi checking pmi.h presence... no
ompi checking for pmi.h... no
ompi checking for libpmi in /usr/local/lib... checking for libpmi in /usr/local/lib64... not found
ompi checking for pmi2.h in /usr/local... not found
ompi checking for pmi2.h in /usr/local/include... found
ompi checking pmi2.h usability... no
ompi checking pmi2.h presence... no
ompi checking for pmi2.h... no
ompi checking for libpmi2 in /usr/local/lib... checking for libpmi2 in /usr/local/lib64... not found
ompi checking for pmix.h in /usr/local... not found
ompi checking for pmix.h in /usr/local/include... not found
ompi checking can PMI support be built... no
ompi configure: WARNING: PMI support requested (via --with-pmi) but neither pmi.h,
ompi configure: WARNING: pmi2.h or pmix.h were found under locations:
ompi configure: WARNING: /usr/local
ompi configure: WARNING: /usr/local/slurm
ompi configure: WARNING: Specified path: /usr/local
ompi configure: WARNING: OR neither libpmi, libpmi2, or libpmix were found under:
ompi configure: WARNING: /lib
ompi configure: WARNING: /lib64
ompi configure: WARNING: Specified path:
ompi configure: error: Aborting
ううむ.こうなってしまう,という点では, OMPIのマニュアルも嘘つきというわけだ. SLURMをビルドしただけでは, OMPIに必要な
- pmi2.h
- libpmi2.so
はインストールされないのだ. OMPIのマニュアルに記載の方法では,ビルドに成功することはないであろう.