この文書はAtomic simulation environment (ASE)を東京大学物性研究所システムB (ohtaka) へ導入する/した際の導入手順です(随時更新)。ドキュメントに書いてある通り何も考えずにpip
を実行するとうまくいかないことが分かったので、後のために記録することにしました。
このページは随時更新中です。
環境
以下のモジュールを使用しています。
module list
の出力
1) intel_mpi/2020.4.304 2) intel_compiler/2020.4.304 3) intel_mkl/2020.4.304
ASEのインストール
Webpageに書いてあるように(pipをpip3に変更)以下を実行するとうまくいかないことが分かりました。
pip3 install --upgrade --user ase
そこでホームにASE
というディレクトリを作成し、そこで以下の仮想環境(ase)を作成しました(ディレクトリ名等は適宜変更して下さい)。GPAWのビルドにpython 3.8が必要なので、明示的にpython3.8を指定しました。
python3.8 -m venv ase
今の場合、以下のようにして次に環境を有効にしました。
source ./ase/bin/activate
先ずはこの仮想環境においてpipをアップグレードします。
pip install -U pip
次にASEと関連するモジュールを以下のようにインストールしました
pip install numpy scipy ase cymem cython decorator mpi4py pytest
インストールされたパッケージは以下の通りです(pip list
)。
Package Version
--------------- -------
ase 3.22.1
attrs 22.1.0
cycler 0.11.0
cymem 2.0.6
Cython 0.29.32
decorator 5.1.1
fonttools 4.34.4
iniconfig 1.1.1
kiwisolver 1.4.4
matplotlib 3.5.2
mpi4py 3.1.3
numpy 1.23.1
packaging 21.3
Pillow 9.2.0
pip 22.2.2
pluggy 1.0.0
py 1.11.0
pyparsing 3.0.9
pytest 7.1.2
python-dateutil 2.8.2
scipy 1.9.0
setuptools 41.6.0
six 1.16.0
tomli 2.0.1
GPAWのインストール
次にGPAWのインストールを行います。幾つかのライブラリが必要なので、以下ではそれらも含めてインストールの手順を記録しています。
libxcのインストール
交換相関汎関数のライブラリlibxcの、インストール時の最新版 (5.2.3) を入手しました。適当な作業ディレクトリで以下を実行します。
wget http://www.tddft.org/programs/libxc/down.php?file=5.2.3/libxc-5.2.3.tar.gz -O libxc-5.2.3.tar.gz
次にアーカイブの展開します。
tar xf libxc-5.2.3.tar.gz
展開したディレクトリに移動します。
cd libxc-5.2.3
以下のようにconfigureを実行します。
./configure CC=icc CFLAGS="-O2 -fPIC" --enable-shared --prefix=${HOME}/local
makeを実行します。ここではホームディレクトリのlocal/lib
以下にライブラリをインストールするものとしています。
make
問題無くビルドできれば、インストールを実行します
make install
念のため、指定したディレクトリに(--prefix
以降)にlibxc.a
などのライブラリがインストールされているかどうかを確認しておきます。
libvdwxcのインストール
効率的vdW-DF計算を可能にするlibvdwxcのインストールも行いました。GPAWにも実装されている筈なので無くても困らないとは思います。ウェブページの記載通りにはインストールできないので、こちらも記録しておくことにしました。
libvdwxcとは独立でGPAWのビルドで問題があったので、libvdwxcの導入は保留したため、動作確認ができていません。
libvdwxの入手
git clone https://gitlab.com/libvdwxc/libvdwxc.git
ソースディレクトリへの移動とconfigure
の生成を行います。クローンした時点ではconfigure
は生成されていないようです。
cd libvdwxc
./autogen.sh
作業ディレクトリを生成し、移動します。
mkdir build
cd build
以下のようにConfigureを実行します。
../configure --prefix="$HOME/local" CC=icc FC=ifort CFLAGS="-O3" FCFLAGS="-O2" FFTW3_LIBS="-L$MKLROOT -mkl=parallel" FFTW3_INCLUDES="-I$MKLROOT/include/fftw"
問題無くconfigureできたことが確認できたら、ビルドしてインストールします。
make
make install
GPAWのインストール
GPAWのソースを入手します。
最新版(22.1.0)はpytestの途中で失敗することが分かりました。以下では21.1.0を使用します。
wget https://pypi.org/packages/source/g/gpaw/gpaw-21.1.0.tar.gz
GPAWを展開、ディレクトリに移動します。
tar xf gpaw-21.1.0.tar.gz
cd gpaw-21.1.0
siteconfig.py
を編集します。今回は以下のようになりました。
# openmp
extra_compile_args += ['-fopenmp']
extra_link_args += ['-fopenmp']
extra_link_args += ['-fPIC', '-O2']
extra_link_args += ['-mkl=sequential']
# compiler
compiler = 'icc'
mpicompiler = 'mpiicc'
mpilinker = 'mpiicc'
# platform_id = ''
# FFTW3:
fftw = True
if fftw:
include_dirs += ['/home/local/intel/compilers_and_libraries_2020.4.304/linux/mkl/include/fftw']
# ScaLAPACK (version 2.0.1+ required):
scalapack = True
if scalapack:
libraries += ['mkl_def', 'mkl_scalapack_lp64', 'mkl_blacs_intelmpi_lp64']
# LibXC:
# In order to link libxc installed in a non-standard location
# (e.g.: configure --prefix=/home/user/libxc-2.0.1-1), use:
# - static linking:
if True:
xc = '/home/k0472/k047203/local/'
include_dirs += [xc + 'include']
extra_link_args += [xc + 'lib/libxc.a']
if 'xc' in libraries:
libraries.remove('xc')
# - dynamic linking (requires rpath or setting LD_LIBRARY_PATH at runtime):
if 0:
xc = '/home/k0472/k047203/local/'
include_dirs += [xc + 'include']
library_dirs += [xc + 'lib']
# You can use rpath to avoid changing LD_LIBRARY_PATH:
extra_link_args += ['-Wl,-rpath={xc}/lib'.format(xc=xc)]
if 'xc' not in libraries:
libraries.append('xc')
ここではlibvdwxc
を使用していませんが、vdW-DFを使用したい場合は含める必要があります(今後導入予定)。
siteconfig.py
の用意ができたらビルドを実行します。
python setup.py build
ビルドが問題無く実行できたらインストールを実行します。
python setup.py install
次にテストを行います。srun
を使用してgpaw info
を実行します。以下がジョブスクリプトの例です。
#!/bin/sh
#SBATCH -J gpaw_info
#SBATCH -p i8cpu
#SBATCH -N 1
#SBATCH -n 1
module load intel_mpi/2020.4.304 intel_compiler/2020.4.304 intel_mkl/2020.4.304
source ${HOME}/ASE/ase/bin/activate
srun gpaw info
出力結果は以下です。
| python-3.8.12 /home/k0472/k047203/ASE/ase/bin/python |
| gpaw-21.1.0 /home/k0472/k047203/local/src/gpaw-22.1.0/gpaw/ |
| ase-3.22.1 /home/k0472/k047203/ASE/ase/lib64/python3.8/site-packages/ase/ |
| numpy-1.23.1 /home/k0472/k047203/ASE/ase/lib64/python3.8/site-packages/numpy/ |
| scipy-1.9.0 /home/k0472/k047203/ASE/ase/lib64/python3.8/site-packages/scipy/ |
| libxc-5.2.3 yes |
| _gpaw /home/k0472/k047203/ASE/ase/lib64/python3.8/site-packages/gpaw-21.1.0-py3.8-linux-x86_64.egg/_gpaw.cpython-38-x86_64-linux-gnu.so |
| MPI enabled yes |
| OpenMP enabled no |
| scalapack yes |
| Elpa no |
| FFTW yes |
| libvdwxc no |
| PAW-datasets (1) /home/k0472/k047203/ASE/gpaw-setups-0.9.20000 |
テストを実行する前にPAWポテンシャルの準備をしておきましょう。ここでは最新版のgpaw setupsを使用し、$HOME/ASE
にファイルを置くものとします。$HOME/ASE
で以下を実行します。
wget https://wiki.fysik.dtu.dk/gpaw-files/gpaw-setups-0.9.20000.tar.gz
展開します。
tar xf gpaw-setups-0.9.20000.tar.gz
そしてbash
を使用している場合は.bashrc
に以下のようにGPAW setupへのパスを記述します。
export GPAW_SETUP_PATH=${HOME}/ASE/gpaw-setups-0.9.20000
pytest
によるテストを実行します。ジョブスクリプトは以下です。
#!/bin/sh
#SBATCH -J gpaw_pytest
#SBATCH -p i8cpu
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -c 1
module load intel_mpi/2020.4.304 intel_compiler/2020.4.304 intel_mkl/2020.4.304
source ${HOME}/ASE/ase/bin/activate
srun ${HOME}/ASE/ase/bin/pytest -v > pytest.log
いくつかのテストはスキップするようですが、これは並列計算に関係しているためで、GPAW
自体の問題ではないと思います。
念のためGPAW
ページに記載されている計算例が実行できるのか試してみます。
ジョブスクリプトは以下のようなものを作成しました。
#!/bin/sh
#SBATCH -J gpaw_test
#SBATCH -p i8cpu
#SBATCH -N 1
#SBATCH -n 1
module load intel_mpi/2020.4.304 intel_compiler/2020.4.304 intel_mkl/2020.4.304
source ${HOME}/ASE/gpaw-21.1.0/bin/activate
srun python ./h2.py
python
スクリプトは以下です。
import numpy as np
from ase import Atoms
from gpaw import GPAW, PW
h2 = Atoms('H2', [(0, 0, 0), (0, 0, 0.74)])
h2.center(vacuum=2.5)
h2.calc = GPAW(xc='PBE',mode=PW(300), txt='h2.txt')
energy = h2.get_potential_energy()
print(f'Energy: {energy:.3f} eV')
forces = h2.get_forces()
print(f'Forces: {forces[0,2]:.3f} eV/Angstrom')
サブミットします。
sbatch run.sh
slurm
の出力ファイルには
Energy: -6.631 eV
Forces: -0.639 eV/Angstrom
という結果が書き出されており、GPAW
ウェブページと同じ結果が得られることが分かりました。