我需要为一个项目测量神经网络的推理时间。我希望我的结果能与学术论文中测量此类时间的标准做法相一致。
我已经了解到,在开始计时之前,我们需要通过几次推理来预热GPU,并且我需要使用torch提供的计时功能(而不是Python的time.time())。
我的问题如下:
- 计时时使用批量大小为1是标准做法,还是应该使用该硬件的最佳批量大小?
- 我只是计时神经网络的推理,还是也计时将数据移动到GPU以及推理前的 数据转换?
- 为了获得一个好的平均推理时间,计时多少次迭代是合理的?
任何建议都将不胜感激。谢谢。
回答:
-
如果你关心推理时间,批量大小应该首先被优化。不一样的操作在神经网络中对批量大小的变化会有不同的影响(由于并行化可能没有变化,或者如果所有内核都在忙碌则可能线性变化)。如果你需要在模型间进行比较,我建议针对每个模型进行优化。如果你不想这样做,那么我建议使用训练时的批量大小。我认为在生产环境中,除非内存不够用,否则不太可能使用批量大小为1的情况。
-
你应该同时计时两者。如果你在比较模型,数据加载和转换不应该影响你的决策,但在生产环境中,这确实会产生很大影响。因此,报告这两个数字,在某些情况下,扩展数据加载或模型可能比另一个更容易。
-
我建议大约100次。这只是一个经验法则。你希望你的数字具有统计学意义。你还可以报告
std
来补充平均值,或者甚至绘制分布图(百分位数或直方图等)。
你还可以比较使用half
浮点类型的数据和模型权重时,性能损失与推理时间增益之间的关系。