在我遇到的几个实例中,TF2通常表现出较差且类似错误的内存管理-在此处和此处进行简要说明。特别是对预测而言,最有效的喂养方法是model(x)
直接通过- 参见此处及其相关链接的讨论。
概括地说:model(x)
通过其它的作用__call__
方法(其从继承base_layer.Layer
),而predict()
,predict_classes()
等经由涉及专用回路功能_select_training_loop()
; 每种工具都利用了适合不同用例的不同数据预处理和后处理方法,并且model(x)
在2.1版中专门针对产生最快的小模型/小批量(可能是任意大小)性能(在2.0版中仍然最快)进行了设计。
从链接的讨论中引用TensorFlow开发人员:
您可以使用模型调用而不是模型预测来预测输出,即,model(x)
由于没有“转换为数据集”部分,并且直接调用cached ,因此调用会更快tf.function
。
注意 :在2.1,尤其是2.2中,这应该不是一个大问题- 但无论如何都要测试每种方法。我也意识到这并不能直接回答您关于时间高峰的问题;我怀疑这是关系到渴望缓存机制,但确定最可靠的方法是通过TF Profiler
,这是破2.1。
:关于尖峰的 增加 ,GPU可能的节流;您已完成约1000次迭代,请尝试10,000次-最终,应停止增加。正如您在评论中指出的那样,这不会发生model(x)
;之所以有意义,是因为它减少了一个GPU步骤(“转换为数据集”)。
:如果您遇到此问题,可以在这里与开发人员联系。大部分是我在那里唱歌