本帖最后由 Entropy.S.I 于 2023-8-29 03:44 编辑
主流分子动力学程序在消费级AMD GPU上的兼容性说明及疑难解答 ——Switch to AMD【第2集】
打击黄狗,人人有责
0 前言
本文的信息并不全面,仅仅是作者近期在AMD GPU上测试经典MD性能的附属产物。你或许可以使用较老版本的ROCm和特定的GPU轻松地编译并运行文中提到的应用程序,也有可能在不久后的软件更新中,文中提到的一些兼容性问题就会被解决。本文内容在相应程序的官方文档/手册/Readme/Wiki中均未提及,且几乎无法在互联网上搜索到现成的解决方案。但这并不代表官方的文档/手册/Readme/Wiki就不值得阅读,相反,只有在仔细、逐句研读过那些内容后,才能更好地理解本文。 本文基于的操作系统环境:Ubuntu 22.04.3 LTS, Linux 6.2.0-26-generic x86_64, GNU 11.4.0。 本文涉及的GPU架构(代号):GCN 5.1 (gfx906), RDNA 2 (gfx1030), RDNA 3 (gfx1100)。 本文涉及的ROCm版本(参考repo.radeon.com):5.4.6, 5.5.3, 5.6.0。其中,5.4.6是最后一个捆绑LLVM 15的ROCm版本,此后版本的ROCm捆绑的LLVM 16还在快速更新中,很容易产生编译器兼容性问题,但如果能用最新版ROCm成功编译并运行,理论上性能更好。
使用ROCm 5.4.6搭配OpenSYCL-0.9.4,在gfx906或gfx1030上均可直接编译、运行(参考GROMACS 2023.2 Manual, page 15-17)。使用ROCm 5.5.3或5.6.0搭配OpenSYCL-develop 25Jul2023,在CMake命令中添加-DWITH_SSCP_COMPILER=OFF后也可直接编译、运行。OpenSYCL develop分支正在将源代码中的'hipSYCL'改为'OpenSYCL',若基于其编译GROMACS,在CMake运行时会出现较多Warning,但这不会导致任何问题。 基于ROCm 5.6.0 & OpenSYCL-develop 25Jul2023 编译的GROMACS性能显著强于之前版本,且在gfx906和gfx1030的基准测试中未出现bug。但是,对于gfx1100 (7900 XTX, RDNA 3),在3个版本的ROCm下运行均非常不稳定:性能异常波动,且mdrun运行一段时间后有极大概率卡死(今年6月有人在GROMACS论坛上反馈过类似的情况),同时GPU状态信息无法被rocm-smi识别,这可能对应了Windows用户所谓的“掉驱动”。
使用ROCm 5.4.6或5.5.3,在gfx906、gfx1030或gfx1100上均可成功编译、运行。基准测试中未出现bug。应当对源代码做以下修改: 1) 删除src/pmemd/src/cuda/ptxmacros.h中的第3个HIP-TODO(第130~170行); 2) 若为本机上不存在的GPU架构编译,应当在compile_with_hip.sh的CMake命令中添加AMDGPU_TARGETS和GPU_TARGETS变量以启用针对特定GPU架构的优化,可同时设置多个target; 3) 对于RDNA GPU,添加-D HIP_WARP64=OFF,并检查src/pmemd/src/cuda/ptxmacros.h第85行,按需补充代码,例如对于7900 XTX,补充 || defined(__gfx1100__)。 ROCm 5.5.3的性能显著强于ROCm 5.4.6。使用ROCm 5.6.0,暂未找到可以成功编译的方法。
使用ROCm 5.4.6、5.5.3或5.6.0,在gfx906、gfx1030或gfx1100上均可直接编译、运行。在gfx1100上偶尔出现GPU调度不积极的情况,其余基准测试中未出现bug。若为本机上不存在的GPU架构编译,应当在CMake命令中添加AMDGPU_TARGETS和GPU_TARGETS变量以启用针对特定GPU架构的优化,可同时设置多个target。3个版本的ROCm的性能依次递增(使用默认的VkFFT后端),对于小体系,性能差异较明显。
使用ROCm 5.4.6、5.5.3或5.6.0,在gfx906、gfx1030或gfx1100上均可成功编译、运行。基准测试中未出现bug。对于RDNA GPU,需使用最新版Kokkos (4.1.0) 替换官方捆绑的Kokkos(lib/kokkos),并将cmake/CMakeLists.txt第146和147行的14改为17。CMake步骤中,在cmake/presets/basic.cmake中指定要启用的包;在cmake/presets/kokkos-hip.cmake中指定GPU的架构代码,只能指定1个GPU架构,代码的对应关系列表可参考lib/kokkos/cmake/kokkos_arch.cmake。3个版本的ROCm的性能依次递增,对于小体系的模拟,性能差异较明显。
5 结论
4款应用程序的兼容性列表如下: 无论从绝对性能、性价比还是兼容性上考虑,现阶段OpenMM和Lammps都很适合普通用户彻底“switch to AMD”,GROMACS和Amber的用户也可以开始尝试“switch to AMD”。ROCm 5.4.6或5.5.3配合GCN5.1或RDNA2 GPU可完美兼容本文提到的4款应用程序,而ROCm 5.6.0具有最好的性能。某些情况下,需对程序源代码做一些简单的修改。值得注意的是,截至本文发布前,最新版ROCm (5.6.0)并未正式支持RDNA 3 GPU,根据AMD官方通知,今年秋季将会正式支持,因此GROMACS中的RDNA 3特有问题可能只是暂时性的。
|