fp.py on ISSP Ohtaka
東大物性研のスパコン[1]のシステムBというのが使えるようになったので,そこで自分のプログラムの動作確認をした.古典力場構築プログラムfp.py
[2]が普通に使えたので,設定とジョブ投入方法をメモしておく.
ダウンロード
nap (Nagoya Atomistic simulation Package) を下記GitHubサイトからダウンロードする. https://github.com/ryokbys/nap
展開して,ディレクトリ名を変更して,~/src/nap
というディレクトリに置かれたとする.
pmdのコンパイル
Parallel Molecular Dynamics (pmd) プログラムをコンパイルする.
$ cd ~/src/nap/
$ ./configure FCFLAGS='-O3 -march=core-avx2 -ip -ipo -g -traceback'
$ cd pmd/
$ make pmd
Pythonの設定
初期設定ではpythonへのパスは通っていない.システム内にいくつかのバージョンのpythonが入っているが,残念ながらログインノードと計算ノードでインストールされているパッケージが異なっていて,扱いづらいので,自分のディレクトリに独自のpythonをインストールする.
Homebrew for Linux を利用してpython@3.8をインストールするため,ココ に従い Homebrew for Linux をインストールする.
python@3.8
をインストールして,pythonとpipのリンクを $HOME/bin/
に入れて python
と pip
コマンドを使えるようにしておく.
$ brew install python@3.8
$ cd ~/bin/
$ ln -s ~/.linuxbrew/bin/python3 python
$ ln -s ~/.linuxbrew/bin/pip3 pip
いくつか必要となるPythonパッケージをインストールする.
$ pip install numpy pandas docopt ase
nappyの設定
~/.bash_profile.local
に下記を追加して,PYTHONPATH
へnappyを追加しておく.
$ export PYTHONPATH=${HOME}/src/nap:${PYTHONPATH}
これがちゃんと反映されるように,~/.bash_profile
の最後に下記を書いておく.
source ~/.bash_profile.local
fp.pyの動作確認
nap/examples/fp_LLZ/
を適当な場所にコピーして fp.py のテストを行う.
$ cd /path/to/testdir
$ cp -r ~/src/nap/examples/fp_LLZ ./
$ cd fp_LLZ
subjob.sh
内の
pmd 2>&1 > out.pmd.NpT
の行を,
srun -N 1 -n 1 -c 1 pmd 2>&1 > out.pmd.NpT
のように srun
でpmdを実行するように変更する.
in.fitpot
の中に cs_num_individuals 4
という行があり,4個体並列で計算することを確認し,下記コマンドで fp.py を実行する.
$ sbatch -p B1cpu -J 'test_fp' -N 1 -n 4 -o out.fp ~/src/nap/nappy/fitpot/fp.py --nproc=4
下記のような out.fp
ファイルが出力されていれば成功.
$ tail -n5 out.fp
iid,Lr,Lth,Lvol,Llat,L= 6 0.7614 0.4336 2.4838 0.0000 3.6788
iid,Lr,Lth,Lvol,Llat,L= 5 0.4043 0.2991 1.0301 0.0000 1.7336
iid,Lr,Lth,Lvol,Llat,L= 9 2.1364 0.8182 27.3374 0.0000 30.2921
step,time,best,vars= 1 137.4 1.7336 1.000 1.152 1.177 0.974 0.833 0.873 2.037 1.773 2.352 2.169 1.964 4.219 2.038 1.536 1.862 1.000
elapsed time = 137.432213 sec.
Ohtakaにおける注意
Ohtakaには1ノード当たり2CPUあり,全部で128コアあるので,fp.py では128並列まで可能なはず.
1プロセスのクロックはそれほど速くないので,スピードは速くないが,並列数が多いので広域探索が可能なのでもしかしたら収束までが速くなるかもしれない.