我有一个神经网络,我想通过在CPU上运行来测试其推理时间。重要的是要尽可能准确地测量时间。
我使用以下代码来获取网络的推理时间:
with torch.no_grad():
for image, _ in testloader:
start = time.time()
net(image)
total_time = time.time() - start
问题是,即使我通过网络传递相同的图像(尽管在这种情况下,“图像”实际上是一批图像)并且重复执行多次,但推理时间也会随着最小和最大时间达到30毫秒甚至更长。
另外,在运行测试之前,我已确保操作系统尽可能减少对进程的干扰-关闭所有应用程序。
我想了解这种波动的确切来源。据我了解,如果同一图像通过网络传递,则无论我进行了多少次测试(至少从理论上来讲),都应该花费相同的时间对其进行分类。
那是什么原因导致这些波动的呢?有办法消除它们吗?
答案 0 :(得分:0)
如果您运行标准焊炬模型,则焊炬将创建执行图并执行一些缓存;这使得首次运行的时间比其他运行时间更长。我还注意到在某些情况下迭代期间gc行为的细微差别。
通过将模型转换为TorchScript模型,可以(部分)避免这些问题。
此外,您还应该检查数据加载器并修复任何随机性。