问题出现的背景:在一个使用 cuda
对模型训练
进行加速的程序中,想要使用多进程
对模型测试
进行加速。
解决的办法:因为我是比较熟悉 python 中多进程的使用,所以,把模型测试部分的所有变量都改成普通的python变量或numpy变量这种(也就是不要有pytorch的cuda类型的张量),然后这样操作就不会有问题了。就比如:user_embedding = user_embedding.cpu().numpy()
先将原本cuda类型的张量变成cpu类型的张量,再将pytorch张量转变为 numpy的ndarray类型变量,这样是不会出错的。
原因:在Python3中使用 spawn
或 forkseverver
启动方法才支持在进程之间共享CUDA张量。而我是用的multiprocessing
是使用 fork
创建子进程,不被 CUDA 运行时所支持。
但是我这里不需要共享CUDA张量,就把他变更为cpu变量就行,有共享CUDA变量需求的可以去看看文档改变一下使用的多进程的方法。