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

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变量需求的可以去看看文档改变一下使用的多进程的方法。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值