3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ASE (Atomic Simulation Environment) 導入記録

Last updated at Posted at 2022-07-22

この文書は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を編集します。今回は以下のようになりました。

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によるテストを実行します。ジョブスクリプトは以下です。

run_pytest.sh
#!/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ページに記載されている計算例が実行できるのか試してみます。
ジョブスクリプトは以下のようなものを作成しました。

run.sh
#!/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スクリプトは以下です。

h2.py
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ウェブページと同じ結果が得られることが分かりました。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?