计算化学公社

标题: 为某网友的AMD GPU平台编译和调优LAMMPS和GROMACS [打印本页]

作者
Author:
Entropy.S.I    时间: 2023-10-15 00:27
标题: 为某网友的AMD GPU平台编译和调优LAMMPS和GROMACS
本帖最后由 Entropy.S.I 于 2023-10-15 04:42 编辑

为某网友的AMD GPU平台编译和调优LAMMPS和GROMACS

Oct-2023 by ア熵增焓减ウ | yult-entropy@qq.com | entropylt@163.com

0 前言

上个月收到一位网友的哔哩哔哩私信,希望笔者帮他折腾一下用AMD GPU跑LAMMPS,笔者本不太愿意接这种“吃力不讨好”的活,拖了一天多,最终良心过不去,还是接了。

该网友的PC配置是AMD Ryzen 5900X + Radeon 6800XT,他事先在闲鱼平台上花钱找人安装了Ubuntu Desktop 22.04.3 LTS操作系统。据了解,第一个“闲鱼师傅”安装不成功,把锅甩给了“主板不兼容”,又找了一个师傅,才安装成功。

此外,该网友还有一台Ryzen 7945HX + RTX 4060 Laptop笔记本PC。他此前一直使用的是在该笔记本PC上通过WSL安装的LAMMPS,GPU加速包是“GPU”,编译流程是传统make,使用纯MPI并行。

鉴于上述情况,笔者为其在两台PC上均编译了LAMMPS,并做了一些简单的性能调优。

进一步询问后了解到,该网友需要模拟甲烷、二氧化碳等物质在二氧化硅或石墨烯表面的吸附,因此笔者强烈推荐了GROMACS,并为其在6800XT的PC上编译了GROMACS 2023.2。

今年8月,笔者已经发过包括这2款软件在内的4款MD软件在AMD GPU平台上的基准测试以及兼容性说明和疑难解答,甚至面向国际同行发布了英文版。本文算是该系列文章的“番外篇”。


1 安装ROCm软件栈

理论上不需要手动下载ROCm,只需要到repo.radeon.com下载amdgpu-install元数据包,后续全部使用apt自动下载和安装即可。但根据经验,apt下载异常慢,因此推荐用多线程下载工具事先把一些比较大的包下载好,修复个别包的文件名,放到apt缓存目录(/var/cache/apt/archives),再安装。笔者事先下载了以下包:

(, 下载次数 Times of downloads: 195)
1.1 每步命令

1. 切换到root用户:

  1. sudo -i
复制代码

2. 将预先下载好的包放到apt缓存目录:

  1. cp [包所在目录]/* /var/cache/apt/archives
复制代码

3. 安装amdgpu-install元数据包:

  1. apt install ./amdgpu-install_5.7.50700-1652687.22.04_all.deb
复制代码

4. 更新apt包索引:

  1. apt update
复制代码

5. 安装ROCm软件栈,含AMD GPU内核态驱动:

  1. amdgpu-install --usecase=rocm,hiplibsdk
复制代码

此前已经把大部分包放进了apt缓存目录,因此安装过程很快。

6. 将需要使用AMD GPU的用户(对于PC,一般是主用户)添加到render组:

  1. usermod -a -G render [用户名]
复制代码

7. 重启:

  1. reboot
复制代码

重启后在需要使用AMD GPU的用户下执行rocminfo,如有正常输出,则说明ROCm软件栈配置完毕。


2 LAMMPS – AMD GPU

在6800XT的PC上编译LAMMPS 2Aug2023,同时包含GPU包和Kokkos包用于GPU加速。使用CMake+预设脚本进行编译,十分优雅。

2.1 每步操作

0. 编译OpenMPI(对于多卡并行的情况可选),按需启用UCX、GPU-aware等特性,这不是本文重点,不赘述。

1. 在8月文章中提到:

对于RDNA GPU,需使用最新版Kokkos (4.1.0) 替换官方捆绑的Kokkos(lib/kokkos),并将cmake/CMakeLists.txt第146和147行的14改为17。

最新版Kokkos:https://github.com/kokkos/kokkos/releases

2. 在预设文件cmake/presets/basic.cmake中添加要启用的包名(除Kokkos):

(, 下载次数 Times of downloads: 191)

3. 修改预设文件cmake/presets/kokkos-hip.cmake中的架构代号:

(, 下载次数 Times of downloads: 194)

4. 建立并进入编译所用目录:

  1. mkdir build-gpu-kokkos-hip-gfx1030
复制代码

5. CMake配置:

  1. cmake -C ../cmake/presets/basic.cmake -C ../cmake/presets/kokkos-hip.cmake -D GPU_API=HIP -D HIP_ARCH=gfx1030 -D CMAKE_CXX_COMPILER=hipcc -D HIP_PATH=/opt/rocm/hip/bin ../cmake
复制代码

6. 编译:

  1. cmake --build . -j24
复制代码

将二进制文件所在目录添加至PATH环境变量,即可使用。

2.2 并行性能调优

添加OpenMP环境变量:

  1. export OMP_NUM_THREADS=[每个进程的CPU]
复制代码

对于该网友的PC,以上环境变量的最佳值分别为'6'、'0-5'。若要在单块GPU上运行2个任务,则为第二个任务设置GOMP_CPU_AFFINITY=6-11。若要在单块GPU上运行4个任务,则设置OMP_NUM_THREADS=3,并为4个任务分别设置GOMP_CPU_AFFINITY,分别为'0-2'、'3-5'、'6-8'、'9-11'。


3 LAMMPS – NVIDIA GPU – WSL

GPU驱动和CUDA Toolkit等基础环境配置不赘述。

CMake配置命令:

  1. cmake -C ../cmake/presets/basic.cmake -D GPU_API=CUDA -D GPU_ARCH=sm_89 ../cmake
复制代码

没有启用Kokkos,可能是由于WSL环境过于混乱,出现了一些CUDA库找不到的情况。没有深究,因为该网友基本用不到双精度计算。

WSL下无法绑定CPU物理核心,因此只设置了OMP_NUM_THREADS=2,在Windows物理机上通过任务管理器将WSL进程分配到第二个CCD,因为第二个CCD一般比较空闲。

调优后MD模拟运行速度相较于之前快了1倍,是上节所述6800XT PC的~50%。测试基于该网友提供的输入文件。


4 AdaptiveCpp – ROCm

AdaptiveCpp有2个老名字:hipSYCL和OpenSYCL,在8月份笔者文章发布时它叫OpenSYCL。该SYCL实现正在快速迭代,新版本性能相较于上一个发布版本(hipSYCL 0.9.4)有很大提升,因此本次依然非常激进地使用了10月11日的开发版分支。

4.1 每步操作

1. 建立并进入编译所用目录:

  1. mkdir build-rocm
复制代码

2. CMake配置:

  1. cmake -D CMAKE_INSTALL_PREFIX=/opt/AdaptiveCppDev20231011.rocm570 -D CMAKE_C_COMPILER=/opt/rocm/llvm/bin/clang -D CMAKE_CXX_COMPILER=/opt/rocm/llvm/bin/clang++ -D WITH_ROCM_BACKEND=ON -D ROCM_PATH=/opt/rocm -D LLVM_DIR=/opt/rocm/llvm/lib/cmake/llvm -D WITH_SSCP_COMPILER=OFF ..
复制代码

3. 编译和安装:

  1. make -j24 install
复制代码

5 GROMACS – AMD GPU
5.1 每步命令

1. 建立并进入编译所用目录:

  1. mkdir build-sycl-rocm
复制代码

2. CMake配置:

  1. cmake -D CMAKE_PREFIX_PATH=/opt/AdaptiveCppDev20231011.rocm570 -D CMAKE_INSTALL_PREFIX=/opt/gmx2023.2_sycldev20231011_rocm570_gfx1030 -D CMAKE_C_COMPILER=/opt/rocm/llvm/bin/clang -D CMAKE_CXX_COMPILER=/opt/rocm/llvm/bin/clang++ -D GMX_GPU=SYCL -D GMX_SYCL_HIPSYCL=ON -D HIPSYCL_TARGETS=hip:gfx1030 -D GMX_BUILD_OWN_FFTW=ON ..
复制代码

3. 编译和安装:

  1. make -j24 install
复制代码

载入初始化脚本即可使用:

  1. source/opt/gmx2023.2_sycldev20231011_rocm570_gfx1030/bin/GMXRC
复制代码
5.2 并行性能调优

对于该网友的PC,推荐的mdrun命令:

  1. gmx mdrun -v -deffnm [tpr文件名称] -pin on -bonded gpu -pinoffset 0 -pinstride 1 -ntmpi 1 -ntomp 23 -gpu_id 0
复制代码

实测STMV-GMX体系的模拟速度为15ns/day,高于4060Ti和2080Ti。详情参考8月文章。

GROMACS能够完全通过mdrun命令设定并行参数,因此不需要像前面LAMMPS那样添加环境变量。运行前应当确保OpenMP的环境变量已被unset。



作者
Author:
南北多歧路    时间: 2023-10-15 09:42
恰好也有台7945x+4060laptop的本子,过会参照下大佬下的性能调优,多谢分享!
作者
Author:
Q1ngKl    时间: 2024-5-16 17:03
请教一下,kokkos现在是不是只能支持RNDA显卡中的gfx1030和gfx1100?我的6650xt电脑尝试了很久都没法实现。如果用gfx1032配置cmake会出现
  1. HIP enabled but no automatically detected AMD GPU architecture is supported.
复制代码
的错误。查看kokkos_arch.cmake文件,RDNA2中只列举了gfx1030。
如果用当作gfx1030编译能够成功但是运行时会出现
  1. terminate called after throwing an instance of 'std::runtime_error'
  2.   what():  hipFuncGetAttributes(&attr, kernel_func) error( hipErrorInvalidKernelFile): invalid kernel file /home/lch/Software/lammps-stable/lammps-2Aug2023/lib/kokkos/core/src/HIP/Kokkos_HIP_KernelLaunch.hpp:189
复制代码

作者
Author:
xptracy    时间: 2024-8-20 00:02
本帖最后由 xptracy 于 2024-8-20 08:52 编辑

老师能付费帮忙调下吗,7905x 4090  2023.1gpu版在linux下 跑不满 只有30%    弄了好几次都不行 9万原子100ns要跑两天多
作者
Author:
HNUST    时间: 2024-9-21 18:13
大佬,我觉得n卡太贵了,我4070s只是用来跑gmx,我感觉还不如买一个a卡,5000多差不多性能达到4080级别了,所以我想再组装一台a卡的。如果我买了,我编译成功一次,应该就行了把,稳定性怎么样,是不是所有的a卡都能编译
作者
Author:
GoldenBaby    时间: 2024-12-24 06:05
HNUST 发表于 2024-9-21 18:13
大佬,我觉得n卡太贵了,我4070s只是用来跑gmx,我感觉还不如买一个a卡,5000多差不多性能达到4080级别了, ...

最近我刚刚整了一个A卡,7700xt,系统用的debian12,实测下来大概效率最高也就能跑到12核cpu,速度大概13ns/day,也就略低于4060Ti,考虑到普适性与折腾程度还有价格,我觉得还是N卡性价比高。
作者
Author:
HNUST    时间: 2024-12-24 22:05
GoldenBaby 发表于 2024-12-24 06:05
最近我刚刚整了一个A卡,7700xt,系统用的debian12,实测下来大概效率最高也就能跑到12核cpu,速度大概13 ...

试试79000系列,这个系列最新优化的
作者
Author:
hdhxx123    时间: 2025-1-3 16:57
本帖最后由 hdhxx123 于 2025-1-14 21:19 编辑

在WSL2下ubuntu22.04安装rocm6.2.3驱动后,并没有找到
  1. LLVM_DIR=/opt/rocm/llvm/lib/cmake/llvm
复制代码
在路径
  1. /opt/rocm/llvm/lib/cmake
复制代码
下只有omptest/和openmp/两个文件夹。
安装驱动的命令为
  1. amdgpu-install -y --usecase=wsl,hiplibsdk,rocm --no-dkms
复制代码
,版本是
  1. amdgpu-install_6.2.60203-1_all.deb
复制代码
后续解决方法是:自行安装llvm18和clang,如下是语句:(注:这里选择18是因为rocm6.2.3内置的为clang-18)
  1. wget https://apt.llvm.org/llvm.sh
  2. chmod u+x llvm.sh
  3. sudo ./llvm.sh 18
  4. sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-18 100
  5. sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-18 100
  6. apt-get install libclang-18-dev
复制代码
然后再进行
  1. cmake -D CMAKE_INSTALL_PREFIX=/opt/AdaptiveCppDev20250103.rocm623 -D CMAKE_C_COMPILER=/opt/rocm/llvm/bin/clang -D CMAKE_CXX_COMPILER=/opt/rocm/llvm/bin/clang++ -D WITH_ROCM_BACKEND=ON -D ROCM_PATH=/opt/rocm  -D WITH_SSCP_COMPILER=OFF ..
复制代码

后编译得到AdaptiveCpp,但在进一步进行gromacs2024.3的编译时
  1. cmake -D CMAKE_PREFIX_PATH=/opt/AdaptiveCppDev20250102.rocm623 -D CMAKE_INSTALL_PREFIX=/opt/gmx2024.4_sycldev20231011_rocm623_gfx1100 CMAKE_C_COMPILER=/opt/rocm/llvm/bin/clang -D CMAKE_CXX_COMPILER=/opt/rocm/llvm/bin/clang++ -D GMX_GPU=SYCL -D GMX_SYCL_HIPSYCL=ON -D HIPSYCL_TARGETS=hip:gfx1100 -D GMX_BUILD_OWN_FFTW=ON ..
复制代码

报错。报错信息如图,在附件中是完整的编译过程与rocminfo、acpp-info信息,显卡是7900xt。
作者
Author:
Capt_Lappland    时间: 2025-3-3 03:09
hdhxx123 发表于 2025-1-3 16:57
在WSL2下ubuntu22.04安装rocm6.2.3驱动后,并没有找到在路径下只有omptest/和openmp/两个文件夹。
安装驱 ...

研究了很久解决了,
  1. sudo apt install rocm-llvm-dev
复制代码

llvm文件夹就会出现
在新版本rocm中,llvm的cmake从rocm-llvm移动到rocm-llvm-dev中了
作者
Author:
hdhxx123    时间: 2025-3-21 19:13
Capt_Lappland 发表于 2025-3-3 03:09
研究了很久解决了,

llvm文件夹就会出现

我上面说的仅指WSL对rocm-llvm的特殊版本限制所说,非wsl下一切正常。
作者
Author:
NGC626    时间: 2025-3-27 17:01
一眼r9000p




欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3