计算化学公社

 找回密码 Forget password
 注册 Register
Views: 2435|回复 Reply: 9
打印 Print 上一主题 Last thread 下一主题 Next thread

[Lammps] 在linux mint21.3上安装含kokkos以及deepmd的lammps & 4090的reaxff测试

[复制链接 Copy URL]

7

帖子

1

威望

53

eV
积分
80

Level 2 能力者

本帖最后由 小葱拌豆腐 于 2024-6-25 21:29 编辑

在linux mint上安装含kokkos和gpu package以及deepmd built的lammps & 4090的reaxff加速测试

参考链接:

组内购置了2X9654+4X4090的水桶gpu节点(组内CFD、MD和量化的需求都有,同时也为了节省机柜空间就选的这个配置,再加上不考虑二手,性价比属是有点低),本人也是linux新人,了解有限,希望此贴对像我一样刚入门的小白有所帮助,同时由于对一些调优设置本人也不甚了解,希望大佬们多多批评指正。
mint21.3和ubuntu 22.04用下来感觉没两样,ubuntu22.04上编译时也可参考。

首先安装驱动和cuda
网上cuda和cudnn安装的教程较多,在此不再赘述,笔者选择了CUDA12.2和cudnn8.9.7
nvidia-smi和nvcc -V输出正常后就OK了
除cuda外,安装了AOCC和AOCL,并编译了openmp。

deepmdkit 源码安装 和lammps接口
其实直接用conda也能配置好环境,
  1. conda create -n deepmd deepmd-kit=*=*gpu libdeepmd=*=*gpu lammps cudatoolkit=11.8 horovod -c <a href="https://conda.deepmodeling.com" target="_blank">https://conda.deepmodeling.com</a> -c defaults
复制代码

,但笔者不太清楚使用这种方式安装的lammps怎么配置其他需要的package,遂决定按照教程用源码编译deepmd。这里主要是参考了deepmd官网的教程 1.2. Install from source code — DeePMD-kit documentation (deepmodeling.com)
#github上直接下载压缩包的源码会报错 用下面这个命令下载
  1. cd /some/workspace
  2. git clone <a href="https://github.com/deepmodeling/deepmd-kit.git" target="_blank">https://github.com/deepmodeling/deepmd-kit.git</a> deepmd-kit
  3. cd deepmd-kit
  4. deepmd_source_dir=`pwd`
复制代码

安装python界面安装tensorflow python界面python --version
#笔者事先安装了miniconda3
  1. conda install python==3.8
  2. virtualenv -p python3.8 $tensorflow_venv
  3. #python tensorflow模块
  4. virtualenv -p python3 tensor#tensor可以换成任何你想用的名字
  5. source tensor/bin/activate
  6. pip install --upgrade pip#更新pip
  7. pip install --upgrade tensorflow
  8. #使用dp时需要在新shell里激活环境
  9. source tensor/bin/activate
  10. deactivate#退出环境
复制代码

验证安装
  1. python -c "import tensorflow as tf;print(tf.reduce_sum(tf.random.normal([1000, 1000])))"
复制代码

安装deepmd python接口
#gcc版本要高于4.8,建议和tensorflow保持相同版本的gcc编译,下命令可查看
  1. python -c "import tensorflow;print(tensorflow.version.COMPILER_VERSION)"
  2. pip install git+<a href="https://github.com/deepmodeling/deepmd-kit.git" target="_blank">https://github.com/deepmodeling/deepmd-kit.git</a> deepmd-kit
  3. cd $deepmd_source_dir#打开源码路径
  4. pip install .
复制代码

前提是保持pip版本最新,否则会遇到报错。
  1. pip install --upgrade pip setuptools wheel
  2. python -m pip install --upgrade pip

  3. #完成安装后 dp -h命令正常输出help界面
复制代码

安装horovod和mpi4py安装nccl,参考NVIDIA/nccl: Optimized primitives for collective multi-GPU communication (github.com)
  1. HOROVOD_WITHOUT_GLOO=1 HOROVOD_WITH_TENSORFLOW=1 HOROVOD_GPU_OPERATIONS=NCCL HOROVOD_NCCL_HOME=/path/to/nccl pip install horovod mpi4py
复制代码

安装C++界面安装tensorflowc++界面
进入deepmd-kit源代码目录,首先利用源代码中的脚本安装tensorflow的C++接口。
  1. #可通过脚本安装tensorflow的C++界面
  2. python source/install/build_tf.py --prefix [--cuda]<b>安装deepmd-kitC++界面</b>cd $deepmd_source_dir/source
  3. mkdir build
  4. cd build
  5. #对于cuda支持要求cmake版本不低于3.23
  6. pip install -U cmake
  7. #设置合适的安装位置$deepmd_root,注意这里不是dp的源代码目录$deepmd_source_dir 这里设置为 /opt/dp_lammps/dp
  8. #下载lammps源码解压到需要的位置
  9. cmake -DUSE_TF_PYTHON_LIBS=TRUE -DLAMMPS_SOURCE_ROOT=/opt/dp_lammps/lammps-stable_2Aug2023_update1 -DCMAKE_INSTALL_PREFIX=$deepmd_root -DUSE_CUDA_TOOLKIT=TRUE  ..
  10. make -j8
  11. make install
复制代码

安装成功后$deepmd_root目录下出现bin和lib子目录

3.builtin方法安装lammps dp模块(推荐)

  1. cd $deepmd_source_dir/source/build
  2. make lammpsmkdir -p lammps-stable_2Aug2023_update3/build/
  3. cd lammps-stable_2Aug2023_update3/build/
  4. echo "include(/opt/dp_lammps/deepmd-kit/source/lmp/builtin.cmake)" >> ../cmake/CMakeLists.txt
复制代码

编译cpu模式的lammps
  1. #需要什么包添上即可,最后的-D LAMMPS_MACHINE=cpu指定了生成的可执行文件lmp的后缀以便区分,这种设置下生成的为了lmp_cpu,可执行文件位于CMAKE_INSTALL_PREFIX指定的位置
  2. cmake -C ../cmake/presets/basic.cmake -D PKG_PLUGIN=ON -D LAMMPS_INSTALL_RPATH=ON -D BUILD_SHARED_LIBS=yes -D CMAKE_INSTALL_PREFIX=/opt/dp_lammps/dp -D CMAKE_INSTALL_LIBDIR=lib -D CMAKE_INSTALL_FULL_LIBDIR=/opt/dp_lammps/dp/lib  -D PKG_KSPACE=on -D PKG_MANYBODY=on -D PKG_MOLECULE=on -D PKG_RIGID=on -D PKG_MC=on -D PKG_SHOCK=on -D PKG_REACTION=on -D PKG_DRUDE=on -D PKG_REAXFF=on  -D LAMMPS_MACHINE=cpu ../cmake
  3. make -j128
  4. make install
复制代码

编译gpu模式的lammps
  1. cd lammps-stable_2Aug2023_update3/lib/gpu
  2. vim Makefile.linux
  3. vim Makefile.linux 修改如下内容:
  4.   CUDA_HOME =/usr/local/cuda  #cuda安装地址,我这里不用改,因为cuda位置在默认位置安装的
  5.   CUDA_PRECISION = -D_SINGLE_DOUBLE    #单精度和双精度混编,这个是默认的,我们这里不更改,既能保证误差小的情况,也不至于速度特别慢。
  6.   CUDA_ARCH = -arch=sm_89  #需要找一下不同架构显卡对应算力修改数值
  7. cd ../..
  8. mkdir build_gpu
  9. cd build_gpu
  10. cmake -C ../cmake/presets/basic.cmake -D PKG_PLUGIN=ON -D LAMMPS_INSTALL_RPATH=ON -D BUILD_SHARED_LIBS=yes -D CMAKE_INSTALL_PREFIX=/opt/dp_lammps/dp -D CMAKE_INSTALL_LIBDIR=lib -D CMAKE_INSTALL_FULL_LIBDIR=/opt/dp_lammps/dp/lib -D PKG_KSPACE=on -D PKG_MANYBODY=on -D PKG_MOLECULE=on -D PKG_RIGID=on  -D PKG_MC=on -D PKG_SHOCK=on -D PKG_REACTION=on -D PKG_DRUDE=on -D PKG_REAXFF=on -D PKG_GPU=on -D GPU_API=cuda -D GPU_ARCH=sm_89 -D LAMMPS_MACHINE=gpu../cmake
  11. make -j128
  12. make install#lmp_gpu可执行文件
复制代码

编译kokkos
编译kokkos版本的lammps23稳定版时使用cuda12会出现报错,找不到libcufft,即便在编译时声明cuda-lib的位置也没用,解决方式参考An error in building package KOKKOS with cmake - LAMMPS / LAMMPS Installation - Materials Science Community Discourse (matsci.org)需要修改文件, 该文件位于/cmake/Modules/Packages/KOKKOS.cmake,附件中就是该文件,下下来替换即可,另外编译时加入-D CUFFT_LIBRARY=/usr/local/cuda-12.2/lib64/libcufft.so并将未分组的条目 CUFFT_LIBRARY 指向 libcufft.so

修改kokkos-cuda.cmake文件
修改kokkos-cuda.cmake文件,把set(Kokkos_ARCH_MAXWELL50 on CACHE BOOL "" FORCE中的MAXWELL50或其他架构修改为自己显卡对应的架构和数值,这里4090为ADA89,可选架构参考3.7. Packages with extra build options — LAMMPS documentation
  1. mkdir build-kokkos-cuda#在lammps源代码目录下操作
  2. cd build-kokkos-cuda
  3. cmake -C ../cmake/presets/basic.cmake -C ../cmake/presets/kokkos-cuda.cmake -D PKG_PLUGIN=ON -D LAMMPS_INSTALL_RPATH=ON -D BUILD_SHARED_LIBS=yes -D CMAKE_INSTALL_PREFIX=/opt/dp_lammps/dp -D CMAKE_INSTALL_LIBDIR=lib -D CMAKE_INSTALL_FULL_LIBDIR=/opt/dp_lammps/dp/lib -D PKG_KSPACE=on -D PKG_MANYBODY=on -D PKG_MOLECULE=on -D PKG_RIGID=on -D PKG_MC=on -D PKG_SHOCK=on -D PKG_REACTION=on -D PKG_DRUDE=on -D PKG_REAXFF=on -D PKG_GPU=on -D GPU_API=cuda -D GPU_ARCH=sm_89 -D CUFFT_LIBRARY=/usr/local/cuda-12.2/lib64/libcufft.so ../cmake
  4. make -j128
  5. make install
复制代码

环境变量声明与调优设置?
  1. vim ~/.bashrc
  2. export PATH=$PATH:/opt/dp_lammps/dp/bin #插入lmp、lmp_cpu
  3. source ~/.bashrc
  4. #现在lmp -h或_cpu,gpu应该有正常的输出了
复制代码

在这里也弱弱的问下,具体要设置那些调优参数,还望大佬们能不吝赐教,目前我只设置了环境变量里的这两个,对于双路9654来说怎么设置合适呢?但是发现无论OMP_NUM_THREADS设置成多少,在用kokkos算的时候始终只用一个核心,俩任务一起算也是这样。
  1. export OMP_NUM_THREADS=16
  2. export GOMP_CPU_AFFINITY=0-31
复制代码

运行不同包的指令
为了了解自己编译的lammps性能正常不,再加上之前没用过GPU加速,参考了熵大@Entropy.S.I 2023年3月MD benchmark测试:最终章 - 硬件配置与采购 (Hardware Configuration and Procurement) - 计算化学公社 (keinsci.com)提供的测试脚本中的反应力场的case简单跑了一下。
另外还有一个问题是,如何指定使用哪个gpu呢?
在用CPU跑的时候遇到了个问题,无论np设置成多少都是一个核在跑,需要先unset GOMP_CPU_AFFINITY,才能正常跑。
  1. #cpu,关于bind-to-core的对比后面给出来,至于为啥要设置还没搞明白。
  2. mpirun --bind-to core -np 16 lmp_cpu -in in.reaxc
  3. #gpu
  4. lmp_gpu -in in.reaxc -sf gpu -pk gpu 1
  5. #kokkos
  6. lmp -in in.reaxc -k on g 1 -sf kk -pk kokkos
复制代码

计算速度的简单比较
case用的都是前面提到的熵大提供的in.reaxc,三万多个原子reaxff,跑1000步 。
比较了一下用不同核数的情况下以及不同cpu的计算速度,7763和8171的是组里之前的节点,编译环境啥的都不相同,结果仅供参考,但是让小白欣慰的是还好新的四代EPYC确实还是比之前快的!纯cpu的话这个case用16-32个核来跑更合理一点。4090的速度大概是16核9654的5倍。

每天可计算时长(ns/day)
kokkos
0.220 ns/day
-np 16@epyc 9654*2
0.048 ns/day
--bind-to core
0.046 ns/day
--bind-to core -np 32@epyc 9654*2
0.076 ns/day
--bind-to core -np 64@epyc 9654*2
0.125 ns/day
--bind-to core -np 128@epyc 9654*2
0.156 ns/day
-np 16 @Xeon(R) Platinum 8171M *2
0.033 ns/day
-np 16@ EPYC 7763 *2
0.039 ns/day
不知道还有哪些调优的设置来提高计算的效率呢,以上请各位老师参考并批评指正!



KOKKOS.cmake

9.86 KB, 下载次数 Times of downloads: 11

评分 Rate

参与人数
Participants 1
威望 +1 收起 理由
Reason
sobereva + 1

查看全部评分 View all ratings

7

帖子

1

威望

53

eV
积分
80

Level 2 能力者

2#
 楼主 Author| 发表于 Post on 2024-6-24 17:24:55 | 只看该作者 Only view this author
第一次发帖,似乎md格式直接粘进来排版有点稀碎

859

帖子

16

威望

5084

eV
积分
6263

Level 6 (一方通行)

小屁孩

3#
发表于 Post on 2024-6-25 18:21:47 | 只看该作者 Only view this author
多GPU机器必须使用Slurm调度,否则没法用,很容易跑出正常情况不到十分之一的性能
- 向着虚无前进 -

7

帖子

1

威望

53

eV
积分
80

Level 2 能力者

4#
 楼主 Author| 发表于 Post on 2024-6-25 21:28:50 | 只看该作者 Only view this author
本帖最后由 小葱拌豆腐 于 2024-6-25 21:31 编辑
Entropy.S.I 发表于 2024-6-25 18:21
多GPU机器必须使用Slurm调度,否则没法用,很容易跑出正常情况不到十分之一的性能

每个任务只调用一张卡的情况下也会这样吗,我发现在不用
  1. export CUDA_VISIBLE_DEVICES=
复制代码
指定的使用哪个GPU计算的时候提交的任务都挤到了一张卡上。
熵大我用你的脚本测试了一下机器跑lammps的速度,9654在有的lammps项目上表现优于13900K,而且原来不能跑的REAXFF也能算了,不知道和更新有没有关系,我用的23的lammps,cuda是12.2,速度测试我更新到上面了,同时参考了你之前做的工作进行了比较

7

帖子

1

威望

53

eV
积分
80

Level 2 能力者

5#
 楼主 Author| 发表于 Post on 2024-6-25 21:35:56 | 只看该作者 Only view this author
本帖最后由 小葱拌豆腐 于 2024-6-25 23:50 编辑

另外,用熵大你的脚本中的命令跑REAXFF(lmp -k on g 1 -sf kk -pk kokkos cuda/aware on neigh full comm device binsize 2.8 -var x 8 -var y 4 -var z 8 -in in.* > run.log 2>&1),请问后续的命令是什么意思呢?

37

帖子

0

威望

329

eV
积分
366

Level 3 能力者

6#
发表于 Post on 2024-6-27 14:45:20 | 只看该作者 Only view this author
请问,我编译了kokkos包的lammps后,4090的性能还没CPU高是怎么回事?

7

帖子

1

威望

53

eV
积分
80

Level 2 能力者

7#
 楼主 Author| 发表于 Post on 2024-6-28 15:03:32 | 只看该作者 Only view this author
docshen777 发表于 2024-6-27 14:45
请问,我编译了kokkos包的lammps后,4090的性能还没CPU高是怎么回事?

详细说下环境和运行的指令还有计算的case等等,要不然这问题没法回答呀

37

帖子

0

威望

329

eV
积分
366

Level 3 能力者

8#
发表于 Post on 2024-6-29 17:20:57 | 只看该作者 Only view this author
小葱拌豆腐 发表于 2024-6-28 15:03
详细说下环境和运行的指令还有计算的case等等,要不然这问题没法回答呀

WSL2 UBUNTU20.04
LAMMPS是 2Aug2023
GCC9.4 CUDA12.5
OPENMPI4.1.5,有cuda-support

体系是一万原子硅钙REAXFF(也测试了其他测试文件,都非常慢,不如CPU。而且远远达不到帖子里给的benchmark)。

折腾了2天,重新编译了无数次,还是不能回复正常速度,请问您还能想到别的问题吗?

7

帖子

1

威望

53

eV
积分
80

Level 2 能力者

9#
 楼主 Author| 发表于 Post on 2024-7-5 11:59:12 | 只看该作者 Only view this author
docshen777 发表于 2024-6-29 17:20
WSL2 UBUNTU20.04
LAMMPS是 2Aug2023
GCC9.4 CUDA12.5

run的指令有问题没,开始计算后nvidia-smi能看到lmp进程吗

37

帖子

0

威望

329

eV
积分
366

Level 3 能力者

10#
发表于 Post on 2024-7-5 16:17:48 | 只看该作者 Only view this author
小葱拌豆腐 发表于 2024-7-5 11:59
run的指令有问题没,开始计算后nvidia-smi能看到lmp进程吗

lmp -in test_1.in -k on g 1 -sf kk -pk kokkos neigh half newton on

能看见一个lmp进程,类型是C。占用只有1-3%的样子,偶尔会跳一下30多

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2025-8-15 08:09 , Processed in 0.323366 second(s), 26 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list