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