Python 原生自带的多进程库不支持在子进程中调用 CUDA 进行加速运算。因此,本文介绍了使用 Pytorch 中的 multiprocessing 库实现在子进程中调用 CUDA 的方法。
在使用 Python 原生自带的 multiprocessing
库中,若在子进程中调用 CUDA,则会报错:
RuntimeError: Cannot re-initialize CUDA in forked subprocess. To use CUDA with multiprocessing, you must use the ‘spawn’ start method
如果根据提示信息,直接使用
torch.multiprocessing.set_start_method("spawn")
则会报错:
RuntimeError(‘context has already been set’)
这是因为想要实现在多进程中调用 CUDA,需要先新建一个 context
对象,并在实际使用中用这个 context
对象替换 torch.multiprocessing
,例如:
context = torch.multiprocessing.get_context("spawn")
...
process = context.Process(target=..., args=...)
此时,在子进程中就可以放心地调用 CUDA 了。