admin管理员组文章数量:1590143
最近在使用Pytorch对一个强化学习算法做分布式/多进程的改造,其中有一步需要将主进程训练好的新权重使用multiprocessing库的Queue对象发送给子进程。然后在打包权重送入队列时出现以下错误:
cuda runtime error (801) : operation not supported at C:\w\b\windows\pytorch\torch/csrc/generic/StorageSharing.cpp:245
经过网络上的一些资料搜索了解到,可能是因为欲获取权重的模型目前放在GPU设备上,所以在对权重做一些操作时会提示这个错误。难道是一些GPU资源不能随意在CPU上操作?
那若假定A模型一定要放在GPU上跑,可不可能先获取A模型的参数,送到一个CPU上跑着的B模型,然后再从这个CPU上的B模型获取权重?试了试,问题解决了,具体参考代码如下。
def get_net_params(A, B):
B.load_state_dict(A.state_dict())
return B.state_dict()
主要是尽量避免直接去获取并传送(比如使用multiprocessing中的Queue类)GPU设备上的模型的权重资源。除了笔者这种做法,应当还有其他方法。具体为什么会出现这种错误,可能和Pytorch一些底层设计有关,笔者暂时不了解具体原因,如果有人知道了,可以在评论区分享想法。
// 全文完
因笔者能力有限,若文章内容存在错误或不恰当之处,欢迎留言、私信批评指正。
Email:YePeanut[at]foxmail
本文标签: ErrorRuntimePytorchCUDAoperation
版权声明:本文标题:【Pytorch】cuda runtime error (801) : operation not supported at C:wb……ricStorageSharing.cpp:245 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1728084477a1144826.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论