メインコンテンツに移動

始動テスト4

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のマニュアルに記載の方法では,ビルドに成功することはないであろう.