如何从 pytorch 模型并行化模型预测?

Posted

技术标签:

【中文标题】如何从 pytorch 模型并行化模型预测?【英文标题】:How to parallelize model prediction from a pytorch model? 【发布时间】:2020-03-08 11:19:50 【问题描述】:

我有一个 PyTorch 实例分割模型,可以一一预测图像的掩码。有什么办法可以并行化这个任务,以便它可以更快地完成。我曾尝试使用多处理pool.apply_async() 来调用执行预测并传递所需参数的方法,但它会引发分段错误。任何帮助深表感谢。谢谢。

【问题讨论】:

【参考方案1】:

一般来说,您应该能够使用torch.stack 将多个图像堆叠在一起,然后将其提供给您的模型。不过,如果没有看到你的模型,我不能肯定地说。 (即,如果您的模型是为一次显式处理一张图像而构建的,则这将不起作用)

model = ... # Load your model

input1 = torch.randn(3, 32, 32)  # An RGB input image
input2 = torch.randn(3, 32, 32)  # An RGB input image 

model_input = torch.stack((input1, input2))
print(model_input.shape)         # (2, 3, 32, 32)

result = model(model_input)
print(result.shape)              # (2, 1, 32, 32) 2 output masks, one for each image

如果您自己训练过模型,这看起来很熟悉,因为它本质上是我们在训练期间向网络提供批量图像的方式。

您可以将两个以上堆叠在一起,这通常会受到您可用的 GPU 内存量的限制。

【讨论】:

以上是关于如何从 pytorch 模型并行化模型预测?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 python 多线程并行化来自另一个模块的函数而不进行酸洗?

使用 doParallel 在 R 中并行化 keras 模型

joblib保存模型和joblib的并行化处理和tqdm

如何使用分布式 Dask 和预训练的 Keras 模型进行模型预测?

深度学习TensorFlow如何使用多GPU并行模式?

神经网络的通用和可扩展并行化