肝心なMPIがマニュアル通りの挙動をしてくれないので,いつも通り(omg)自作ビルドする.MPIが動かないクラスターは,まあ,ないだろうからなあ
自作ビルドなら, 古いもんはいらねえのでは.旧サーバーと同じバージョン構成にしよう. Boostも, チンケなこと言ってないで1.70系にしようや(ASIOで困る奴もいないしな).要するにIntelCompilerでやってたことをやるだけ,だ.3日も4日もかけて,馬鹿みたいだ.設定速度4/hの野望が潰えて萎えるわ.
まずは依存関係だが
- boost-mpiはboostとmpiに依存する
- mpiはpmix, slurmに依存する ん?mpiにboostいるんじゃ?忘れた
- slurmはpmix, mungeに依存する
- pmixをインストール
- mungeをインストール
という順番でいいのかな.まあやってみるべしよ.
Mungeインストール
make munge openssl完了しました! munge完了しました! mungeExecuting: /usr/lib/systemd/systemd-sysv-install enable munge mungeまんげOK
OpenPMIXインストール
make openpmix libevent-devell完了しました! openpmixmake[1]: ディレクトリ '/local/packages/thirdparty/CLUSTER/BASE/openpmix' から出 openpmixおーぷんぴみくすOKlurmインストール
SLURMインストール
make slurm maria-devell完了しました! httpd完了しました! mailx完了しました! readline完了しました! libcurl完了しました! slurmlUsing python3 as default slurml./configure --prefix=/usr/local --with-munge --with-pmix=/usr/local slurmlconfig.status: executing libtool commands slurmlmake[1]: ディレクトリ '/local/packages/thirdparty/CLUSTER/BASE/slurm' から出 slurmlすらるむOK
BOOSTインストール
make boost python-devel完了しました! boostSubmodule path 'tools/quickbook': checked out '944f760cc2decfe745540f0 boostboost ...failed updating 1 target... boostboost ...skipped 14 targets... boost...updated 1166 targets... boostぶうすと: いくつかびるどできん
まあ, だいたい普通にいくつかビルドできないから,気にもならねえ.数十個くらいはエラーしても気がつかねえだろう.使わないんだったらカンケーねーよ. スキップしたのはOMPI周りだろうな.
OpenMPIインストール
make ompi gfortran完了しました! ←もう誰も使わねえけど一応記念に cmake完了しました! ompi autoconf見てたら, tm (OpenPBS), slurm, LSF, ALPS に対応しているみたい ompi お・・・おせえ・・・ビルドおせえよ寝るよ いつまでやってんだよ ompimake[1]: ディレクトリ '/local/packages/thirdparty/CLUSTER/BASE/openpmix' から出 ompiえむぴーあいOK
BOOST-MPIインストール
make boost-mpi boost-mpi...found 37811 targets... boost-mpiぶうすとえむぴあいOK
SLURM-SERVERインストール
make munge.key.create make slurm-server slurm-serverConfigure SlurmDbd... slurm-serverFirewallD is not running slurm-serverConfigure SlurmCtld... slurm-serverFirewallD is not running slurm-serverジョブかきん・かんりサーバOK
SLURM-CLIENTインストール
make munge.key.copy コピーだよ! make slurm-client slurm-clientFirewallD is not running slurm-clientrじっこーのーどOK
試してみる
mpic++ boke.cpp -L/usr/local/lib -lboost_mpi -o boke mpirun -np 1 ./boke [h225:24936] *** Process received signal *** [h225:24936] Signal: Segmentation fault (11) [h225:24936] Signal code: Address not mapped (1) [h225:24936] Failing at address: 0x38 [h225:24936] [ 0] /lib64/libpthread.so.0(+0x12d80)[0x7ff2a396bd80] [h225:24936] [ 1] /usr/local/lib/pmix/mca_gds_ds21.so(+0x36f2)[0x7ff2a10726f2] [h225:24936] [ 2] /usr/local/lib/openmpi/mca_pmix_pmix3x.so(OPAL_MCA_PMIX3X_pmix_gds_base_select+0xf3)[0x7ff2a0e34623] ...
あり? pmix Version 3.1.4 では死んでいる・・・Version 2.1.1 ではどうだ?あ.pmixを再インストールしたらompiも作り直さないといけない.
SLURM | OpenPMI | OpenMPI | 手動実行 | ジョブ実行 | |
提供パッケージ | なし | 2.1.1 | 3.1.2 | 可能 | だめ |
トライ1 | 19.0.5 | 3.1.4 | 4.0.0 | だめ | |
トライ2 | 19.0.5 | 2.1.1 | 4.0.0 | 警告出る | だめ |
トライ3 | 19.0.5 | 3.1.4 | 4.0.2 | ○ | だめ |
ompiをビルドしなおすと
mpic++ boke.cpp -L/usr/local/lib -lboost_mpi -o boke mpirun -np 1 ./boke [h225.229.249.10.1016485.vlan.kuins.net:23739] pmix_mca_base_component_repository_open: unable to open mca_gds_ds21: /usr/local/lib/libmca_common_dstore.so.1: undefined symbol: pmix_namespace_t_class (ignored) [h225.229.249.10.1016485.vlan.kuins.net:23744] pmix_mca_base_component_repository_open: unable to open mca_gds_ds21: /usr/local/lib/libmca_common_dstore.so.1: undefined symbol: pmix_namespace_t_class (ignored) Hello, Boost.MPI CPU-0 on h225.229.249.10.1016485.vlan.kuins.net
エラーは吐くが,動作した.mpirun -np 2 でも動く. では, SLURMでは?
srun --mpi=pmi2 -p F -N 1 ./boke
[h225.229.249.10.1016485.vlan.kuins.net:23934] OPAL ERROR: Not initialized in file pmix3x_client.c at line 11
おう・・・pmixを再インストールしたので, slurmも作り直さないといけない. が,だめである.どうしてもpmix3xとか言い出す.
こまったな.おやや.OpenMPIのリリースノートに対応が書いてあるぞ.
OpenMPI | 3.1.0 | 3.1.2 | 4.0.0 | 4.0.1 | 4.0.2 |
PMIx | 2.1.1 | 2.1.3 | 2.1.2, 3.0.2 |
3.1.2 | 3.1.4 |
なるほど.おまえら,一緒にやれよ・・・・といってもTMもあるしな.そうはいかない事情もあるわけか.
まあよい.サポートに合わせよう. OMPI 4.0.2 + PMI 3.1.4 なら動くんですよね?
cd CLUSTER/BASE/ompi make distclean git checkout -b V4-0-2 refs/tags/v4.0.2 rm -rf /usr/local/include/mpi* /usr/local/share/openmpi /usr/local/lib/libmpi* /usr/local/lib/libmpi* cd ../openpmix make distclean git checkout -b V3-1-4 refs/tags/v3.1.4 rm -rf /usr/local/include/pmix* /usr/local/share/pmix /usr/local/lib/libpmix*
いやもう, /usr/local ごとふっ飛ばした方がはやいな.いやちがうな.OSごとふっ飛ばした方が確実だな.
OpenPMI, OMPIをビルドして試す:
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
しゅばらちいぢゃないか!んじゃ,ヂョブ管理ツステムでGO! っとと,SLURMビルドし直してっと.
srun -N 1 --mpi=pmix_v3 -p F ./boke
srun: Job step 30.0 aborted before step completely launched.
srun: Job step aborted: Waiting up to 32 seconds for job step to finish.
srun: error: task 0 launch failed: Unspecified error
んんん.TMの時も抵抗が強かったが,抵抗するなあ.なんだこれ
[2019-12-19T13:22:40.543] launch task 30.0 request from UID:2002 GID:2001 HOST:127.0.0.1 PORT:4739 [2019-12-19T13:22:40.543] lllp_distribution jobid [30] implicit auto binding: cores,one_thread, dist 8192 [2019-12-19T13:22:40.543] _task_layout_lllp_cyclic [2019-12-19T13:22:40.543] _lllp_generate_cpu_bind jobid [30]: mask_cpu,one_thread, 0x1 [2019-12-19T13:22:40.543] _run_prolog: run job script took usec=4 [2019-12-19T13:22:40.543] _run_prolog: prolog with lock for job 30 ran for 0 seconds [2019-12-19T13:22:40.563] [30.0] error: ib2007-3 [0] pmixp_client_v2.c:245 [pmixp_lib_init] mpi/pmix: ERROR: PMIx_server_init failed with error -2: Success (0) [2019-12-19T13:22:40.563] [30.0] error: ib2007-3 [0] pmixp_client.c:461 [pmixp_libpmix_init] mpi/pmix: ERROR: PMIx_server_init failed with error -1: Success (0) [2019-12-19T13:22:40.563] [30.0] error: ib2007-3 [0] pmixp_server.c:422 [pmixp_stepd_init] mpi/pmix: ERROR: pmixp_libpmix_init() failed [2019-12-19T13:22:40.563] [30.0] error: (null) [0] mpi_pmix.c:159 [p_mpi_hook_slurmstepd_prefork] mpi/pmix: ERROR: pmixp_stepd_init() failed [2019-12-19T13:22:40.565] [30.0] error: Failed mpi_hook_slurmstepd_prefork [2019-12-19T13:22:40.566] [30.0] error: job_manager exiting abnormally, rc = -1 [2019-12-19T13:22:40.568] [30.0] done with job
なんだろねこれ. この妙なルーチンは ompi/opal/mca/pmix/pmix3x/pmix3x_server_south.c: if (PMIX_SUCCESS != (rc = PMIx_server_init(&mymodule, pinfo, sz))) { ... とかで, OMPIがエラー出してるのね.ん?ビルド順間違ってねえか?OpenPMI → SLURM → OMPI なのでは.ってこたOMPIビルドし直しね. んん,でも pmix_v3 じゃなくて pmix_v2 でえらーしているのはなじぇに? んんん?この辺を見ると, OMPのpmiまわりのオプション,よく確認した方が良いか? with-pmi と with-pmix にexternal ってなんのこっちゃ.
そもそも, PMIとPMIxって,違うものなのか?openpmixとpmixの違いは?
理解していないものをビルドするのは不可能だ.
PMIxとはなんだ?OpenPMIxではないのか?
それはここか?PMIxとは, Process Management for Exascale Environment のことだそうだ. 正式には\(\text{PMIx)10^{18}\)というのね. 大変クソほど多くの資源をなんとか管理しようという,考え方らしい.
- PMIxとは, その規格書のことである. 実装コードではない.
- 規格文書はここだ https://github.com/pmix
- 試しにコードを書いている人がいる.OpenPMIx というそうだ.
- コードはここだ https://github.com/openpmix/
おっと・・・違うものなのか.片っ方は文書であり,片っ方はソースコードだ.
PMIxチームの主張 | SLURMの主張 | |||||
PMIx Standard | Ver 1.X | slurm 16.05以降でOK | slurm 16.05以降でOK | |||
Ver 2.1 (2018.Dec) | Ver 2.2 (2019.Feb) | slurm 17.11以降でOK | slurm 17.11以降でOK | |||
Ver 3.0 (2018 Dec) | Ver 3.1 (2019.Feb) | しらねっす | slurm 18.08以降でOK |
で,
- SLURM 18以降では, PMIx Standard V2.x を利用できます.
- PMIx Version 3 は使えねえのかもな.
- If PMIx was installed to a standard location (i.e., with a prefix of /usr or /usr/local), then Slurm will find it and build the PMIx plugin by default. Otherwise, Slurm should be configured with the –with-pmix=path-to-where-pmix-was-installed option. The PMIx plugin will be built and installed under the Slurm location.
- デフォルトでは, バックワードコンパチモードでビルドされる.
- すると libpmi, libpmi2 が作成される.
- 不運なことに, SLURMもPMI-1をデフォルトで(PMI-2もどうかしたら)作成する.けども,規格が違うomg
- で,ごちゃごちゃで何だこれ状態に陥る場合がある,とか
- プログラムをコンパイルする時PMIxのlibpmi-2を使い, SLURMでジョブを打つと, なんだこれ死ね状態に陥るだろう
-
We recommend installing Slurm and PMIx in different (non-default) locations to avoid the conflict. Alternatively, the distributions are modifying their packaging plan to move the PMI support for Slurm into a separate libpmi-slurm rpm, and doing the same with the PMI-1 and PMI-2 support from PMIx (the precise naming of these packages can be distro-dependent). These rpm’s will then be setup to generate a conflict if someone attempts to install both of them in the same location. Note that this will not resolve the problem if, for example, Slurm is installed via rpm but PMIx is installed from source as no conflict check is made.
-
ふうむ・・・ってか上と言っていることが矛盾して・・・ないっちゃないんだけど.どうしたらいいのこれ?デフォルトで検索するのは /usr とか /usr/local ですよ,と設定している.ところが,そこらへんにインストールするととてもまずいことが起こるからやめとけ,って・・・どーゆー神経なのだ?
-
ふむふむ.
- まずは, 表にあるPMIxをインストールしたまえ. /usr/local におけば, SLURMは自分で見つけ, プラグインを作成する
- 違う場所にインストールしたときだけ SLURMで configure --with-pmix=path-to-pmix が必要である
ふうん?で,SLURMのいい文は
- PMIxをインストールするときconfigure --enable-multiple-slurmd をつけている. なにこれ説明ないけどなにこれ
-
NOTE: Since both Slurm and PMIx provide libpmi[2].so libraries, we recommend to install both pieces of software in different locations. Otherwise, both libraries provided by Slurm and PMIx might end up being installed under standard locations like /usr/lib64 and the package manager erroring out and reporting the conflict. It is planned to alleviate that by putting these libraries in a separate libpmi-slurm package.
PMIxチームと,同じこと言っているな.
OpenMPIの言い分も調べてみる.ここですね.
- OMPIのconfigureで, --with-slurm をつけねえと死ぬお
- mpirun で使えると思うよ
- なんか特殊なことしたら, srun でいきなり並列ジョブが打てるよ ← これ, SLURMのマニュアルで熱中してる奴
- いや・・・別に, srun なんてどうでもいいんですけど,さっさとmpirunが動いて欲しいだけなんですけど
- ところがソフトの開発者は srun に夢中ってわけだな.なるほど.で,特殊なこととは何だ?
- 特殊なこととは, --with-pmi=インストール場所 とか使うことである.
- そのインストール場所とは, 「SLURMが」インストールした場所である.SLURMは内部にPMI-2を含んでいるので,SLURMインストールしただけで,なんかできるはす
- え・・・つまり,なんですかね.SLURMとOpenMPIだけで完結するはず
- さいしょなんかうまくいかない,ってことでPMIとかのところに嵌まり,こりゃPMIxとかいうのが必要なのかと誤解してさらに問題がでかくなって混乱した,ってことなのか
- 最初にうまくいかなかったのは, OMPIのビルドで --with-slurm を入れてなかった,ってことですよね.
なるほどな.なにが起こったのかわかったぞ
- やりたいことは, SLURMでOMPIを使いたい,ではインストールする
- 最初にOMPIのマニュアルを読んだ人は,OMPIでSLURMってどうするの?と思ってマニュアルを探し,OMPIマニュアルの上の文章にたどり着く.これは問題はない
- 試してみたが,問題はある. SLURMの標準インストールでは, --with-pmi=インストール先, ではOMPIがビルドできない.
- OMPIのマニュアルには,実現不能なことが書いてある → OMPIのマニュアルに従って行動した人は,必ず失敗する → SLURMのマニュアルを読み始める
- 最初にSLURMのマニュアルを読んだ人は,SLURMでOMPIってどうするの?と思ってマニュアルを探すと,なんかSLURMのマニュアルではsrunに夢中でpmiだかPMIxのあれこれ記載されているのに目が眩んで,PMIxの深みにはまっていく
- 深みとは,同じPMIx規格に実装が2つある,とか,それらがみんなインストール先フォルダーがダブっているとか,PMIxだけではなくSLURMともインストール先がダブっていて,普通にインストールするとまず実行できない,っていうことである
- まあ, お金を取る計算機センターならば,対話型srunで並列ジョブが入るかどうか,が重要なことはわかる.計算ノードへの勝手なアクセスは禁止であり,アクセスするたびに金勘定しないといけないからである
- 研究室内クラスターでは,「あーちょっと5分くらい試すから,ごめんねー」と叫びつつ並列計算しても,文句を言う人はいない.srunには需要がない.計算ノードへのアクセスが可能で,勝手に使えば良いからである.
- SLURMのマニュアルには, OpenMPIのマニュアルで最も重要な「OMPIのconfugureで --with-slurmを使え」という内容が欠落している → SLURMのマニュアルに従って行動した人は,必ず失敗する → もっとSLURMのマニュアルを読む → PMIxにはまる
- www蟻地獄だわこれ
ええっと・・・では, 試すべきは次の2点
- PMIxなしで,インストールしてみる
- PMIxとSLURMが衝突しないようにインストールする(←世界的にはこっちの人が多い感じ.例えばここで設定例が)
ではやってみる.