TensorFlowの日本語まとめ

TensorFlowの公式サイトに書かれている英文を英語ど素人が翻訳(日本語訳/和訳)します。 間違いがありましたら、優しく教えていただけますと幸いです。 内容を理解したら、使ってみたい。

6.マルチGPUカードを使用してモデルのトレーニング

 現代のワークステーションは、科学技術計算のための複数のGPUが含まれているでしょうTensorFlowは、複数のカード全体で同時にトレーニング動作を実行するには、この環境を活用することができます。
 
並行してモデルのトレーニング分散方式は、コーディネーショントレーニングプロセスを必要とします。以下のものについては、私たちは、データのサブセットのモデル学習の一つのコピーモデルレプリカと呼びます。
 
個々のモデルのレプリカモデルパラメータの古くなったコピーで訓練される可能性があるため、単純にモデルパラメータの非同期更新を採用すること最適下限のトレーニングのパフォーマンスにつながります逆に、完全に同期更新を採用することで最も遅いモデルのレプリカのように遅くなります。
 

スポンサーリンク

 

 

複数のGPUカードを搭載したワークステーションでは、それぞれのGPUが同じような速さを持っており、CIFAR-10モデル全体を実行するのに十分なメモリが含まれていますしたがって、私たちは、以下のように私たちトレーニングシステムを設計することを選びます
 
  • 各GPU上で個々のモデルのレプリカを配置します。
  • 更新モデルパラメータは、同期のすべてのGPUを待つことにより、データバッチの処理を終了します
 
ここでは、このモデルの図です。

f:id:TensorFlow:20160111220447p:plain

 

GPUは推論だけでなく、データユニークなバッチの勾配を計算することに注意してください。このセットアップでは、効果的なGPU間でのデータの大きなバッチを分割することが可能となります。

 
この設定は、すべてのGPUは、モデルパラメータを共有することが必要ですよく知られた事実は、GPUの間でデータを転送することは非常に遅いです。このような理由から、私たちは保存し、CPUのすべてのモデルパラメータを更新することを決定しました。(緑色のボックスを参照)。データの新しいバッチは、すべてのGPUによって処理されるときに、モデルパラメータの新たなセットは、GPUに転送されます。
 
GPUは、操作に同期されます。すべての勾配は、GPUから蓄積し、平均化されます。(緑色のボックスを参照)モデルパラメータは、勾配で更新されている、すべてのモデルのレプリカにわたって平均化されます。
 

デバイス上の変数と演算子を配置します

デバイス上での操作や変数を配置すると、いくつかの特別な抽象化が必要です

私たちが必要とする最初の抽象化は、単一モデルのレプリカの推論と勾配を計算するための機能です。コードでは、この抽象化を"タワー"という用語私たちは、各"タワー"のための2つの属性を設定する必要があります。
 
  • タワー内のすべての操作のためのユニークな名前。 tf.name_scope() スコープを付加することで、この一意の名前を提供します例えば、第1のタワー内のすべての操作がtower_0、例えば前に付加されていますtower_0/conv1/Conv2D

  • 好適なハードウェアデバイスは、タワー内の操作を実行します。tf.device()、これを指定します例えば、第1の塔内のすべての操作は、device('/gpu:0')内に存在するスコープは、彼らが最初のGPU上で実行する必要があることを示します。

 

すべての変数は、CPUに固定し、マルチGPUバージョンでそれらを共有するためにtf.get_variable()を介してアクセスされます。共有変数のハウツーを参照してください。
 

マルチGPUカードのモデルの起動トレーニング

お使いのマシンにインストールされ、いくつかのGPUカードを持っている場合は、より高速なcifar10_multi_gpu_train.pyスクリプトでモデルを訓練するためにそれらを使用することができますトレーニングスクリプトこのバージョンでは、複数のGPUカード全体のモデルを並列化します
 
python cifar10_multi_gpu_train.py --num_gpus=2
 
トレーニングスクリプトは、出力すべきです。
 
Filling queue with 20000 CIFAR images before starting to train. This will take a few minutes.
2015-11-04 11:45:45.927302: step 0, loss = 4.68 (2.0 examples/sec; 64.221 sec/batch)
2015-11-04 11:45:49.133065: step 10, loss = 4.66 (533.8 examples/sec; 0.240 sec/batch)
2015-11-04 11:45:51.397710: step 20, loss = 4.64 (597.4 examples/sec; 0.214 sec/batch)
2015-11-04 11:45:54.446850: step 30, loss = 4.62 (391.0 examples/sec; 0.327 sec/batch)
2015-11-04 11:45:57.152676: step 40, loss = 4.61 (430.2 examples/sec; 0.298 sec/batch)
2015-11-04 11:46:00.437717: step 50, loss = 4.59 (406.4 examples/sec; 0.315 sec/batch)
...
GPUカードの数デフォルト値に1を使用することに注意してください唯一の1GPUは、あなたのマシンで利用可能である場合に加えてすべての計算は、あなたがより多くを求める場合であってもその上に配置されます
 
演習:cifar10_train.pyのデフォルト設定では、128のバッチサイズに実行することです64バッチサイズ2GPU上でcifar10_multi_gpu_train.py実行してみてください、そして、トレーニング速度を比較します
 

次のステップ

あなたはCIFAR-10チュートリアルを完了しました。あなたが開発し、独自の画像分類システムのトレーニング、今興味があるならば、私たちはこのチュートリアルを分岐して、画像分類問題に対処するための部品を交換することをお勧めします。
 
演習:ストリートビューハウス番号(SVHN)データセットをダウンロードしてください入力データとしてSVHNCIFAR-10チュートリアルとスワップを分岐してください。予測性能を改善するために、ネットワークアーキテクチャを適応してみてください。