本文主要是介绍RuntimeError: Attempted to send CUDA tensor received from another process,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
训练模型时报错:
RuntimeError: Attempted to send CUDA tensor received from another process;
this is not currently supported. Consider cloning before sending.
翻译:RuntimeError:尝试发送从其他进程接收的 CUDA 张量;目前不支持此功能。在发送之前考虑克隆。
在我的项目中,这个问题被定位在dataloder的使用里,当numworks设置为非0值时,不报此错误,模型可以正常训练。
原因:出现这个问题的原因在于,如果dataloder的numworks设置为0,那么仅在主进程中加载数据,不使用多线程,在整理函数中如果有cuda上的tensor也没有问题。但是如果设置使用多线程,那么cuda上的数据就会不能在多个线程中传来传去,就会报出这个错误。
解决方法:调试程序,看看在dataloader的整理函数中哪个变量是在gpu上的,在dataset的geiitem里返回时直接把它放在cpu上。或者把numworkers设置为0。
这篇关于RuntimeError: Attempted to send CUDA tensor received from another process的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!