非常に大きな反復ネットワーク(2048x5など)を実行する予定です。テンソルフローで1つのGPUで1つのレイヤーを定義することは可能ですか?最高の効率を達成するためにモデルをどのように実装するべきですか?私は、GPU間またはGPU-CPU間のGPU通信のオーバーヘッドがあることを理解しています。テンソルフローで複数のGPUにまたがってネットワークを分割することはできますか?
答えて
TensorFlowでは、大規模なモデルを複数のGPUに分割することは可能ですが、最適な方法で行うことは難しい研究課題です。合格し、自分のオプティマイザを構築するとき
with tf.device("/gpu:0"):
# Define first layer.
with tf.device("/gpu:1"):
# Define second layer.
# Define other layers, etc.
:with tf.device(...):
ブロック内のコードの
ラップ大規模な連続した領域、異なるGPUの名前を付ける:一般的には、次の操作を実行する必要があります。
optimizer.minimize()
メソッドにオプションの引数colocate_gradients_with_ops=True
:loss = ... optimizer = tf.train.AdaGradOptimizer(0.01) train_op = optimizer.minimize(loss, colocate_gradients_with_ops=True)
あなたがトンが必要な場合があります(オプション)。
config = tf.ConfigProto(allow_soft_placement=True) sess = tf.Session(config=config)
私は2つのGPUでネットワークを運用していますが、順方向と逆方向の両方の計算が2つのGPUに分散されています。しかし、数時間のトレーニングの後、私はGPUの使用率が本当に低いことがわかります。私は、キュー占有率(キュー内のバッチ数)が0であることがわかります。これは、キューが十分に速くいっぱいになっていないことを意味します。私はスレッドを使用してデータをキューに送ります。私は明示的にキューを定義する必要があります、CPUのエンキューとデキュー操作? –
はい、モデルトレーニングの全体的なパフォーマンスを向上させるために、CPUへの入力パイプラインを固定しています(そうしないと、CPUで実行できる入力パイプラインの部分から干渉を受けます)。 – mrry
「入力パイプラインをCPUに固定する」と、少し詳しくお聞かせください。 – herve
- 1. Spray.ioルートを複数の「コントローラ」に分割できますか?
- 2. クラスを複数のファイルに分割するだけで継承を使うことはできますか?
- 3. 複数のファイルにまたがるCasperJSテストを分割できません
- 4. Azure ADのユーザーまたはグループに複数のロールを割り当てることはできますか?
- 5. 一連のパンダコマンドを複数の行に分割することはできますか?
- 6. Greasemonkeyのユーザースクリプトを複数のファイルに分割することはできますか?
- 7. XMLファイル内の複数の行にまたがる文字列を分割することはできますか?もしそうなら、どうですか?
- 8. gzipedコンテンツエンコーディングを複数のHTTPチャンクに分割することはできますか?
- 9. CPU/GPU間のテンソルフロー
- 10. GPUでopenclを使用してデバイスメモリより大きいバッファを割り当てることができます
- 11. XSLTを使用してXMLを複数のページに分割できますか?
- 12. レコードに複数の部分データを含めることはできますか?
- 13. ファイルを複数の部分に分割してサーバーに送信すると、そのファイルをどのように扱うことができますか?
- 14. SWIGモジュールを分割してコンパイルすることはできますが、リンクするときに再結合することはできますか?
- 15. 複数のGPUでopenCLを使用することについての新しいアイデアはありますか?
- 16. Fancybox onComplete - 分割した位置に配置することができます
- 17. md5を分割して複数のコア/スレッドを実行できますか?
- 18. アコーディオンパネルをFlexで複数のファイルに分割しますか?
- 19. ベースラベルの軸ラベルを2行に分割することはできますか?
- 20. 複数の関数をDjangoの1つのURLに割り当てることはできますか?
- 21. 複数の文字を使って分割する方法は?
- 22. ストリーミング分析ジョブで複数のクエリを持つことはできますか?
- 23. Pythonの1つの文で文字列を分割して割り当てることはできますか?
- 24. Objective-Cコードを複数のプラットフォームにまたがってコンパイルできますか?
- 25. ネットワークにチャットルームを作ることはできますか?
- 26. テンソルフローを最大化するマルチGPUパフォーマンス
- 27. emacs -nwで複数のファイルを縦に分割して開きます
- 28. テンソルフローでGraphdefを2GB以下にすることはできません
- 29. 複数のテーブルにわたって一意(インデックス)制約を作成することはできますか?
- 30. JavaScript分割とjQuery .val()をチェーンすることはできますか?
[ここ](https://www.tensorflow.org:あなたの
tf.Session
を作成するときにモデル内の操作のいずれかをGPU上で実行することができない場合は、O、tf.ConfigProto
に「ソフトな配置を」有効にします/versions/r0.7/how_tos/using_gpu/index.html#using_multiple_gpus)が指示です。 [here](https://www.tensorflow.org/versions/r0.7/tutorials/deep_cnn/index.html)がその一例です。データ並列は、機能並列よりはるかに簡単です。 – fluency03私はtf.device()の使用法を理解しています。しかし、別のGPUでレイヤーを定義した後も、最初のGPUにグラデーションが保存されています。さまざまなGPUで勾配計算を分割する具体的な例を挙げることはできますか? –
モデルをビルドするときに 'colocate_gradients_with_ops = True'を' optimizer.minimize() 'メソッドに渡すこともできます。 – mrry