AMBER分子动力学模拟的一个GpuBuffer错误
在用GPU算Amber分子动力学模拟的时候总是遇到一个错误
cudaMemcpy GpuBuffer::Download failed an illegal memory access was encountered
cudaMemcpy GpuBuffer::Download failed an illegal memory access was encountered
查找了很多资料,发现丢出这个错误并不给出任何有用的信息,需要进一步去检查你的体系、结构是否存在问题。这里,我给出一个解决这个问题的尝试,不一定适用于你的体系、设备,可能需要再多次尝试。
设备、软件版本、模拟条件
(1)GPU设备
V100/16 GB、RTX3080/12 GB、RTX3080Ti/12 GB,不管是在集群还是工作站上都出现过这个问题。
所有机器均为内网,不能连接外网。
(2)软件版本
Amber20、AmberTools21或AmberTools20均出现过这个问题。
(3)模拟体系及条件
膜蛋白,约2000个残基、总原子数约40万(TIP3P水)。使用的力场包括ff19SB、ff14SB、TIP3P、OPC、Gaff、Gaff2、phosaa19、lipid17、GAMCLY-06j_1等。cutoff = 12 ,ntpr = 50000,ntwx = 50000, ntwr = 500000。
报错状态
在minimization、heat的时候均未出现该问题。在equilibrium和production过程中会出现该错误。通常在开始时即会出错。作业提交上1分钟内,out文件中第一条尚未记录或第二条尚未记录时即报该错误。
将同样的任务提交在超算平台上(V100/32GB,RTX3090等)均未出现错误,可正常计算。
寻找错误原因
似乎这个错误是由于GPU的缓存导致,但是Amber通常只占用GPU内存的很小一部分。以我的体系为例,通常在2000 MB左右,更复杂的体系也大约站4000 MB的样子。
(1)检查体系结构是否有错。
有解决方案认为该问题可能是由于出现了不合理的键长、键角、二面角等,势能过大导致了原子运动速度和力明显不合理,结束计算报错。可使用cpptraj中check命令检查结构。
但是我的体系在超算上可以正常运算,猜测不是该问题。
(2)修改ntpr,ntwx,ntwr修改。发现不同提交时,运算结束的步骤也不一样,可能运算25000步结束作业,也可能运算12500步结束作业。但都可以正常开始运行作业。可以认为初始体系应该不存在问题。
(3)发现输出的out、nc、mdinfo以及rst文件时间并不一样,通常mdinfo和nc文件先更新,而out文件后更新,如:
-rw-rw-r--. 1 Adam Adam 1.4K Apr 17 16:12 01-prod01.mdinfo
-rw-rw-r--. 1 Adam Adam 117M Apr 17 16:12 01-prod01.nc
-rw-rw-r--. 1 Adam Adam 37K Apr 17 16:07 01-prod01.out
-rw-rw-r--. 1 Adam Adam 15M Apr 17 16:12 01-prod01.rst
-rw-rw-r--. 1 Adam Adam 2.1K Apr 17 14:59 13-prod.in
可能是由于轨迹、能量等参数仍然存储在GPU内存中,而后才记录在out文件中。由于步数记录过大,导致了过多的轨迹、力、速度储存在GPU内存中,报该错物。
解决方案
(1)打amber补丁
由于服务器不能连接内网,故将补丁文件下载下来,随后在amber_src中的update_amber指定
补丁下载地址:
https://ambermd.org/AmberPatches.php
https://ambermd.org/ATPatches.php
将这些文件放在amber20_patch和ambertools21_patch目录下
~/amber_src/update_amber --amber-updates=/home/Adam/amber20_patch
~/amber_src/update_amber --ambertools-updates=/home/Adam/ambertools21_patch
随后使用cmake重新编译安装amber即可。
(2)修改ntpr,ntwx,ntwr的参数。
我的体系改为:
ntpr = 25000, ntwx = 25000, ntwr = 25000
目前可以正常运行计算。
后记
如果你也遇到了类似的问题,欢迎留言交流。
在进行Amber GPU分子动力学模拟时遇到'cudaMemcpy GpuBuffer::Download failed an illegal memory access was encountered'的错误。通过检查体系结构、软件版本、模拟条件,并尝试修改ntpr、ntwx、ntwr参数以及应用Amber补丁,成功解决了问题。此解决方案可能需要根据不同的设备和体系进行调整。
1万+

被折叠的 条评论
为什么被折叠?



