相同图像的 Tensorflow 预测速度增加
Tensorflow prediction speed increases with same image
我将 tensorflow-gpu 2.5.0 用于对象检测模型。在模型中,我使用 model(x)
调用预测函数。当我 运行 批量测试时,我发现对同一图像重复调用预测会导致更快的推理。这为我的模型提供了不准确的推理时间估计。速度提升背后的原因是什么?
下面的示例是对三张不同图像进行重复推理的推理时间结果。它在格式为 <image number> - <inference time>
的循环中执行。模型看到图像 1 和图像 2 一次后,推理速度变得更快。当我添加新图像 3 时,模型第一次花费更长的时间进行预测,随后也变得更快。
1 - 3.5671939849853516 seconds
2 - 1.1461808681488037 seconds
1 - 0.07942032814025879 seconds
2 - 0.08655834197998047 seconds
1 - 0.0813601016998291 seconds
2 - 0.08380460739135742 seconds
1 - 0.07466459274291992 seconds
2 - 0.08526778221130371 seconds
3 - 1.0617506504058838 seconds
3 - 0.07965445518493652 seconds
调用 model(x)
与调用任何用输入 x
修饰的函数 @tf.function
相同。
我在 3 部分文章中介绍了这种情况,对您的范围最有用的是 part 2。
发生的事情是,在第一次调用某种输入类型时,您正在定义所谓的“ConcreteFunction”——即 python 代码的执行 + 跟踪 + 签名调用 + 创建tf.Graph
对象和该对象的后续缓存。
这就是第一次调用这么慢的原因。
其他调用在后面,因为你只是在缓存映射中查找张量类型,你找到了正确的 tf.Graph 和 运行 使用已经创建的图的正向传递。
我将 tensorflow-gpu 2.5.0 用于对象检测模型。在模型中,我使用 model(x)
调用预测函数。当我 运行 批量测试时,我发现对同一图像重复调用预测会导致更快的推理。这为我的模型提供了不准确的推理时间估计。速度提升背后的原因是什么?
下面的示例是对三张不同图像进行重复推理的推理时间结果。它在格式为 <image number> - <inference time>
的循环中执行。模型看到图像 1 和图像 2 一次后,推理速度变得更快。当我添加新图像 3 时,模型第一次花费更长的时间进行预测,随后也变得更快。
1 - 3.5671939849853516 seconds
2 - 1.1461808681488037 seconds
1 - 0.07942032814025879 seconds
2 - 0.08655834197998047 seconds
1 - 0.0813601016998291 seconds
2 - 0.08380460739135742 seconds
1 - 0.07466459274291992 seconds
2 - 0.08526778221130371 seconds
3 - 1.0617506504058838 seconds
3 - 0.07965445518493652 seconds
调用 model(x)
与调用任何用输入 x
修饰的函数 @tf.function
相同。
我在 3 部分文章中介绍了这种情况,对您的范围最有用的是 part 2。
发生的事情是,在第一次调用某种输入类型时,您正在定义所谓的“ConcreteFunction”——即 python 代码的执行 + 跟踪 + 签名调用 + 创建tf.Graph
对象和该对象的后续缓存。
这就是第一次调用这么慢的原因。
其他调用在后面,因为你只是在缓存映射中查找张量类型,你找到了正确的 tf.Graph 和 运行 使用已经创建的图的正向传递。