使用 torch.multiprocessing.spawn 时如何修复“无法 pickle '_thread.lock' 对象”错误

and*_*rea 5 python deep-learning torch python-multiprocessing

我正在具有 2 个 Tesla M60 GPU 的 Linux 机器上训练一些 PyTorch 模型,并使用此示例使用数据并行化在两个 GPU 之间分割训练https://towardsdatascience.com/how-to-scale-training-on-multiple -GPU-dae1041f49d2

然而,当代码到达调用 torch.multiprocessing.spawn 函数时,它会引发

类型错误:无法腌制“_thread.lock”对象

我知道最好的做法是发布一个小的可重现的示例,但是代码库非常大,并且我无法在足够小的模型上重现此错误以在此处发布。python 错误回溯也没有多大帮助,因为它只是引用多处理库的内部结构。我知道如果没有代码示例,这听起来可能有点太笼统了,但我只是想知道是否有人在 Linux 机器上使用 PyTorch 进行多处理时遇到了同样的错误,如果是这样,需要注意哪些事项来尝试和修理它。代码在单个 GPU 上运行得非常好,因此事实证明很难调试。

如果有帮助,我正在使用 python 3.8.11 和 torch 1.9.0,CUDA 版本 11.1