使用uwsgi部署pytorch模型遇到错误:RuntimeError: Cannot re-initialize CUDA in forked subprocess.

使用uwsgi部署pytorch模型遇到如下错误:

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

这个错误在model.cuda() model.to(device) my_data.cuda() my_data.to(device)中出现。
1)经过排查,发现原因是在某个postfork之前的函数先调用了cuda。
在我的例子中,发现是因为在某处函数使用了默认参数:device=torch.cuda.is_available(),把这个去掉就可以了。

git讨论区推荐的解决方案,
import torch
torch.multiprocessing.set_start_method('spawn')

没有作用。

2)使用lazy-apps = true可能可以解决这个问题。
参考:
https://uwsgi-docs.readthedocs.io/en/latest/articles/TheArtOfGracefulReloading.html

发表评论