# lammps hpc test ## 國網 slurm ### 提交工作檔 說明:lammps在國網編譯 2 nodes 8 cpus in total ```shell= #!/bin/bash # ---------------------------------------------------------------------------- #SBATCH -p gp1d #SBATCH -A ACD110038 #SBATCH --nodes=2 #SBATCH -J lammps_test #SBATCH --time=00:30:00 #SBATCH --exclusive #SBATCH --nodelist=gn1103,gn1104 #SBATCH --gres=gpu:1,gpu:1 #SBATCH --cpus-per-task=4 module purge module load nvidia/cuda/.10.0.130 module load ucx/1.5 module load openmpi/3.1.4 LMPLOC=/home/nckuhpclab04/lammps_openmpi-3.1.4_cmake/lammps/build/lmp INPUT=/home/nckuhpclab04/in.lj mpirun --host gn1103,gn1104 -np 8 -n 2 $LMPLOC < $INPUT ``` ## 國網PBS 說明:lammps在台灣杉一號編譯(CPU) 12nodes 25ppn np300 ```shell= #!/bin/bash #PBS -N lammps_test1 #PBS -q ct400 ##佇列名稱 #PBS -l select=12:ncpus=25:mpiprocs=25 ##12nodes 每個nodes25核 25個MPI序列 #PBS -l walltime=15:00:00 ##最大運行時間 #PBS -P ACD110038 ##計畫名稱 #PBS -j oe ##照打 #PBS -o pbsout_lammps_openmpi4=-4.0.5_12nodes_25ppn.txt ##output 名稱 module load mpi/openmpi-4.0.5/gcc930 LMPLOC=/home/nckuhpclab04/lammps/lammps/build/lmp INPUT=/home/nckuhpclab04/lammps_job_script/in.lj mpirun -np 300 $LMPLOC < $INPUT ``` ## 測試結果 * 官方參考 ![](https://i.imgur.com/VU42Wod.png) 啥都不改 只改核心數 input = in.lj EX `select=25:ncpus=40:mpiprocs=40` `mpirun -np 1000 $LMPLOC < $INPUT` 4nodes 40 ppn-Total wall time: 27:31:36 ![](https://i.imgur.com/UToRr65.png) 10 nodes 30 ppn-Total wall time: 27:42:19 ![](https://i.imgur.com/PTICCY4.png) 15 nodes 40 ppn-Total wall time: 27:31:24 ![](https://i.imgur.com/s7yETNU.png) 25 nodes 40 ppn-Total wall time: 27:30:41 ![](https://i.imgur.com/on0LBrl.png) 45 nodes 25 ppn 甚至跑不完 :::warning 值得注意的是 每個都只有1個 MPI task 配 ppn數的OpenMP threads 就像是沒有真的並行一樣(計算時間都差不多 表示未真的並行) 而且參考官方其實花最多時間的地方是communication 但自己測試的全都是花在計算 重點應該在MPI task 其實也是主要lammps並行計算的點 ::: :::info 看起來 procs=MPI task * OpenMP threads ::: ## kokkos test ### test 1 #### in.lj ->twcc openmpi/4.1.0 nvidia tesla v100-sxm2 cuda/10.0 compiler/gnu/7.3.0(需要較新的compiler) cmake/3.15.4 KISS FFT ``` cmake -D BUILD_OMP=yes -D BUILD_MPI=yes -D PKG_MOLECULE=yes -D PKG_RIGID=yes -D PKG_KSPACE=yes -D PKG_KOKKOS=yes -D Kokkos_ARCH_VOLTA70=yes -D Kokkos_ENABLE_CUDA=yes -D Kokkos_ENABLE_OPENMP=yes -D CMAKE_CXX_COMPILER=/home/nckuhpclab04/lammps_different_build/lammps_kokkos/lammps/lib/kokkos/bin/nvcc_wrapper ../cmake ``` * 4 gpu 17 threadings `mpirun --host gn1022,gn1023,gn1024,gn1107 -np 4 --bind-to socket --map-by socket $LMP < $INPUT -k on g 4 t 17 -sf kk -pk kokkos newton off neigh full` ![](https://i.imgur.com/RbBpYHt.png) `mpirun --host gn1022,gn1023,gn1024,gn1107 -np 4 --bind-to socket --map-by socket $LMP < $INPUT -k on g 4 t 40 -sf kk` 4 gpu 40 threadings :::warning thread的警告 ![](https://i.imgur.com/CvCEQv4.png) ::: ![](https://i.imgur.com/g4YNimV.png) `mpirun --host gn1022,gn1023,gn1024,gn1107 -np 4 --bind-to socket --map-by socket $LMP < $INPUT -k on g 4 t 17 -sf kk` * 4 gpu 17 threadings ![](https://i.imgur.com/Ugj7DWX.png) :::info 可以發現當被實體的核心數限制時,就算超過也會照實體的去計算 至於有沒有使用newton off 跟 full neigh 則沒有差別(似乎本來GPU計算這定就是這樣) ::: ### test 2 #### in.lj ->twcc openmpi/4.1.0 nvidia tesla v100-sxm2 cuda/10.0 compiler/gnu/7.3.0 cmake/3.15.4 KISS FFT build with --default-stream perthread * 4GPU36threading ![](https://i.imgur.com/2qSd58A.png) * 3GPU36threading ![](https://i.imgur.com/OXMjx7K.png) * 2GPU36threading ![](https://i.imgur.com/30G9aEy.png) * 1GPU36threading ![](https://i.imgur.com/NeZR8ua.png) * 4gpu 36threadings(kokkos package/cuda aware/neigh half/newton off/comm device) #### in.rhodo ##### 1 ``` mpirun --host gn1103,gn1104,gn1105,gn1106 -np 4 --bind-to socket --map-by socket $LMP < $INPUT -sf kk -k on g 1 t 36 -pk kokkos neigh half comm no ``` 因 ![](https://i.imgur.com/MiXsDt3.png) 4PGU36threadings ![](https://i.imgur.com/VrRGtXx.png) ##### 2 cuda aware ``` mpirun --host gn1107,gn1108,gn1205,gn1206 -np 4 --bind-to socket --map-by socket $LMP < $INPUT -sf kk -k on g 1 t 36 -pk kokkos neigh half newton on cuda/aware on ``` ![](https://i.imgur.com/NYgmJFh.png) ### test3 ->nscc openmpi/4.0.0 nvidia tesla v100-sxm2 cuda/10.1 gcc7.4(需要較新的compiler) cmake/3.14.4 FFTw3/3.2.1 ### test4 for cpu fftw3 mpi/openmpi-4.0.5/gcc930 gcc930 cmake 3.20.0 ``` cmake -D BUILD_OMP=yes -D BUILD_MPI=yes -D PKG_MOLECULE=yes -D PKG_RIGID=yes -D PKG_KSPACE=yes -D PKG_KOKKOS=yes -D Kokkos_ARCH_SKX=yes -D Kokkos_ENABLE_OPENMP=yes ../cmake ``` ## GPU package ### test1 twcc openmpi/3.0.1 cuda/10.0 compiler/gnu/7.3.0 cmake/3.15.4 KISS FFT ``` cmake -D BUILD_OMP=yes -D BUILD_MPI=yes -D PKG_MOLECULE=yes -D PKG_RIGID=yes -D PKG_KSPACE=yes -D PKG_GPU=yes -D GPU_API=cuda -D GPU_PREC=mixed -D GPU_ARCH=sm_70 -D CUDPP_OPT=no -D CUDA_MPS_SUPPORT=yes ../cmake ``` #### in.lj 4gpu36threadings ``` mpirun --host gn1103,gn1104,gn1105,gn1106 -np 4 --bind-to socket --map-by socket $LMP < $INPUT -sf gpu -pk gpu 4 ``` ![](https://i.imgur.com/j0aq0Fw.png) #### in.rhodo 4GPU36threadings ``` mpirun --host gn1103,gn1104,gn1105,gn1106 -np 4 --bind-to socket --map-by socket $LMP < $INPUT -sf gpu -pk gpu 4 ``` ![](https://i.imgur.com/g7vcHXb.png) :::info ->已經對此採用較佳的加速 只有pair用gpu加速 還是比kokkos慢,可能是因為cpu 因1:4的限制所以能用得很少 所以其他才沒有gpu快 ::: ## USER-OMP package 台灣杉1號 ``` cmake -D BUILD_OMP=yes -D BUILD_MPI=yes -D PKG_MOLECULE=yes -D PKG_RIGID=yes -D PKG_KSPACE=yes -D PKG_USER-OMP=yes ../cmake ``` mpi/openmpi-4.0.5/gcc930 FFTW3 cmake/3.15.4 :::warning ->mpi procs 要跟 ncups一樣 ![](https://i.imgur.com/3paWWZP.png) ::: 4nodes 20 ppn ![](https://i.imgur.com/EjIUAqm.png) 4nodes 15 ppn ![](https://i.imgur.com/cEcFJaO.png) 4nodes10ppn(user_omp/no npernode) ![](https://i.imgur.com/wa4GPaM.png) ## OPT package ``` cmake -D BUILD_OMP=yes -D BUILD_MPI=yes -D PKG_MOLECULE=yes -D PKG_RIGID=yes -D PKG_KSPACE=yes -D PKG_OPT=yes ../cmake ``` cmake/3.15.4 mpi/openmpi-4.0.5/gcc930 FFTW3 ### in.lj 4nodes15ppn ![](https://i.imgur.com/mKwoF93.png) 4nodes12ppn ![](https://i.imgur.com/UUFaUnU.png) 4nodes10ppn ![](https://i.imgur.com/O8oFOvT.png) ## user_intel ->nia cmake/3.14.5 mkl/2019u4 intel/2019u4 openmpi/4.0.1 ``` cmake -D BUILD_OMP=yes -D BUILD_MPI=yes -D PKG_MOLECULE=yes -D PKG_RIGID=yes -D PKG_KSPACE=yes -D PKG_USER-OMP=yes -D PKG_USER-INTEL=yes -D INTEL_ARCH=cpu -D INTEL_LRT_MODE=c++11 -D FFT=MKL -D FFT_SINGLE=no ../cmake ``` ###### tags: `lammps`