平台:windows 10和colab(可在两个平台上复制)
版本:tensorflow 2.4.1、pytorch 1.8.1、Python3.8(这个问题同时发生在cpu和gpu上)
当训练少量批次(例如,训练30个批次时,注意相似但略有不同的比率仍然适用于较小数量的批次,如单个批次、具有更多层/参数的不同模型和/或不同的批次大小),
通过低水平梯度磁带训练,tensorflow比pytorch上的等效模型/数据慢9倍
使用低水平梯度磁带+@tf.function train step,tensorflow比pytorch上的等效模型/数据慢18倍
使用high-level fit(),tensorflow比pytorch上的等效模型/数据慢19倍
对于高级别的train\u on \u batch(),tensorflow比pytorch上的等效模型/数据慢22倍
一个可复制的代码示例可以在这里找到,它显示了一个简单的模型和生成的随机数据,使用上面讨论的所有函数/api进行训练:https://colab.research.google.com/drive/1vhylez79etkskk0iwiqhkt7og8nbu9uu?usp=sharing 上面的代码是从官方教程中部分修改的https://www.tensorflow.org/guide/keras/writing_a_training_loop_from_scratch
部分是我自己写的。
在深度强化学习和一些深度学习特例中,通常采用单批次或少量批次的训练。
在我使用pytorch 1.7.1和tensorflow 2.4.1的本地windows10机器上也观察到了这种性能差异。当训练深度q网络(一种深度强化学习,每次需要训练1个批次)时,在批次上使用tensorflow train\u会导致训练相同数量的片段的时间延长20倍以上(有点像强化学习版的epochs)。
有人知道为什么吗?有没有一种方法可以像pytorch一样快速地编写代码?
在不同的框架之间存在差距是合理的,但是9-22倍似乎相当大,特别是对于可以说是最流行的两个框架。
同样奇怪的是,train \u on \u batch()(一个显然是为训练单个批处理而设计的api)可能是最慢的。同样奇怪的是,设计用来加速的@tf.function实际上会减慢训练速度。
任何帮助和建议都太好了!谢谢。
另外:这类问题有资格发布在github上吗?
暂无答案!
目前还没有任何答案,快来回答吧!