静态图很快。动态图很慢。是否有任何特定的基准证明这一点?

时间:2017-09-20 02:18:50

标签: tensorflow torch tensorflow-gpu pytorch mxnet

我已经看到了关于tensorflowpytorch的一些基准。 Tensorflow可能更快,但似乎不是更快,即使有时更慢。

是否有关于静态图和动态图专门测试的基准测试,证明静态图比动态图快得多?

2 个答案:

答案 0 :(得分:5)

更确切地说,速度优势来自“图形重写的延迟执行”。

它通常与显式图框架(Theano / TF)相关联,但是如果有足够的工程设计,您可以将它添加到执行模型,如numpy / PyTorch,它们没有显式图形。请参阅Bohrium获取example黑客numpy进行重写。

请注意,此功能的存在使得框架对原型设计不太友好,因此如果将其添加到PyTorch,您将遇到人们在TensorFlow中抱怨的相同问题

  1. 延迟执行意味着可以在以后触发异常,而不是在您输入有问题的行
  2. 时触发
  3. 重写意味着现在可以在您未创建的节点中抛出错误,从而提供无法提供信息的错误消息
  4. 就性能而言,TensorFlow中的toy benchmark显示当你打开图表重写时加速5倍。

    我精心设计了一个内存带宽瓶颈的例子,所以图形重写(cwise fusion)是一个明智的选择,它会在那里提供显着的速度提升。对于生产LSTM模型,Google在启动图优化(通过XLA)时报告了1.8加速

答案 1 :(得分:1)

静态图允许几种类型的优化,这取决于图形的类型和您运行的环境。

静态图优化的简单示例是重用现有变量内存的选项,因此节省了昂贵的内存分配(有关使用MXNet的更多详细信息,请参阅此处:https://mxnet.incubator.apache.org/architecture/note_memory.html)。

另一个简单的例子是能够将多个运算符合并为一个运算符,尤其是在GPU或其他特定的硬件优化环境中,这些环境允许编译"使用硬件加速选项的代码。在这种情况下,考虑在"编译"时间和执行时间的加快,通常是深度学习培训的明智之举。当你在许多epocha上运行大量数据的训练时,这种权衡是没有意义的,因为执行时间比额外的编译时间(秒或分钟)长得多(小时和天)。

但最强大的是允许并行和分布式处理。如果您有多个GPU或实例来加速您的训练,那么能够实现线性比例对于您可以扩展模型以获得更多数据进行训练,使用更多层和参数以及传递更多时期至关重要。拥有静态图表可以让深度学习框架更有效地优化资源的执行。请参阅此处了解MXNet对多个GPU实例的支持:http://gluon.mxnet.io/chapter07_distributed-learning/training-with-multiple-machines.html