PyTorch:如何批量进行推理(并行推理)

Posted

技术标签:

【中文标题】PyTorch:如何批量进行推理(并行推理)【英文标题】:PyTorch: How to do inference in batches (inference in parallel) 【发布时间】:2020-08-26 18:31:02 【问题描述】:

如何在 PyTorch 中进行批量推理?如何并行进行推理以加快这部分代码的速度。

我已经开始使用标准的推理方式:

with torch.no_grad():
    for inputs, labels in dataloader['predict']:
        inputs = inputs.to(device)
        output = model(inputs)
        output = output.to(device)

我研究过,唯一提到并行推理(在同一台机器上)似乎是使用 Dask 库:https://examples.dask.org/machine-learning/torch-prediction.html

目前正在尝试了解该库并创建一个工作示例。同时你知道更好的方法吗?

【问题讨论】:

如果inputs 是一批输入,那么您的代码会分批进行推理。如果您认为它很慢,请首先检查 GPU 是否被充分利用(内存和利用率)。让我们知道。 【参考方案1】:

在 pytorch 中,输入张量总是在第一个维度中具有批处理维度。因此按批次进行推理是默认行为,您只需将批次维度增加到大于 1。

例如,如果您的单个输入是[1, 1],则其输入张量为[[1, 1], ],形状为(1, 2)。如果您有两个输入 [1, 1][2, 2],则将输入张量生成为 [[1, 1], [2, 2], ],形状为 (2, 2)。这通常在批处理生成器函数中完成,例如您的dataloader

【讨论】:

以上是关于PyTorch:如何批量进行推理(并行推理)的主要内容,如果未能解决你的问题,请参考以下文章

推理实践丨如何使用MindStudio进行Pytorch模型离线推理

如何在 Tensorflow 2.0 + Keras 中进行并行 GPU 推理?

如何使用 Tensorflow 进行批量标准化推理?

在 PyTorch 中加载迁移学习模型进行推理的正确方法是啥?

从零教你使用MindStudio进行Pytorch离线推理全流程

保存和加载 Pytorch 模型检查点以进行推理不起作用