【Pytorch】cuda runtime error (801) : operation not supported at C:\w\b\……ric/StorageSharing.cpp:245
最近在使用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.com
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
