PyTorch 中神经网络推理时间的波动



我有一个神经网络,我想通过在CPU上运行它来测试它的推理时间。尽可能准确地测量时间很重要。

我使用以下代码来获取网络的推理时间:

with torch.no_grad():
for image, _ in testloader:
start = time.time()
net(image)
total_time = time.time() - start

问题是,即使我通过网络传递相同的图像(尽管在这种情况下"图像"实际上是一批图像(并多次这样做,推理时间也会随着最小和最大时间之间的差异而波动达到 30 毫秒甚至更高。

此外,在我运行测试之前,我已经确保操作系统会尽可能少地干扰该过程 - 关闭所有应用程序。

我想了解这种波动究竟来自哪里。在我的理解中,如果相同的图像通过网络传递,无论我进行多少次测试(至少在理论上(,都应该花费相同的时间来对其进行分类。

那么是什么导致了这些波动呢?有没有办法消除它们?

如果运行标准火炬模型,Torch 会创建执行图并执行一些缓存;这使得首次运行比其他运行更长。我还注意到在某些情况下,迭代过程中 gc 行为的微小差异。

您可以通过将模型转换为TorchScript模型来(部分(避免这些问题。

此外,您应该检查数据加载器并修复任何随机性。

最新更新