理研の玉田さんのSiGN-BNによるベイジアンネットワーク解析を利用させてもらっている。
データサンプルとしてRNA-seqデータを投入しているのだが、久々にやり直してみようと思ったらうまく動かない。
実行履歴をもとに同じコマンドを投げても動かないのだ。
どうやらこの間にスパコンのCPUがIntel XeonからAMD EPYCに置き換わり、AVX等の環境が変わったために以前のバイナリsignbnnnsr.0.16.7がエラーを吐いて止まってしまうのだ。
以下はとりあえずの覚書
qsub -o so -e se -pe mpi-fillup 2 ~tamada/sign/signmpi.sh ~tamada/sign/signbnnnsr.0.16.7 -o result all.edf.txt
qstatでモニターしているとすぐにランが終わってしまい、
$ cat result.log
! ABSOLUTELY NO WARRANTY. ALL RIGHTS RESERVED.
! THIS BINARY IS PERMITTED FOR HGC Supercomputer System Shirokane5 ONLY.
SiGN-BN NNSR Rel. 0.16.7
rank=0, processes=2, threads=1
THIS IS THE ROOT PROCESS.
Initialization finished at Tue Jul 7 17:59:06 2023
HOSTNAME: gc275i
Random Seed: 1689065946
Random Walk Interval: 1280
Exchange Interval: 1280
1-to-1 Interval: --
Reading the input data matrix.
file: all.edf.txt
84526 nodes x 36 samples read.
Requires 24,343,488 [bytes] (23 [MiB])
nodes = 84526, samples = 36
Broadcasting the input data matrix at Tue Jul 7 17:59:26 2023
Sent the input matrix size.
at Tue Jul 11 17:59:27 2023
Broadcasting input values.
Done at Tue Jul 11 17:59:27 2023
というところでとまってしまっている。
そして
$ cat so
-catch_rsh /var/spool/ge/gc275i/active_jobs/78340293.1/pe_hostfile
gc275i
gc335i
-------------------------------------------------------
Primary job terminated normally, but 1 process returned
a non-zero exit code. Per user-direction, the job has been aborted.
-------------------------------------------------------
となる。
なにも言わずに終わることもあれば、
とかにすると更にcoreを吐き始める。
あれ?
THIS BINARY IS PERMITTED FOR HGC Supercomputer System Shirokane5 ONLY.
ってもしかして今のシステムはShirokane6になってEPYCにCPUも替わっているよね。それで?
ということで玉田さんのディレクトリを見るとingor.1.0.0-MPIというバイナリがおいてある。これか?
ってことで
qsub -e se2 -o so2 -pe mpi-fillup 4 ~tamada/sign/ingor_mpi.sh ~tamada/sign/ingor.1.0.0-MPI -a nnsr all0.edf.txt
としてみるも
$ cat result.log
INGOR release 1.0.0 (hash: f5e3722) (Thu Nov 17 20:10:45 2022)
Copyright (C) 2018-2022 Yoshinori Tamada
MPI enabled: size=4, rank=0
Random seed: 1689069008
input file: nbn_all0.edf.txt
Max memory: 1,048,576,000 [Byte] (1,000 [MiB])
candidates: 10
maxParents: 10
Reading input data file: all0.edf.txt
Done. # of missing values=0.
[MPI] Broadcasting the read data...
[MPI] Finished.
WARNING: zero minimum value detected for ID=159 (s00160g00730)
ID=159; s00160g00730 (real); min=0.000, max=1153.841, mean=438.254, var=74813.518, sd=273.521, mv=0
・・・・
WARNING: zero minimum value detected for ID=52739 (s00060g00410)
ID=52739; s00060g00410 (real); min=0.000, max=0.001, mean=0.000, var=0.000, sd=0.000, mv=0
variables = 52740, samples = 36
varialbe types:
real: 52740
Variable attributes: (Nothing)
Continuous variables: 52740
Discrete variables: 0
candidates: 10
candidatesCont: 0
candidatesDisc: 0
maxParents: 10
maxParentsCont: -1
maxParentsDisc: 2
Output file type: nodelist
Algorithm: nnsr
NNSR{0}: subNodes=13185, mrows=52737, subNodesMax=13185
NNSR{0}: sub graph 1: 2,781,349,380 [bytes]
FATAL ERROR (999999): NNSRWork_alloc: Memory allocation failed.
algo/NNSR.c:558; 2,781,349,380 [bytes]
一筋縄でいかないな。
zero minimum value detectedてことは数値が0はだめなんだったっけ。
てことですべての項目に1を足すというこの手の処理でよくやる前処理をしてみる。
$ qsub -pe mpi-fillup 4 -e se3 -o so3 ~tamada/sign/ingor_mpi.sh ~tamada/sign/ingor.1.0.0-MPI -a nnsr -o result all1.edf
だめっぽい
$ cat result.log
INGOR release 1.0.0 (hash: f5e3722) (Thu Nov 17 20:10:45 2022)
Copyright (C) 2018-2022 Yoshinori Tamada
MPI enabled: size=4, rank=0
Random seed: 1689069627
input file: nbn_all1.edf
Max memory: 1,048,576,000 [Byte] (1,000 [MiB])
candidates: 10
maxParents: 10
Reading input data file: nbn_all1.edf
Done. # of missing values=0.
[MPI] Broadcasting the read data...
[MPI] Finished.
variables = 52740, samples = 36
varialbe types:
real: 52740
Variable attributes: (Nothing)
Continuous variables: 52740
Discrete variables: 0
candidates: 10
candidatesCont: 0
candidatesDisc: 0
maxParents: 10
maxParentsCont: -1
maxParentsDisc: 2
Output file type: nodelist
Algorithm: nnsr
NNSR{0}: subNodes=13185, mrows=52737, subNodesMax=13185
NNSR{0}: sub graph 1: 2,781,349,380 [bytes]
FATAL ERROR (999999): NNSRWork_alloc: Memory allocation failed.
algo/NNSR.c:558; 2,781,349,380 [bytes]
$ cat se3
--------------------------------------------------------------------------
Primary job terminated normally, but 1 process returned
a non-zero exit code. Per user-direction, the job has been aborted.
--------------------------------------------------------------------------
--------------------------------------------------------------------------
mpirun detected that one or more processes exited with non-zero status, thus causing
the job to be terminated. The first process to do so was:
Process name: [[64572,1],0]
Exit code: 63
--------------------------------------------------------------------------
あかんね。
この件、結局未解決で、かわりといっちゃーなんだが、signbnnnsr.0.16.8のLinuxバイナリをオンプレミスにダウンロードしてやると見事MPI環境で3ノード72スロットで動作させることができたため、一旦は良しとすることにした。