2016-12-26 42 views
6

システム上でNvidia GeForce GTX 1080 GPUを効率的に使用するためにテンソルフローを作成できません。私は自分のコードを以下に示す非常に単純なバージョンに減らしました。私はGPUを使用するsession.run()操作をループしているだけです。データは一度だけフェッチされ、ループ内で再利用されるため、このコードはGPUのみを使用する必要があります。テンソルフロー実行時の揮発性GPUの使用率が低い

input_training_data=self.val_data[batch_size, :] input_training_label=self.val_label[batch_size, :] feed_dict = self.get_feed_dict(input_training_data, input_training_label) for i in range(1000): acc = sess.run(cost, feed_dict)

は、私は32に9から12パーセントに最大GPUの使用量は増加するが利用滞在をBATCH_SIZEを増やすようBATCH_SIZE = 16のために、私は、8%前後で、主に着実にGPUの使用状況を取得することに気づきましたほとんど0%であり、时々それは15%-25%にジャンプし、すぐに0%に戻る。このパターンは、より大きなbatch_sizeで継続しますが、基本的に16より大きいバッチサイズは最大使用率を増加させますが、使用率はほとんど0のままであり、時折上昇するだけです。私はここで何が欠けていますか?

+0

各操作の正確な時刻を得るためにプロファイリングツールを適用することができます。[here](http://stackoverflow.com/documentation/tensorflow/3850/)個々の操作の実行時間を測定する)。なぜGPUの使用率が低いのかを理解するのに役立つはずで、質問を詳細で更新することができます。 –

+1

CPUに遅い演算が実行され、GPUが処理を待つか、計算が小さすぎるため、データ転送の転送がGPUに追いつかないというボトルネックがあります。 [ここ](https://github.com/tensorflow/tensorflow/issues/5722#issuecomment-266297116)のようなデータ転送を最適化するためのいくつかのトリックがあります。 –

答えて

2

私は同じ問題を抱えています。私の問題だった:私の計算は、部分的にGPUとCPU上で実行された(非常に低いGPUの使用率につながる両方のデバイス間の通信の多くがあった)、私は別のスレッドで読んだ :

  1. ドン「Tは、(CPUのみで計算しなければならない)のfloat64データ型で問題がありました
  2. (代わりにTensorvariableを使用)ループでdata_dictornariesを使う - >プロファイラはによって提案された使用のfloat32データ型(可能であれば)
  3. を使用しますCPU上で何かが明示的に実行されているかどうかを確認するためにOlivier Moindrotその後、ちなみにGPU
  4. にあなたのコードに関するヒントを

をすべてのものを持参しよう: あなたのセッション(デフォルトのグラフ)が可能にOutOfMemory例外まで、各反復を成長する... - >私はすべてのXセッションを閉じます - デフォルトグラフをリセットしている間に...