计算化学公社
标题: 在linux mint21.3上安装含kokkos以及deepmd的lammps & 4090的reaxff测试 [打印本页]
作者Author: 小葱拌豆腐 时间: 2024-6-24 17:22
标题: 在linux mint21.3上安装含kokkos以及deepmd的lammps & 4090的reaxff测试
本帖最后由 小葱拌豆腐 于 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接口
#github上直接下载压缩包的源码会报错 用下面这个命令下载
- cd /some/workspace
- git clone <a href="https://github.com/deepmodeling/deepmd-kit.git" target="_blank">https://github.com/deepmodeling/deepmd-kit.git</a> deepmd-kit
- cd deepmd-kit
- deepmd_source_dir=`pwd`
复制代码
安装python界面安装tensorflow python界面python --version
#笔者事先安装了miniconda3
- conda install python==3.8
- virtualenv -p python3.8 $tensorflow_venv
- #python tensorflow模块
- virtualenv -p python3 tensor#tensor可以换成任何你想用的名字
- source tensor/bin/activate
- pip install --upgrade pip#更新pip
- pip install --upgrade tensorflow
- #使用dp时需要在新shell里激活环境
- source tensor/bin/activate
- deactivate#退出环境
复制代码
验证安装
- python -c "import tensorflow as tf;print(tf.reduce_sum(tf.random.normal([1000, 1000])))"
复制代码
安装deepmd python接口
#gcc版本要高于4.8,建议和tensorflow保持相同版本的gcc编译,下命令可查看
- python -c "import tensorflow;print(tensorflow.version.COMPILER_VERSION)"
- pip install git+<a href="https://github.com/deepmodeling/deepmd-kit.git" target="_blank">https://github.com/deepmodeling/deepmd-kit.git</a> deepmd-kit
- cd $deepmd_source_dir#打开源码路径
- pip install .
复制代码
前提是保持pip版本最新,否则会遇到报错。
- pip install --upgrade pip setuptools wheel
- python -m pip install --upgrade pip
-
- #完成安装后 dp -h命令正常输出help界面
复制代码
安装horovod和mpi4py安装nccl,参考NVIDIA/nccl: Optimized primitives for collective multi-GPU communication (github.com)
- 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++接口。
- #可通过脚本安装tensorflow的C++界面
- python source/install/build_tf.py --prefix [--cuda]<b>安装deepmd-kitC++界面</b>cd $deepmd_source_dir/source
- mkdir build
- cd build
- #对于cuda支持要求cmake版本不低于3.23
- pip install -U cmake
- #设置合适的安装位置$deepmd_root,注意这里不是dp的源代码目录$deepmd_source_dir 这里设置为 /opt/dp_lammps/dp
- #下载lammps源码解压到需要的位置
- 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 ..
- make -j8
- make install
复制代码
安装成功后$deepmd_root目录下出现bin和lib子目录
3.builtin方法安装lammps dp模块(推荐)
- cd $deepmd_source_dir/source/build
- make lammpsmkdir -p lammps-stable_2Aug2023_update3/build/
- cd lammps-stable_2Aug2023_update3/build/
- echo "include(/opt/dp_lammps/deepmd-kit/source/lmp/builtin.cmake)" >> ../cmake/CMakeLists.txt
复制代码
编译cpu模式的lammps
- #需要什么包添上即可,最后的-D LAMMPS_MACHINE=cpu指定了生成的可执行文件lmp的后缀以便区分,这种设置下生成的为了lmp_cpu,可执行文件位于CMAKE_INSTALL_PREFIX指定的位置
- 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
- make -j128
- make install
复制代码
编译gpu模式的lammps
- cd lammps-stable_2Aug2023_update3/lib/gpu
- vim Makefile.linux
- vim Makefile.linux 修改如下内容:
- CUDA_HOME =/usr/local/cuda #cuda安装地址,我这里不用改,因为cuda位置在默认位置安装的
- CUDA_PRECISION = -D_SINGLE_DOUBLE #单精度和双精度混编,这个是默认的,我们这里不更改,既能保证误差小的情况,也不至于速度特别慢。
- CUDA_ARCH = -arch=sm_89 #需要找一下不同架构显卡对应算力修改数值
- cd ../..
- mkdir build_gpu
- cd build_gpu
- 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
- make -j128
- make install#lmp_gpu可执行文件
复制代码
编译kokkos
修改kokkos-cuda.cmake文件
- mkdir build-kokkos-cuda#在lammps源代码目录下操作
- cd build-kokkos-cuda
- 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
- make -j128
- make install
复制代码
环境变量声明与调优设置?- vim ~/.bashrc
- export PATH=$PATH:/opt/dp_lammps/dp/bin #插入lmp、lmp_cpu
- source ~/.bashrc
- #现在lmp -h或_cpu,gpu应该有正常的输出了
复制代码
在这里也弱弱的问下,具体要设置那些调优参数,还望大佬们能不吝赐教,目前我只设置了环境变量里的这两个,对于双路9654来说怎么设置合适呢?但是发现无论OMP_NUM_THREADS设置成多少,在用kokkos算的时候始终只用一个核心,俩任务一起算也是这样。
- export OMP_NUM_THREADS=16
- export GOMP_CPU_AFFINITY=0-31
复制代码
运行不同包的指令
另外还有一个问题是,如何指定使用哪个gpu呢?
在用CPU跑的时候遇到了个问题,无论np设置成多少都是一个核在跑,需要先unset GOMP_CPU_AFFINITY,才能正常跑。
- #cpu,关于bind-to-core的对比后面给出来,至于为啥要设置还没搞明白。
- mpirun --bind-to core -np 16 lmp_cpu -in in.reaxc
- #gpu
- lmp_gpu -in in.reaxc -sf gpu -pk gpu 1
- #kokkos
- 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 |
|
(, 下载次数 Times of downloads: 38)
不知道还有哪些调优的设置来提高计算的效率呢,以上请各位老师参考并批评指正!
作者Author: 小葱拌豆腐 时间: 2024-6-24 17:24
第一次发帖,似乎md格式直接粘进来排版有点稀碎
作者Author: Entropy.S.I 时间: 2024-6-25 18:21
多GPU机器必须使用Slurm调度,否则没法用,很容易跑出正常情况不到十分之一的性能
作者Author: 小葱拌豆腐 时间: 2024-6-25 21:28
本帖最后由 小葱拌豆腐 于 2024-6-25 21:31 编辑
每个任务只调用一张卡的情况下也会这样吗,我发现在不用- export CUDA_VISIBLE_DEVICES=
复制代码 指定的使用哪个GPU计算的时候提交的任务都挤到了一张卡上。
熵大我用你的脚本测试了一下机器跑lammps的速度,9654在有的lammps项目上表现优于13900K,而且原来不能跑的REAXFF也能算了,不知道和更新有没有关系,我用的23的lammps,cuda是12.2,速度测试我更新到上面了,同时参考了你之前做的工作进行了比较
作者Author: 小葱拌豆腐 时间: 2024-6-25 21:35
本帖最后由 小葱拌豆腐 于 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),请问后续的命令是什么意思呢?
作者Author: docshen777 时间: 2024-6-27 14:45
请问,我编译了kokkos包的lammps后,4090的性能还没CPU高是怎么回事?
作者Author: 小葱拌豆腐 时间: 2024-6-28 15:03
详细说下环境和运行的指令还有计算的case等等,要不然这问题没法回答呀
作者Author: docshen777 时间: 2024-6-29 17:20
WSL2 UBUNTU20.04
LAMMPS是 2Aug2023
GCC9.4 CUDA12.5
OPENMPI4.1.5,有cuda-support
体系是一万原子硅钙REAXFF(也测试了其他测试文件,都非常慢,不如CPU。而且远远达不到帖子里给的benchmark)。
折腾了2天,重新编译了无数次,还是不能回复正常速度,请问您还能想到别的问题吗?
作者Author: 小葱拌豆腐 时间: 2024-7-5 11:59
run的指令有问题没,开始计算后nvidia-smi能看到lmp进程吗
作者Author: docshen777 时间: 2024-7-5 16:17
lmp -in test_1.in -k on g 1 -sf kk -pk kokkos neigh half newton on
能看见一个lmp进程,类型是C。占用只有1-3%的样子,偶尔会跳一下30多
欢迎光临 计算化学公社 (http://bbs.keinsci.com/) |
Powered by Discuz! X3.3 |