2017-07-31 13 views
2

KerasとTensorpackのような他のTFラッパーのトレーニングパフォーマンスに関する質問がありました。 a Q&A session中にTFラッパー:KerasとTensorpackのパフォーマンス

は、Kerasの作者はパッケージが無いパフォーマンスコストが付属して次のように述べている。モデルがあるので、

Kerasなしパフォーマンスコストで、TensorFlowでモデルを構築し、訓練する単純、迅速な方法を提供します同じTensorFlowエンジンによって実行されています。一方

しかし、それも小さなCNNで、2倍高速KerasよりだとTensorpack github主張:

Tensorpackトレーナーはほとんど常に速くfeed_dictベースのラッパーです。小さなCNNの例でも、トレーニングは同等のKerasコードより2倍速く実行されます。

だから私は次のように思っています:誰が正しいのでしょうか? トレーニングでは、2という係数が私にとって非常に重要です。

+1

あなた自身で試しましたか? –

+0

はい、常にKerasを使用しています(ただし、Tensorpackは使用していません)。私は数百GBのデータを持つ4Dデータセットと11x13x18x50の1つの「イメージ」を持っているので、パフォーマンスについて本当に心配しています。現在、私は単一ノードでTFバックエンドと4 GTX1080を使用しているKerasを使用しています(マルチノードは現在はうまくスケールされていません)。 – 0vbb

答えて

0

最初の回答は間違っていたようですが、それは受け入れられた回答なので削除できません。 @ppwwyyxx's answerを参照してください。

+0

PRにリンクしてくれてありがとう!この問題が分かっていることを知ってよかったです。だから私が得る限り、numpy配列を持つPythonオーバーヘッドが問題です。理想的には、Kerasは各トレーニングステップでpy - > Cの代わりにC++で実行できるネイティブTFテンソル入力をサポートします。 上記のように、私のデータ入力は11x13x18x50のビンで数百GBで構成されていますが、現在はデータフォーマットとしてhdf5を使用しています。 TFRecordsがより良い性能をもたらすかどうかは確かです。 – 0vbb

+1

@ 0vbb私はTFRecordsの経験はあまりありませんが、大きなインプットではそのメリットがより目に見えるという印象を受けています。しかし、私はあなたが有意な利益を得るかどうかを事前に知る信頼できる方法はないと思います。 – jdehesa

+0

あなたは間違った点を見ています!パフォーマンスの違いは、賢明で効率的な並列プリフェッチとfeed_dictの違いです。テンソルパックでは、すべてのCPUを簡単に使用してデータを準備することができます。これにより、各更新ステップで訓練データをほとんど待ち時間なく利用できるようになります。だからこの答えは間違っていて間違いです。 – Patwie

6

私はtensorpackの著者です。 主要なパフォーマンス改善の理由は、ドキュメントのInput Pipelineページに要約されています。http://tensorpack.readthedocs.io/en/latest/tutorial/input-source.html これらの引数は、単一のGPUトレーニングケース用です。マルチGPUトレーニングでは、Googleのベンチマークコードに合わせてパフォーマンスをさらに向上させています。

@jdehesaの回答は正しくありません。データを読み込むためにTFRecordを使用することはありません(そうすることはできますが、大きな利点はありません)。あなたは純粋なPythonですべてを読むことができ、この速度を得ることができます。

また、2倍のスピードアップは少し古くなっているかもしれませんが、私はKerasがフレームワークのオーバーヘッドを減らすことで改良を行っていることを知っています。