神经网络推理时间测量标准

我需要为一个项目测量神经网络的推理时间。我希望我的结果能与学术论文中测量此类时间的标准做法相一致。

我已经了解到,在开始计时之前,我们需要通过几次推理来预热GPU,并且我需要使用torch提供的计时功能(而不是Python的time.time())。

我的问题如下:

  • 计时时使用批量大小为1是标准做法,还是应该使用该硬件的最佳批量大小?
  • 我只是计时神经网络的推理,还是也计时将数据移动到GPU以及推理前的 数据转换?
  • 为了获得一个好的平均推理时间,计时多少次迭代是合理的?

任何建议都将不胜感激。谢谢。


回答:

  1. 如果你关心推理时间,批量大小应该首先被优化。不一样的操作在神经网络中对批量大小的变化会有不同的影响(由于并行化可能没有变化,或者如果所有内核都在忙碌则可能线性变化)。如果你需要在模型间进行比较,我建议针对每个模型进行优化。如果你不想这样做,那么我建议使用训练时的批量大小。我认为在生产环境中,除非内存不够用,否则不太可能使用批量大小为1的情况。

  2. 你应该同时计时两者。如果你在比较模型,数据加载和转换不应该影响你的决策,但在生产环境中,这确实会产生很大影响。因此,报告这两个数字,在某些情况下,扩展数据加载或模型可能比另一个更容易。

  3. 我建议大约100次。这只是一个经验法则。你希望你的数字具有统计学意义。你还可以报告std来补充平均值,或者甚至绘制分布图(百分位数或直方图等)。

你还可以比较使用half浮点类型的数据和模型权重时,性能损失与推理时间增益之间的关系。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注