2017-09-22 13 views
2

マルチGPUトレーニング用のTensorflowの新しいデータセットAPI(TFRecordsフォーマット)を使用すると、1つのGPU(1対4テスラ)で実行するよりもかなり遅くK80)。マルチGPUトレーニングでTensorFlowのデータセットAPIを使用する

出力を見ると、GPUを4つ使用するとgpu利用率は約15%になりますが、1つのGPUでは約45%になります。

ディスクからデータをロードすると(tfrecords-format)訓練の速度にボトルネックが発生しますか?通常のfeed-dictsを使用すると、データセット全体がメモリにロードされるのは、データセットAPIを使用する場合よりも大幅に高速です。

答えて

0

あなたのネットワークがで絞られるようです:あなたはTFRecordsをオフに読んで、あなたのデータセットを開始している場合は、あなたの最後の段落 に述べたように、それはディスクから読み出され、ディスクから

  1. IO;代わりに、それらをリスト/辞書に読み込んで、範囲のシーケンスから開始することができます。例えば。

tf.data.Dataset()\ .range(your_data_size)\ .prefetch(20)\ .shuffle(buffer_size=20)\ .map(lambda i: your_loaded_list[i], num_parallel_calls=8)

  • シングルGPU使用率が45%である、あなたの2番目の段落で述べたように、プリ/ポストプロセッシングヘビー。すでにデータをメモリにあらかじめロードしていたのであれば、ネットワークは「主な」計算本体の外で努力していることを示唆しています。
  • まず、上記のようなマップ呼び出しでマルチスレッドを使用しているかどうかを確認することができます。いくつかのtf.summary操作をトリミングすることで、帯域幅を抑制して後でディスクに書き込む不要なデータをたくさんフィードバックする可能性があります。

    これが役に立ちます。

    関連する問題