当前位置: 首页 > 工具软件 > rein > 使用案例 >

Cannot re-initialize CUDA in forked subprocess. To use CUDA with multiprocessing, you

轩辕涵亮
2023-12-01

RuntimeError: Cannot re-initialize CUDA in forked subprocess. To use CUDA with multiprocessing, you must use the ‘spawn’ start method

问题出现的背景:在一个使用 cuda模型训练进行加速的程序中,想要使用多进程模型测试进行加速。

解决的办法:因为我是比较熟悉 python 中多进程的使用,所以,把模型测试部分的所有变量都改成普通的python变量或numpy变量这种(也就是不要有pytorch的cuda类型的张量),然后这样操作就不会有问题了。就比如:user_embedding = user_embedding.cpu().numpy() 先将原本cuda类型的张量变成cpu类型的张量,再将pytorch张量转变为 numpy的ndarray类型变量,这样是不会出错的。

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

但是我这里不需要共享CUDA张量,就把他变更为cpu变量就行,有共享CUDA变量需求的可以去看看文档改变一下使用的多进程的方法。

 类似资料: