基本の使用方法

使用の流れ

  1. サンプル構造の作成

力場作成のためのサンプル構造を、Advance/NanoLaboなどを利用してユーザーが作成します。 複数個のサンプル構造を同時に使用して、一つの力場を作成することが可能です。

  1. ランダム構造の生成

サンプル構造を基にして、原子座標をランダムに変位させた多数の構造を自動的に生成します。 また、生成された全構造について、第一原理計算を一括して実行するスクリプトも同時に出力します。

  1. Quantum ESPRESSOによる第一原理計算

生成されたスクリプトを実行して、第一原理計算を実施します。 計算には当社にて改修を施したQuantum ESPRESSOを使用して、原子毎のエネルギーを出力します。

  1. ニューラルネットワークの学習(最適化)

Quantum ESPRESSOにて計算された原子毎のエネルギーを教師データとして、 ニューラルネットワークを最適化します。最適化計算には、当社の提供するツールを使用します。 計算完了後、LAMMPSにて利用可能な力場ファイルとして ニューラルネットワークの情報を出力します。

  1. LAMMPSによる分子動力学計算

作成した力場ファイルを用いて、分子動力学計算を実施します。 計算には、当社にて Neural Network Potential の機能を追加したLAMMPSを使用します。

各手順の説明

手順1 サンプル構造の作成

教師データとして使用したいサンプルの原子構造を用意し、それを元に、Quantum ESPRESSOのSCF計算用の入力ファイルを作成します。 当社製品のAdvance/NanoLaboを使っていただくと、cif等の原子構造ファイルから簡単に入力ファイルを生成できます。

ファイル中の擬ポテンシャルのパスは、手順3で実際に計算を行うときのものを指定してください。例えば計算サーバーで実行する場合には、計算サーバー内にある擬ポテンシャルのディレクトリを指すようにします。

入力ファイルが用意できたら、必要な情報を出力させるために以下の設定を加えてください。

&CONTROL
   tprnfor = .true.
   tsannp = .true.
/
&SYSTEM
   nosym = .true.
/

手順2 ランダム構造の生成

作成した入力ファイルを基に、Advance/NeuralMDを実行して多数のランダム構造を生成します。実行ファイルはインストール先のbinフォルダーに入っている sannp です。ファイル名がespresso.scf.inの場合、

sannp --dft espresso.scf.in

として実行します。

対話形式で、生成する構造の数や変位の大きさなど、必要な情報を入力していきます。入力を行わずにそのままEnterを押すと、デフォルトの値が使われます。

入力が終わると、Quantum ESPRESSOの計算実行用シェルスクリプトdft_run.sh(Windowsの場合はバッチファイルdft_run.bat)と、各構造の入力ファイルが生成されます。

├ dft_run.sh (.bat)
└ dft_inp
├ inp.1
├ inp.2
├ ...

手順3 Quantum ESPRESSOによる第一原理計算

NanoLabo Tool同梱のQuantum ESPRESSOを使用される場合は、ライブラリ検索パス等の設定が必要になります。以下を参照し、設定して下さい。

ジョブ管理システムをお使いでない場合は、dft_run.shを直接実行します。

./dft_run.sh

Windowsの場合は、dft_run.batを実行します。

dft_run.bat

ジョブ管理システムをお使いの場合には、必要に応じてdft_run.shを編集してください。例えばPBSの場合は#PBSディレクティブ、SLURM(FOCUSスパコン)の場合は#SBATCHディレクティブを追記します。その後、ジョブスクリプトとしてdft_run.shを投入してください。

PBSの例
qsub dft_run.sh

計算を実行すると、sannp.trainというファイルに教師データ(原子構造とそれに対応する原子毎のエネルギーや力、電荷)が保存されていきます。

ヒント

分子動力学計算を実行する系の原子の幾何構造を漏れなくかつ均一にサンプルするように、必要に応じて手順1~手順3を繰り返し、複数のsannp.trainファイルを用意します。 複数のsannp.trainは結合して使えます。

手順4 ニューラルネットワークの学習(最適化)

ニューラルネットワークの設定をファイルsannp.prop、Behler対称関数の設定をファイルsannp.behlerにそれぞれ用意します。デフォルトの設定を使う場合は、ファイルが無くてもかまいません。

電荷の計算を行わない場合(sannp.propwithCharge 0 と設定)は、以下のコマンドを実行して、ニューラルネットワークの学習を行います。

sannp --train

Linuxの場合は、MPI並列での実行が可能です。NeuralMDインストーラーに同梱のMPI実行ファイル、またはNanoLabo Toolインストーラーに同梱のMPI実行ファイルをお使い下さい。設定方法を参照して設定の上、実行してください。

MPI並列実行例(Linux)
mpirun -n 4 sannp --train

注釈

Windows版はMPI並列実行には非対応です。OpenMP並列は使用可能です。

実行中は残差RMS、経過時間等が出力されます。実行が正常に終わると、ニューラルネットワークの情報を含むファイルsannp.datasannp.data_eが出力されます。

学習を中断する場合は、 sannp --stop を実行します。

収束せずに上限回数に達した場合や、上記コマンドで中断した場合は、sannp.proprestart 1 と設定して再度実行することで、既に学習したニューラルネットワークの情報を読み込み、学習を再開できます。

また、電荷の計算を行う場合(sannp.propwithCharge 1 と設定)は、上記に加えて電荷のニューラルネットワークの学習も行います。

sannp --train-charge

実行が正常に終わると、電荷のニューラルネットワークの情報を含むファイルsannp.data_qが出力されます。

ニューラルネットワークの学習が終わったら、

sannp --export

を実行することで、LAMMPSで使用する力場定義ファイルffield.sannpを出力します。

手順5 LAMMPSによる分子動力学計算

NanoLabo Tool同梱のLAMMPSを使用される場合は、ライブラリ検索パス等の設定が必要になります。以下を参照し、設定して下さい。

LAMMPSの入力ファイル中で、以下のpair_styleが使えます。

pair_style nnp

ニューラルネットワーク力場

書式
pair_style nnp
pair_coeff * * <ffield.sannp> <eatom zero|finite> <元素名1 元素名2 ...>
pair_style nnp/coul/cut

ニューラルネットワーク力場 + クーロン相互作用(実空間)

書式
pair_style nnp/coul/cut <rcut>
pair_coeff * * <ffield.sannp> <eatom zero|finite> <元素名1 元素名2 ...>
pair_style nnp/coul/long

ニューラルネットワーク力場 + クーロン相互作用(実空間 + k空間)

書式
pair_style nnp/coul/long <rcut>
pair_coeff * * <ffield.sannp> <eatom zero|finite> <元素名1 元素名2 ...>
kspace_modify gewald <rinv>

パラメータ

ffield.sannp

手順4で出力した力場ファイル名

元素名

LAMMPSのatom type毎に、対応する教師データ中の元素名(=Quantum ESPRESSO計算時の元素名)を列挙

eatom

ニューラルネットワーク最終層のバイアス項(原子の内部エネルギーに相当する定数)を0に設定する機能(原子エネルギーの平準化)
eatom zeroで有効、eatom finiteまたは省略(力場ファイル名に続けて元素名を指定)で無効

rcut

実空間(短距離)クーロン相互作用のカットオフ半径
nnp/coul/cutでは必ず指定、nnp/coul/longでは省略可) (→coul/cut)

rinv

電荷のEwald和を計算する際のパラメータ(1/距離単位)
nnp/coul/longでは必ず指定) (→kspace_modify)

いずれかのpair_styleを設定した上でLAMMPSを実行すると、ニューラルネットワーク力場を使った分子動力学計算が行われます。

実行オプションリスト

--dft <file>, --qe <file>, --quantum-espresso <file>

Quantum ESPRESSOの1つの入力ファイルから、教師データを作成するために多数のランダムな構造の入力ファイル*.inpと実行用スクリプトdft_run.shを生成します。

fileを指定しない場合、対話形式で入力を求められます。

--train, --train-energy

教師データsannp.trainを元に、エネルギー及び力の計算を行うためのニューラルネットワークの学習を行います。実行が正常に終わると、ニューラルネットワークの情報を含むファイルsannp.datasannp.data_eが出力されます。

--train-charge

教師データsannp.trainを元に、電荷の計算を行うためのニューラルネットワークの学習を行います。実行が正常に終わると、ニューラルネットワークの情報を含むファイルsannp.data_qが出力されます。

--stop, --stop-training

実行中の学習を中断し、学習途中のニューラルネットワークの情報をsannp.datasannp.data_eまたはsannp.data_qに出力します。

--test, --test-without-bias

学習したニューラルネットワークを使ってテスト用データの計算を行います。テスト用データのファイルsannp.testsannp --dft を実行し、"test"を選ぶことで作成できます。結果として全エネルギーsannp.etot、原子毎のエネルギーsannp.eatom、原子に働く力sannp.force、電荷sannp.chargeがファイルに出力されます。

MPI並列計算には非対応です。

原子エネルギーは、最終層のバイアス項(原子の内部エネルギーに相当する定数)を0にして平準化した値が出力されます。

E_\mathrm{tot}(\mathrm{DFT/NNP}) = \left(E(\mathrm{DFT/NNP}) - \sum_i b_i N_i \right) / \sum_i N_i , (i:元素)

複数のニューラルネットワークモデルを使っている場合(models > 1)は、各モデルの最終層のバイアス項の平均値が0になるように平準化します。

--test-with-bias

--test と同様ですが、原子エネルギーの平準化を行わずに出力します。

E_\mathrm{tot}(\mathrm{DFT/NNP}) = E(\mathrm{DFT/NNP}) / \sum_i N_i , (i:元素)

--temp, --template

設定ファイルsannp.propのテンプレートを出力します。既存のファイルは上書きされます。

--behler, --behler-temp

Behler対称関数の設定ファイルsannp.behlerのテンプレートを出力します。既存のファイルは上書きされます。

--force, --force-test

学習したニューラルネットワークを使ってテスト用データの計算を行い、結果として原子に働く力を表示します。テスト用データのファイルsannp.testsannp --dft を実行し、"test"を選ぶことで作成できます。

MPI並列計算には非対応です。

--export, --force-field, --lammps

学習したニューラルネットワークから、LAMMPSで利用可能な力場ファイルffield.sannpを出力します。

--split <r>, --split-train <r>

教師データsannp.trainから割合r (0 \le r \le 1)を指定してデータを抽出し、テストデータsannp.testを作ります。同時に、残り(1 - r)のデータを新たな教師データsannp.trainとして出力します。

--metro, --monte-carlo, --mc

学習後に実行すると、メトロポリス法を使ったモンテカルロ計算により構造を生成します。MPI並列実行時はレプリカ並列となります。実行後、生成された構造がdft_geomフォルダに、各レプリカに対するモンテカルロ計算の動画がmovieフォルダにそれぞれ保存されます。続けて sannp --dft を実行することで、生成された構造から教師データを作成するための実行用スクリプトdft_run.shを生成します。

--metro-temp, --monte-carlo-temp, --mc-temp

メトロポリス法の設定ファイルsannp.metroのテンプレートを出力します。既存のファイルは上書きされます。GEOMETRYには教師データsannp.train中の最初の構造が使われます。

--classical

教師データ sannp.trainを元に、Δ-NNPで使用する古典力場のパラメータを最適化します。実行が正常に終わると、パラメータを含むファイルsannp.classが出力されます。

他のオプションに追加して指定するオプション

--omp <n>, --cpu <n>

OpenMP並列(スレッド並列)の並列数を指定します。

--que

ライセンスエラー(同時実行数上限)の場合に、実行できるようになるまで待機します。

このオプションを指定しない場合、ライセンスエラー時にはすぐに終了します。

単精度版・倍精度版

インストール先のbinフォルダーには通常の sannp (単精度版)に加え、 sannp_d (倍精度版)が入っています。もし倍精度版を使用されたいという場合は、説明中の sannpsannp_d に読み替えて実行してください。

GPU版

グラフィックカード(GPU)が搭載されているマシンの場合、GPUで処理を行うことで計算を高速化することができます。インストール先のbinフォルダーに入っている sannp_gpu (単精度版)、 sannp_gpu_d (倍精度版)がGPU版の実行ファイルです。説明中の sannp をこれらのファイルに読み替えて実行してください。

設定ファイルsannp.propにはGPU版特有の設定項目もありますが、特に変更を加えなくても非GPU版の入力ファイルのままで問題なく実行できます。

注釈

  • GPUドライバを事前にインストールしておく必要があります。CUDA 11.4.4を使用しており、これに対応するドライババージョン470.82.01以上が必要です。

  • 元素数が5以上の場合は、重み付き対称関数を使う(sannp.propelemWeight 1を設定する)必要があります。

MPI並列との併用

GPU版をMPI並列で実行すると、GPUをより効率的に使うことができます。各プロセスが独立してGPUとやり取りを行い、例えばあるプロセスがGPUで計算をしている間に、他のプロセスがGPUメモリへのデータ転送を行う、という風に並行して複数のタスクを実行させる仕組みです。

また、複数のGPUが搭載されているマシンの場合、使用するGPUを指定することができます。sannp.mpi2gpuというファイルを作成し、各行にプロセスをどのデバイスIDのGPUに割り当てるかを書きます。例えば、グラフィックカードが2つ搭載されているマシンで、MPI8並列で実行し、4プロセスをデバイスID0のGPU、4プロセスをデバイスID1のGPUに割り当てる場合は次のようにします。

sannp.mpi2gpu
0
0
0
0
1
1
1
1

ファイルの行数とMPI並列数(プロセス数)が一致するようにしてください。デフォルト(sannp.mpi2gpuがない場合)では、全てのプロセスがデバイスID0のGPUに割り当てられます。

なお、各GPUに割り当てられたデバイスIDは

nvidia-smi -L

を実行して確認できます。

ヒント

1GPUデバイス当たりMPIプロセス数を2~4程度に設定すると効率的に計算を実行できます。

ヒント

NanoLabo Toolに同梱の計算エンジンについては、Quantum ESPRESSOはGPU非対応、LAMMPSはGPU対応です。詳細はGPU版LAMMPSをご参照ください。