RuntimeError: Cannot re-initialize CUDA in forked subprocess. To use CUDA with multiprocessing, you must use the ‘spawn’ start method
- fork和spawn是构建子进程的不同方式:
| fork | spawn |
|---|---|
| 分叉 | 产卵 |
| 继承 | 非继承 |
| 从头构建一个子进程,父进程的数据拷贝到子进程的空间中,拥有自己的Python解释器 | |
| 变量具有与父进程中相同的id | |
| N | 在每个子进程开始时导入模块 |
| 子进程获取在 name == main 块中定义的变量 | N |
解决方案
if __name__=='__main__':
torch.multiprocessing.set_start_method('spawn')
当在Python中使用CUDA并遇到'RuntimeError: Cannot re-initialize CUDA in forked subprocess'时,问题在于不支持在forked子进程中初始化CUDA。解决方法是在多进程设置中切换到'spawn'启动方法。确保在`if __name__ == '__main__':`块内调用`torch.multiprocessing.set_start_method('spawn')`来修复此问题。
2075

被折叠的 条评论
为什么被折叠?



