【问题标题】:Timing Neural Network Inference Standards时序神经网络推理标准
【发布时间】:2021-09-17 11:41:23
【问题描述】:
我需要为一个项目测量神经网络推理时间。我希望我的结果与学术论文中衡量这一点的标准做法保持一致。
我设法弄清楚的是,我们首先要在计时之前通过一些推断来预热 GPU,并且我需要使用 torch 提供的计时功能(而不是 Python 的 time.time())。
我的问题如下:
- 标准的时间是批量大小为 1,还是该硬件的最佳批量大小?
- 我是只对神经网络推理进行计时,还是对将数据移动到 GPU 以及推理之前的数据转换进行计时?
- 多少次迭代才是合理的时间以获得良好的平均推理时间?
任何建议将不胜感激。谢谢。
【问题讨论】:
标签:
machine-learning
deep-learning
neural-network
pytorch
【解决方案1】:
-
如果您关心推理时间,那么首先应该优化批量大小。并非 NN 中的所有操作都会以相同的方式受到批量大小变化的影响(由于并行化,您可能不会发生变化,或者如果所有内核都忙,则线性变化)。如果您需要在模型之间进行比较,我会针对每个模型进行优化。如果您不想这样做,那么我会使用训练时批量大小。我认为在生产中你不太可能有 1 的批量大小,除非它不适合内存。
-
你应该同时计时。如果您要比较模型,数据加载和转换不应影响您的决定,但在生产环境中会很重要。所以报告这两个数字,在某些情况下,扩大数据加载或模型可能比另一个更容易。
-
我会说大约 100。这只是一个经验法则。您希望您的数字具有统计意义。除了平均值之外,您还可以报告std,甚至可以绘制分布图(百分位数或直方图等)
当您的数据和模型权重使用 half 浮点类型时,您还可以比较性能损失与推理时间增益。