问题:
尝试使用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 运行时所支持。文章来源:https://www.toymoban.com/news/detail-629383.html
fork和spawn是构建子进程的不同方式:文章来源地址https://www.toymoban.com/news/detail-629383.html
fork | spawn |
---|---|
分叉 | 产卵 |
继承 | 非继承 |
从头构建一个子进程,父进程的数据拷贝到子进程的空间中,拥有自己的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博客
到了这里,关于RuntimeError: Cannot re-initialize CUDA in forked subprocess.的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!