2
0

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 3 years have passed since last update.

LAMMPS (OpenMPI + GPUDirect対応)をビルドする

Last updated at Posted at 2021-08-04

LAMMPSは、オープンソースの分子動力学シミュレーションのソフトウェアです。
スパコン上でOpenMPI + GPU Direct対応のLAMMPSをkokkosパッケージを含めてビルドしたのでその方法を記述します。
通常のクラスター計算機でも一部の環境設定を変更すれば、同様の方法でビルドできると思います。

ビルドに使用したOpenMPI環境は下記の方法で構築しています。

実施した環境

  • Cray CS-Storm
  • CPU: Xeon Gold 6150 x2 (36core)
  • Mem: 768 GiB
  • GPU: NVIDIA V100(PCIE) x10
  • I/F: Infiniband
  • OS: CentOS 7系

スパコン上では下記の環境設定コマンドを実行しました。
通常のクラスターであれば、cuda 10.2とgcc 6.1.0の環境と同等です。

$ module switch cudatoolkit/9.0.176 cudatoolkit/10.2.89
$ module switch intel/17.0.4 gcc/6.1.0

また、上記OpenMPIの環境構築の実行し、下記の環境設定を行っています。

# CS-Storm環境の場合のCUDA, GCC設定
module switch cudatoolkit/9.0.176 cudatoolkit/10.2.89
module switch intel/17.0.4 gcc/6.1.0

# UCX環境設定
export PATH=${HOME}/OpenMPI/ucx-1.10.0/bin:$PATH
export LD_LIBRARY_PATH=${HOME}/OpenMPI/ucx-1.10.0/lib:$LD_LIBRARY_PATH

# OpenMPI環境設定
export MPIROOT=${HOME}/OpenMPI/openmpi-4.1.0
export PATH=$MPIROOT/bin:$PATH
export LD_LIBRARY_PATH=$MPIROOT/lib:$LD_LIBRARY_PATH

# Infiniband環境設定
export OMPI_MCA_btl_openib_allow_ib=1
export OMPI_MCA_btl_openib_if_include="mlx5_0:1"

LAMMPSのビルド

今回、ビルドしたバージョンは、現時点でStableリリースの29 Oct 2020です。
下記の公式サイトからダウンロードしました。

ビルドの準備

ダウンロードと展開

$ wget https://download.lammps.org/tars/lammps-stable.tar.gz
$ tar xvfz lammps-stable.tar.gz
$ cd lammps-stable

lib/kokkos/bin/nvcc_wrapperを環境に合わせて修正しました。

default_arch="sm_70"
host_compiler="g++"

Makefileの作成

MAKE/OPTIONS/Makefile.kokkos_cuda_mpiをベースに下記のように変更を加えました。

$ cp MAKE/OPTIONS/Makefile.kokkos_cuda_mpi MAKE/MINE/Makefile.kokkos_cuda_ompi
$ vi MAKE/MINE/Makefile.kokkos_cuda_ompi 
$ diff MAKE/MINE/Makefile.kokkos_cuda_ompi MAKE/OPTIONS/Makefile.kokkos_cuda_mpi
10c10
< #export MPICH_CXX = $(KOKKOS_ABSOLUTE_PATH)/bin/nvcc_wrapper
---
> export MPICH_CXX = $(KOKKOS_ABSOLUTE_PATH)/bin/nvcc_wrapper
26,27c26
< KOKKOS_ARCH = SKX,VOLTA70
< KOKKOS_CUDA_OPTIONS = "enable_lambda"
---
> KOKKOS_ARCH = Kepler35
48,50c47,49
< MPI_INC =     -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -I${HOME}/OpenMPI/openmpi-4.1.0-fix1/include
< MPI_PATH =    
< MPI_LIB =     -L${HOME}/OpenMPI/openmpi-4.1.0-fix1/lib -lmpi
---
> MPI_INC =       -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1
> MPI_PATH =
> MPI_LIB =

インストールするパッケージの選択

今回は下記のパッケージをビルドしました。
srcディレクトリで下記のコマンドでパッケージを追加していきます。

$ cd src
$ make yes-class2
$ make yes-kokkos
$ make yes-kspace
$ make yes-manybody
$ make yes-mc
$ make yes-molecule
$ make yes-opt
$ make yes-qeq
$ make yes-rigid
$ make yes-user-misc
$ make yes-user-omp
$ make yes-user-reaction
$ make yes-user-reaxc
$ make kokkos_ompi_cs

ビルドの実行

srcディレクトリでmakeを実行します。

$ make kokkos_cuda_ompi

PBS実行スクリプトの例

2 node, 2 MPI, 3 thread, 2 GPUで実行する場合の例を示します。

指定している並列数の内容 

  • -np:全体のMPI並列数
  • -ppn:ノードあたりの並列数
  • g 2: ノードあたりGPU2つ実行
  • t 3: 3 threadで実行
run.sh
#!/bin/sh
#PBS -q workq
#PBS -l nodes=2,ncpus=6
#PBS -N lammps

# CS-Storm環境の場合のCUDA, GCC設定
module switch cudatoolkit/9.0.176 cudatoolkit/10.2.89
module switch intel/17.0.4 gcc/6.1.0

# UCX環境設定
export PATH=${HOME}/OpenMPI/ucx-1.10.0/bin:$PATH
export LD_LIBRARY_PATH=${HOME}/OpenMPI/ucx-1.10.0/lib:$LD_LIBRARY_PATH

# OpenMPI環境設定
export MPIROOT=${HOME}/OpenMPI/openmpi-4.1.0
export PATH=$MPIROOT/bin:$PATH
export LD_LIBRARY_PATH=$MPIROOT/lib:$LD_LIBRARY_PATH

# Infiniband環境設定
export OMPI_MCA_btl_openib_allow_ib=1
export OMPI_MCA_btl_openib_if_include="mlx5_0:1"

cd  $PBS_O_WORKDIR


mpirun -np 4 -N 2 -hostfile $PBS_NODEFILE --oversubscribe ${HOME}/LAMMPS/lammps-29Oct20/src/lmp_kokkos_ompi_cs -in lj.in -k on g 2 t 3 -sf kk
2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?