Amber分子动力学模拟的cudaMemcpy GpuBuffer错误的解决

在进行Amber GPU分子动力学模拟时遇到'cudaMemcpy GpuBuffer::Download failed an illegal memory access was encountered'的错误。通过检查体系结构、软件版本、模拟条件,并尝试修改ntpr、ntwx、ntwr参数以及应用Amber补丁,成功解决了问题。此解决方案可能需要根据不同的设备和体系进行调整。
部署运行你感兴趣的模型镜像

在用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
目前可以正常运行计算。

后记

如果你也遇到了类似的问题,欢迎留言交流。

您可能感兴趣的与本文相关的镜像

PyTorch 2.8

PyTorch 2.8

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值