[性能評価] GPUを用いたLAMMPS分子動力学シミュレーション

はじめに

プロメテック・ソフトウェアの三上です。HPCインフラエンジニアとしてHPC基盤の設計や構築に携わっています。

GPUは流体シミュレーションなど高速化の効果が高いと評価されていますが、今回、GPUを用いて分子動力学(MD)シミュレーションがどの程度高速化できるのかを評価してみました。MDシミュレーションは多数の分子のポテンシャルや座標を計算する必要があり、GPUの効果が期待される分野の一つです。MDシミュレーション領域では多くのOSS(オープンソースソフトウェア)が利用できますが、今回はその一つであるLAMMPSを評価しています。

LAMMPSのインストールや利用方法はLAMMPSのウェブサイト上に掲載されています。LAMMPSの性能評価結果は以下に掲載されていますが、古いデータが多く最近のデータセンター向けGPUのNVIDIA A100のベンチマークデータがありません。そのため、NVIDIA A100を用いてベンチマークを取得してみました。

汎用MD計算ソフト LAMMPSについて

LAMMPSはサンディア国立研究所により開発された古典分子動力学(MD)計算プログラムです。金属、半導体、生体分子、ポリマー、メゾスコピック系物質など多様な物質に対してのポテンシャルが用意されているのが特徴です。

今回の評価環境

  • LAMMPS version: 2Aug2023
  • CUDA Version: 12.2
  • GPU: NVIDIA A100 80GB PCIe
  • CPU: Intel(R) Xeon(R) Gold 5317 CPU @ 3.00GHz

LAMMPSのビルド

LAMMPSのビルドには、CMakeまたはMakeを用いますが今回はCMakeを用いました。CMakeに必要なCMakeLists.txtはLAMMPSのパッケージに同梱されています。

cmake ../cmake -C ../cmake/presets/basic.cmake \ -D PKG_ASPHERE=ON \ -D PKG_GPU=ON \ -D GPU_API=cuda \ -D GPU_ARCH=sm_80 \ -DBIN2C=/usr/local/cuda/bin/bin2c

Examples

LAMMPSを用いて、いくつかの入力ファイルに対して実行結果をCPUとGPUを用いて測定して比較してみました。

今回使用したスクリプトは、LAMMPS公式ページのものを引用しています。

性能の結果は以下のようになりました。スクリプト詳細については、以下に示しています。

CPU[timesteps/s] GPU[timesteps/s] 高速化倍率
in.eam 20.565 1127.763 54.84
in.gb 1.235 137.812 111.59
in.sw 16.348 241.385 14.77
in.eam timesteps_s.png
in.gb timesteps_s.png
in.sw timesteps_s.png

EAM Potential

今回使用したLAMMPSスクリプトは以下です。

# bulk Cu lattice log logs/log.eam append variable x index 1 variable y index 1 variable z index 1 variable xx equal 20*$x variable yy equal 20*$y variable zz equal 20*$z units metal atom_style atomic lattice fcc 3.615 region box block 0 ${xx} 0 ${yy} 0 ${zz} create_box 1 box create_atoms 1 box pair_style eam pair_coeff 1 1 Cu_u3.eam velocity all create 1600.0 376847 loop geom neighbor 1.0 bin neigh_modify every 1 delay 5 check yes fix 1 all nve timestep 0.005 thermo 10 # dump mydmp all atom 100 dump.eam.lammpstrj run 10000

以下のように、GPUパッケージを用いてNVIDIA A100上で計算を行う場合とCPU(Intel(R) Xeon(R) Gold 5317 CPU @3.00GHz)1コアで計算を行う場合の二通りで計算を行いました。

$ lmp -sf gpu -pk gpu 1 -in in.eam // GPUを用いる場合 $ lmp -in in.eam // CPUを用いる場合

GB Potential

今回使用したLAMMPSスクリプトは以下です。

# Gay-Berne benchmark # biaxial ellipsoid mesogens in isotropic phase # shape: 2 1.5 1 # cutoff 4.0 with skin 0.8 # NPT, T=2.4, P=8.0 units lj atom_style ellipsoid # creation #lattice sc 0.22 #region box block 0 32 0 32 0 32 #create_box 1 box #create_atoms 1 box #set group all quat/random 982381 read_data data.gb compute rot all temp/asphere group spheroid type 1 variable dof equal count(spheroid)+3 compute_modify rot extra ${dof} velocity all create 2.4 41787 loop geom pair_style gayberne 1.0 3.0 1.0 4.0 pair_coeff 1 1 1.0 1.0 1.0 0.5 0.2 1.0 0.5 0.2 neighbor 0.8 bin timestep 0.002 thermo 10 dump mydmp all atom 5 dump.eam2.lammpstrj # equilibration #fix 1 all npt/asphere temp 2.4 2.4 0.1 iso 5.0 8.0 0.1 #compute_modify 1_temp extra ${dof} #run 100 #write_restart tmp.restart fix 1 all npt/asphere temp 2.4 2.4 0.2 iso 8.0 8.0 0.2 run 1000

以下のように、GPUパッケージを用いてNVIDIA A100上で計算を行う場合とCPU(Intel(R) Xeon(R) Gold 5317 CPU @3.00GHz)1コアで計算を行う場合の二通りで計算を行いました。

$ lmp -sf gpu -pk gpu 1 -in in.gb // GPUを用いる場合 $ lmp -in in.gb // CPUを用いる場合

SW Potential

今回使用したLAMMPSスクリプトは以下です。

# bulk Si via Stillinger-Weber units metal atom_style atomic lattice diamond 5.431 region box block 0 20 0 20 0 10 create_box 1 box create_atoms 1 box pair_style sw pair_coeff * * Si.sw Si mass 1 28.06 velocity all create 1000.0 376847 loop geom neighbor 1.0 bin neigh_modify delay 5 every 1 fix 1 all nve timestep 0.001 thermo 10 dump mydmp all atom 5 dump.sw.lammpstrj run 20000

以下のように、GPUパッケージを用いてNVIDIA A100上で計算を行う場合とCPU(Intel(R) Xeon(R) Gold 5317 CPU @3.00GHz)1コアで計算を行う場合の二通りで計算を行いました。

$ lmp -sf gpu -pk gpu 1 -in in.sw // GPUを用いる場合 $ lmp -in in.sw // CPUを用いる場合

まとめ

GPUを用いたLAMMPS分子動力学シミュレーションの性能評価結果を紹介しました。
プロメテックグループ最大規模のカンファレンスPrometech Simulation Conference 2023では、「GPUを活かした計算化学と機械学習」と題して、DFT計算から得られた学習データからニューラルネットワークを用いて機械学習を行い、ポテンシャル関数を生成してシミュレーションを行う例でGPUの性能評価を紹介しますので、是非そちらもご覧ください。