主流分子動(dòng)力學(xué)程序在消費(fèi)級(jí)AMD GPU上的兼容性說(shuō)明及疑難解答
主流分子動(dòng)力學(xué)程序在消費(fèi)級(jí)AMD GPU上的兼容性說(shuō)明及疑難解答
——Switch to AMD【第2集】
[首發(fā)于計(jì)算化學(xué)公社:http://bbs.keinsci.com/thread-39267-1-1.html]
Aug-2023 by ア熵增焓減ウ
打擊黃狗,人人有責(zé)
0??前言
本文的信息并不全面,僅僅是作者近期在A(yíng)MD GPU上測(cè)試經(jīng)典MD性能的附屬產(chǎn)物。你或許可以使用較老版本的ROCm和特定的GPU輕松地編譯并運(yùn)行文中提到的應(yīng)用程序,也有可能在不久后的軟件更新中,文中提到的一些兼容性問(wèn)題就會(huì)被解決。本文內(nèi)容在相應(yīng)程序的官方文檔/手冊(cè)/Readme/Wiki中均未提及,且?guī)缀鯚o(wú)法在互聯(lián)網(wǎng)上搜索到現(xiàn)成的解決方案。但這并不代表官方的文檔/手冊(cè)/Readme/Wiki就不值得閱讀,相反,只有在仔細(xì)、逐句研讀過(guò)那些內(nèi)容后,才能更好地理解本文。
本文基于的操作系統(tǒng)環(huán)境:Ubuntu 22.04.3 LTS, Linux 6.2.0-26-generic x86_64, GNU 11.4.0。
本文涉及的GPU架構(gòu)(代號(hào)):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是最后一個(gè)捆綁LLVM 15的ROCm版本,此后版本的ROCm捆綁的LLVM 16還在快速更新中,很容易產(chǎn)生編譯器兼容性問(wèn)題,但如果能用最新版ROCm成功編譯并運(yùn)行,理論上性能更好。
0??GROMACS 2023.2 – OpenSYCL (原hipSYCL)
使用ROCm 5.4.6搭配OpenSYCL-0.9.4,在gfx906或gfx1030上均可直接編譯、運(yùn)行(參考GROMACS 2023.2 Manual, page 15-17)。使用ROCm 5.5.3或5.6.0搭配OpenSYCL-develop 25Jul2023,在CMake命令中添加-DWITH_SSCP_COMPILER=OFF后也可直接編譯、運(yùn)行。OpenSYCL develop分支正在將源代碼中的'hipSYCL'改為'OpenSYCL',若基于其編譯GROMACS,在CMake運(yùn)行時(shí)會(huì)出現(xiàn)較多Warning,但這不會(huì)導(dǎo)致任何問(wèn)題。
基于ROCm 5.6.0 & OpenSYCL-develop 25Jul2023 編譯的GROMACS性能顯著強(qiáng)于之前版本,且在gfx906和gfx1030的基準(zhǔn)測(cè)試中未出現(xiàn)bug。但是,對(duì)于gfx1100 (7900XTX, RDNA 3),在3個(gè)版本的ROCm下運(yùn)行均非常不穩(wěn)定:性能異常波動(dòng),且mdrun運(yùn)行一段時(shí)間后有極大概率卡死(今年6月有人在GROMACS論壇上反饋過(guò)類(lèi)似的情況:https://gromacs.bioexcel.eu/t/gromacs-get-stuck-amd-gpu/6625),同時(shí)GPU狀態(tài)信息無(wú)法被rocm-smi識(shí)別,這可能對(duì)應(yīng)了Windows用戶(hù)所謂的“掉驅(qū)動(dòng)”。
1??Amber 22 – AmberTools 22 – Amber 22 HIP Patch 3Jan2023
使用ROCm 5.4.6或5.5.3,在gfx906、gfx1030或gfx1100上均可成功編譯、運(yùn)行?;鶞?zhǔn)測(cè)試中未出現(xiàn)bug。應(yīng)當(dāng)對(duì)源代碼做以下修改:
1) 刪除src/pmemd/src/cuda/ptxmacros.h中的第3個(gè)HIP-TODO(第130~170行);
2) 在compile_with_hip.sh的CMake命令中添加AMDGPU_TARGETS和GPU_TARGETS變量以啟用針對(duì)特定GPU架構(gòu)的優(yōu)化,可同時(shí)設(shè)置多個(gè)target;
3) 對(duì)于RDNA GPU,添加-D HIP_WARP64=OFF,并檢查src/pmemd/src/cuda/ptxmacros.h第85行,按需補(bǔ)充代碼,例如對(duì)于7900 XTX,補(bǔ)充 || defined(__gfx1100__)。
ROCm 5.5.3的性能顯著強(qiáng)于ROCm 5.4.6。使用ROCm 5.6.0,暫未找到可以成功編譯的方法。
2??OpenMM 8.0.0 – OpenMM HIP Plugin 8Mar2023
使用ROCm 5.4.6、5.5.3或5.6.0,在gfx906、gfx1030或gfx1100上均可直接編譯、運(yùn)行。在gfx1100上偶爾出現(xiàn)GPU調(diào)度不積極的情況,其余基準(zhǔn)測(cè)試中未出現(xiàn)bug。若為本機(jī)上不存在的GPU架構(gòu)編譯,應(yīng)當(dāng)在CMake命令中添加AMDGPU_TARGETS和GPU_TARGETS變量以啟用針對(duì)特定GPU架構(gòu)的優(yōu)化,可同時(shí)設(shè)置多個(gè)target。3個(gè)版本的ROCm的性能依次遞增(使用默認(rèn)的vkFFT后端),對(duì)于小體系,性能差異較明顯。
3??LAMMPS 2Aug2023 – Kokkos
使用ROCm 5.4.6、5.5.3或5.6.0,在gfx906、gfx1030或gfx1100上均可成功編譯、運(yùn)行?;鶞?zhǔn)測(cè)試中未出現(xiàn)bug。對(duì)于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的架構(gòu)代碼,只能指定1個(gè)GPU架構(gòu),代碼的對(duì)應(yīng)關(guān)系列表可參考lib/kokkos/cmake/kokkos_arch.cmake。3個(gè)版本的ROCm的性能依次遞增,對(duì)于小體系的模擬,性能差異較明顯。
4??結(jié)論
4款應(yīng)用程序的兼容性列表如下:

無(wú)論從絕對(duì)性能、性?xún)r(jià)比還是兼容性上考慮,現(xiàn)階段OpenMM和Lammps都很適合普通用戶(hù)徹底“switch to AMD”,GROMACS和Amber的用戶(hù)也可以開(kāi)始嘗試“switch to AMD”。ROCm 5.4.6或5.5.3配合GCN5.1或RDNA2 GPU可完美兼容本文提到的4款應(yīng)用程序,而ROCm 5.6.0具有最好的性能。使用ROCm 5.5.3或5.6.0,需對(duì)程序源代碼做一些簡(jiǎn)單的修改。值得注意的是,截至本文發(fā)布前,最新版ROCm (5.6.0)并未正式支持RDNA 3 GPU,根據(jù)AMD官方通知,今年秋季將會(huì)正式支持,因此GROMACS中的RDNA 3特有問(wèn)題可能只是暫時(shí)性的。