RuntimeError: Cannot re-initialize CUDA in forked subprocess.

问题:        

        尝试使用python自带的multiprocessing模块调用torch模型使用cuda加快预测速度,报错RuntimeError: Cannot re-initialize CUDA in forked subprocess. To use CUDA with multiprocessing, you must use the ‘spawn’ start method

原因:

        在Python3中使用 spawn 或 forkseverver 启动方法才支持在进程之间共享CUDA张量。而multiprocessing 是使用 fork 创建子进程,不被 CUDA 运行时所支持。

        fork和spawn是构建子进程的不同方式:

forkspawn
分叉产卵
继承非继承
从头构建一个子进程,父进程的数据拷贝到子进程的空间中,拥有自己的Python解释器
变量具有与父进程中相同的id
N在每个子进程开始时导入模块
子进程获取在 name == main 块中定义的变量N

解决方法:

if __name__=='__main__':
    torch.multiprocessing.set_start_method('spawn')

参考链接:

  • pythonRuntimeError: Cannot re-initialize CUDA in forked subprocess. To use CUDA with multiprocessing_FakeOccupational的博客-CSDN博客
  • 日志提示“RuntimeError: Cannot re-initialize CUDA in forked subprocess”_AI开发平台ModelArts_故障排除_训练作业_GPU相关问题_华为云
  • pytorch中使用cuda进行多任务multiprocessing_YNNAD1997的博客-CSDN博客

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2023年8月3日
下一篇 2023年8月3日

相关推荐