LAMMPS の実行

ここでは、MDシミュレータである LAMMPS ( https://lammps.sandia.gov/ )のインストールと実行を行います。

LAMMPS の導入(Slurm編)

SGE 編または、Slurm 編のいずれかを、ハンズオンオーナーの指示に従って実施してください。

この手順は参考のためのものです。 バージョンやコンパイル時のオプションなどは、要件にあわせたものをご利用ください。

ソースコードのダウンロード

cd /shared
git clone https://github.com/lammps/lammps
cd lammps/src

コンパイルオプションの変更

LAMMPSのビルドには、C++11に対応したコンパイラが必要となります。ParallelClusterでは、オプションの指定が必要となりますので、src/MAKE/Makefile.mpiCCFLAGS-std=c++11オプションを追加します。

  • src/MAKE/Makefile.mpi 変更後

    CCFLAGS = -g -O3 -std=c++11
    

build

以下のコマンドで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
    

LAMMPS の導入(SGE編)

SGE 編または、Slurm 編のいずれかを、ハンズオンオーナーの指示に従って実施してください。

この手順は参考のためのものです。 バージョンやコンパイル時のオプションなどは、要件にあわせたものをご利用ください。

ソースコードのダウンロード

cd /shared
git clone https://github.com/lammps/lammps
cd lammps/src

コンパイルオプションの変更

LAMMPSのビルドには、C++11に対応したコンパイラが必要となります。ParallelClusterでは、オプションの指定が必要となりますので、src/MAKE/Makefile.mpiCCFLAGS-std=c++11オプションを追加します。

  • src/MAKE/Makefile.mpi 変更後

    CCFLAGS = -g -O3 -std=c++11
    

build

以下のコマンドで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