ここでは、MDシミュレータである LAMMPS ( https://lammps.sandia.gov/ )のインストールと実行を行います。
SGE 編または、Slurm 編のいずれかを、ハンズオンオーナーの指示に従って実施してください。
この手順は参考のためのものです。 バージョンやコンパイル時のオプションなどは、要件にあわせたものをご利用ください。
cd /shared
git clone https://github.com/lammps/lammps
cd lammps/src
LAMMPSのビルドには、C++11に対応したコンパイラが必要となります。ParallelClusterでは、オプションの指定が必要となりますので、src/MAKE/Makefile.mpi
のCCFLAGS
に-std=c++11
オプションを追加します。
src/MAKE/Makefile.mpi
変更後
CCFLAGS = -g -O3 -std=c++11
以下のコマンドでbuildを実行します
module load openmpi
make mpi
以下のコマンドを実行し、Homeディレクトリに移動したうえで、ジョブスクリプト lammps.sh
を作成します。
cd
cat > lammps.sh << 'EOF'
#!/bin/bash
#SBATCH -n 8
module load openmpi
mpirun -np ${SLURM_NTASKS} /shared/lammps/src/lmp_mpi -in /shared/lammps/bench/in.lj
EOF
cat lammps.sh
以下のコマンドにより、作成したジョブスクリプトを投入します
sbatch lammps.sh
ジョブを投入してしばらくすると、Compute インスタンスが起動し、処理を行い、結果ファイルが出力されます。
ジョブの進行状況はsqueue
コマンドで確認することが可能です。
結果ファイルは、slurm-<JobID>.out
の形式となります。
cat slurm-<JobID>.out
出力例
LAMMPS (15 Apr 2020)
Lattice spacing in x,y,z = 1.6796 1.6796 1.6796
Created orthogonal box = (0 0 0) to (33.5919 33.5919 33.5919)
2 by 2 by 2 MPI processor grid
Created 32000 atoms
create_atoms CPU = 0.0194724 secs
Neighbor list info ...
update every 20 steps, delay 0 steps, check no
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 2.8
ghost atom cutoff = 2.8
binsize = 1.4, bins = 24 24 24
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair lj/cut, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/3d/newton
bin: standard
Setting up Verlet run ...
Unit style : lj
Current step : 0
Time step : 0.005
Per MPI rank memory allocation (min/avg/max) = 3.225 | 3.225 | 3.225 Mbytes
Step Temp E_pair E_mol TotEng Press
0 1.44 -6.7733681 0 -4.6134356 -5.0197073
100 0.7574531 -5.7585055 0 -4.6223613 0.20726105
Loop time of 0.244358 on 8 procs for 100 steps with 32000 atoms
Performance: 176789.467 tau/day, 409.235 timesteps/s
97.1% CPU use with 8 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.18706 | 0.18883 | 0.19089 | 0.3 | 77.27
Neigh | 0.02895 | 0.029198 | 0.029399 | 0.1 | 11.95
Comm | 0.019182 | 0.021492 | 0.023476 | 0.9 | 8.80
Output | 7.851e-05 | 8.1539e-05 | 8.7115e-05 | 0.0 | 0.03
Modify | 0.0029185 | 0.0029449 | 0.0029883 | 0.0 | 1.21
Other | | 0.001817 | | | 0.74
Nlocal: 4000 ave 4033 max 3962 min
Histogram: 1 0 1 1 0 2 1 0 0 2
Nghost: 5756.75 ave 5804 max 5724 min
Histogram: 1 1 1 1 2 0 1 0 0 1
Neighs: 150354 ave 152935 max 147476 min
Histogram: 1 0 0 1 2 1 1 0 1 1
Total # of neighbors = 1202833
Ave neighs/atom = 37.5885
Neighbor list builds = 5
Dangerous builds not checked
Total wall time: 0:00:00
SGE 編または、Slurm 編のいずれかを、ハンズオンオーナーの指示に従って実施してください。
この手順は参考のためのものです。 バージョンやコンパイル時のオプションなどは、要件にあわせたものをご利用ください。
cd /shared
git clone https://github.com/lammps/lammps
cd lammps/src
LAMMPSのビルドには、C++11に対応したコンパイラが必要となります。ParallelClusterでは、オプションの指定が必要となりますので、src/MAKE/Makefile.mpi
のCCFLAGS
に-std=c++11
オプションを追加します。
src/MAKE/Makefile.mpi
変更後
CCFLAGS = -g -O3 -std=c++11
以下のコマンドでbuildを実行します(buildの完了には数分かかります)。
module load openmpi
make mpi
Home ディレクトリなど、任意の場所で以下のジョブスクリプトを作成します。
lammps.sh
#!/bin/bash
#$ -pe mpi 8
#$ -cwd
module load openmpi
mpirun -np 8 /shared/lammps/src/lmp_mpi -in /shared/lammps/bench/in.lj
以下のコマンドにより、作成したジョブスクリプトを投入します
qsub lammps.sh
ジョブを投入してしばらくすると、Compute インスタンスが起動し、処理を行い、結果ファイルが出力されます。
ジョブの進行状況はqstat
コマンドで確認することが可能です。
結果ファイルは、lammps.sh.o<JobID>
の形式となります。
実行結果例
LAMMPS (15 Apr 2020)
Lattice spacing in x,y,z = 1.6796 1.6796 1.6796
Created orthogonal box = (0 0 0) to (33.5919 33.5919 33.5919)
2 by 2 by 2 MPI processor grid
Created 32000 atoms
create_atoms CPU = 0.0194724 secs
Neighbor list info ...
update every 20 steps, delay 0 steps, check no
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 2.8
ghost atom cutoff = 2.8
binsize = 1.4, bins = 24 24 24
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair lj/cut, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/3d/newton
bin: standard
Setting up Verlet run ...
Unit style : lj
Current step : 0
Time step : 0.005
Per MPI rank memory allocation (min/avg/max) = 3.225 | 3.225 | 3.225 Mbytes
Step Temp E_pair E_mol TotEng Press
0 1.44 -6.7733681 0 -4.6134356 -5.0197073
100 0.7574531 -5.7585055 0 -4.6223613 0.20726105
Loop time of 0.244358 on 8 procs for 100 steps with 32000 atoms
Performance: 176789.467 tau/day, 409.235 timesteps/s
97.1% CPU use with 8 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.18706 | 0.18883 | 0.19089 | 0.3 | 77.27
Neigh | 0.02895 | 0.029198 | 0.029399 | 0.1 | 11.95
Comm | 0.019182 | 0.021492 | 0.023476 | 0.9 | 8.80
Output | 7.851e-05 | 8.1539e-05 | 8.7115e-05 | 0.0 | 0.03
Modify | 0.0029185 | 0.0029449 | 0.0029883 | 0.0 | 1.21
Other | | 0.001817 | | | 0.74
Nlocal: 4000 ave 4033 max 3962 min
Histogram: 1 0 1 1 0 2 1 0 0 2
Nghost: 5756.75 ave 5804 max 5724 min
Histogram: 1 1 1 1 2 0 1 0 0 1
Neighs: 150354 ave 152935 max 147476 min
Histogram: 1 0 0 1 2 1 1 0 1 1
Total # of neighbors = 1202833
Ave neighs/atom = 37.5885
Neighbor list builds = 5
Dangerous builds not checked
Total wall time: 0:00:00