2017-07-31 67 views
2

我对Keras与其他TF包装(如Tensorpack)的培训性能有疑问。TF包装:Keras与Tensorpack的性能

a Q&A session,Keras的作者说,包装内附送的性能没有影响:

Keras能够构建一个简单,快捷的方式,并在TensorFlow火车模型,在性能没有影响,因为该机型仍然由相同的TensorFlow引擎运行。

在另一方面虽然,Tensorpack github声称它比Keras快2倍,即使一个小小的CNN:

Tensorpack教练几乎总是比基于feed_dict包装速度更快。即使在一个微小的CNN例子中,训练运行速度比同等Keras代码快两倍。

所以现在我想知道以下几点:谁是对的? 对于我来说,训练中两个因素是非常重要的。

+1

你自己试过吗? –

+0

是的,我一直在使用Keras(虽然从未使用过Tensorpack)。我只关心性能,因为我有4D数据集,数百GB,一个'图像'是11x13x18x50。目前,我在单个节点中使用Keras TF后端和4个GTX1080(现在多节点不能很好地扩展)。 – 0vbb

回答

0

我的初步答案显然是错误的,但我不能删除它,因为它是被接受的答案。见@ppwwyyxx's answer

+0

感谢您链接到PR!很高兴知道这个问题是已知的。所以就我所知,用numpy数组开销的Python是个问题。理想情况下,Keras支持原生TF张量输入,可以在C++中执行,而不是在每个训练步骤中使用py - > C。 如上所述,我的数据输入由数百个带有11x13x18x50分档的GB组成,目前我正在使用hdf5作为数据格式。不知道如果TFRecords会产生更好的性能。 – 0vbb

+1

@ 0vbb我自己对TFRecords没有多少经验,但我的印象是,他们的好处在更大的投入下更明显,所以我猜你的情况可能是一个很好的尝试。但是,我不认为如果你能获得显着的收益,事先就没有可靠的办法。 – jdehesa

+0

你们看着错误的一点!性能差异来自聪明,高效和并行预取vs feed_dict。在tensorpack中,您可以轻松使用所有CPU准备数据,以确保每个更新步骤都有训练数据可用,几乎没有延迟。所以这个答案肯定是错误的和误导的。 – Patwie

6

我是tensorpack的作者。 主要性能改进的原因在文档的输入管道页面中进行了总结:http://tensorpack.readthedocs.io/en/latest/tutorial/input-source.html 这些参数适用于单GPU训练案例。对于多GPU培训,我们有更多的性能改进来匹配Google的基准代码。

@jdehesa的回答是不正确的,我们从来没有使用TFRecord来读取数据(尽管它能够这样做,我没有看到太多优势)。你可以通过纯Python读取所有内容并获得这个速度。另外,2x加速可能有点过时,我知道Keras一直在减少框架开销方面进行了改进。