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
ボトルネックを診断するにはどうすればよいですか?
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
ボトルネックを診断するにはどうすればよいですか?
回答:
Tensorflowを使用してモデルをトレーニングすると、これと同じ使用率が得られます。私の場合、理由はかなり明確です。サンプルのランダムなバッチを手動で選択し、各バッチの最適化を個別に呼び出しています。
つまり、データの各バッチはメインメモリにあり、モデルの残りの部分があるGPUメモリにコピーされます。次に、フォワード/バックの伝播と更新がgpuで実行され、実行は私のコードに戻され、そこで取得します。別のバッチとそれに最適化を呼び出します。
事前に準備されたTFレコードから並行してバッチ読み込みを行うようにTensorflowを設定するために数時間を費やす場合、これを行うためのより速い方法があります。
ケラスでテンソルフローを使用している場合と使用していない場合がありますが、私の経験では非常に類似した使用率が生成される傾向があるため、これらの相関関係から引き出す因果関係が合理的である可能性が高いことを示唆して、手足を出します。フレームワークが各バッチをメインメモリからGPUにロードする場合、GPU自体が処理できる非同期ロードの効率/複雑さを追加しないと、これは期待される結果になります。