トレーニングRNNがGPUを100%使用しないのはなぜですか?


8

RNNのトレーニングが通常、GPUの100%を使用しないのはなぜですか。

たとえば、Ubuntu 14.04.4 LTS x64上のMaxwell Titan XでこのRNNベンチマークを実行すると、GPU使用率は90%未満になります。

ここに画像の説明を入力してください

ベンチマークは次のコマンドを使用して起動されました:

python rnn.py -n 'fastlstm' -l 1024 -s 30 -b 128

ボトルネックを診断するにはどうすればよいですか?

回答:


5

Tensorflowを使用してモデルをトレーニングすると、これと同じ使用率が得られます。私の場合、理由はかなり明確です。サンプルのランダムなバッチを手動で選択し、各バッチの最適化を個別に呼び出しています。

つまり、データの各バッチはメインメモリにあり、モデルの残りの部分があるGPUメモリにコピーされます。次に、フォワード/バックの伝播と更新がgpuで実行され、実行は私のコードに戻され、そこで取得します。別のバッチとそれに最適化を呼び出します。

事前に準備されたTFレコードから並行してバッチ読み込みを行うようにTensorflowを設定するために数時間を費やす場合、これを行うためのより速い方法があります。

ケラスでテンソルフローを使用している場合と使用していない場合がありますが、私の経験では非常に類似した使用率が生成される傾向があるため、これらの相関関係から引き出す因果関係が合理的である可能性が高いことを示唆して、手足を出します。フレームワークが各バッチをメインメモリからGPUにロードする場合、GPU自体が処理できる非同期ロードの効率/複雑さを追加しないと、これ期待される結果になります。



それを監視しようと考えたことはありませんが、あなたは今私を好奇心をそそられています。
davidparks21

ケラでもいつも90%くらいは取れます。私はそのソースコードをチェックしたことがありませんが、そのようなフレームワークがバッチを並行してgpuにフィードすることを期待します(少なくとも、オプションでメモリを確保できる場合は、..なぜそれをすべきでないのでしょうか?)。
stmax '11年

1
KerasはTensorflowまたはTheanoのラッパーです。私はTensorflowでのみ経験があるため、その観点から言えば、非同期データ読み込みを有効にするために必要なプロセスでは、データをTensorflow固有のバイナリ形式に前処理する必要があります。Theanoにはこれと同等の方法があると思います。ほとんどのモデルは、おそらくバッチごとのメモリの読み込みから始まります(速度を最適化する前に動作させます)。また、Kerasの憲章は「シンプルに保つ」ことなので、効率を最大で10%低下させるだけの、より直接的/単純なアプローチを取ることは予期せぬことではありません。
davidparks21
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.