2017-01-10 6 views
2

フレンド! 複数のGPUで処理することについて質問があります。 私は4つのgpusを使い、以下のように3つの方法で単純なA^n + B^nの例を試しました。複数のgpuを使用したTensorflow処理パフォーマンス

  1. シングルGPU

    with tf.device('/gpu:0'): 
        ....tf.matpow codes... 
    
  2. マルチGPU

    with tf.device('/gpu:0'): 
        ....tf.matpow codes... 
    with tf.device('/gpu:1'): 
        ....tf.matpow codes... 
    
  3. 指定されない特定のGPU(私は多分使用GPUのすべてを考える)

    ....just tf.matpow codes... 
    

これを試してみると、結果は理解できませんでした。 結果であった 1つのGPU:6.xの秒 2.複数のGPU(2つのGPU):2.xの秒 3.指定されない特定のGPU(多分4のGPU):4.xの秒

Iなぜ#2が#3よりも速いのか理解できない。 誰でも私を助けることができますか?

ありがとうございました。

+0

#3は、GPUを使用しています。また、GPUでの最初のカーネル起動は、GPUあたり数秒を追加することができます。タイミングを開始する前に、それらのopsを実行してGPUを予熱する必要があります。http://stackoverflow.com/questions/40410210/tensorflow-2 -gpu-slower-then-single-gpu/40430717#40430717 –

+0

PTXASのコンピューティング操作のコンパイルは、初期化時に各GPUデバイスに対して実行されます。 –

答えて

2

Tensorflowスケジューラは1つのGPUでうまく動作しますが、複数のGPUでの計算の配置を最適化するのにはあまり適していません。 (現在は取り組んでいますが)詳しいことがなければ、何が起こっているのか正確に知ることは難しいです。より良い画像を得るために、計算がスケジューラによって実際に配置されている場所を記録することができます。あなたはtf.Sessionを作成するときにlog_device_placementフラグを設定することによってこれを行うことができます。

# Creates a session with log_device_placement set to True. 
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True)) 
1

第三のサンプルコードでは(ないGPUが指定されなかった場合)TensorflowがあなたのGPUのすべてを使用していませんでした。デフォルトでは、Tensorflowが使用するGPU( "/ gpu:0")を見つけることができる場合、そのGPUに可能な限り多くの計算を割り当てます。 2番目のコードサンプルのように4つすべてを使用したいと思っていることを具体的に伝える必要があります。

Tensorflowのドキュメントから:

、あなたのシステムに複数のGPUを持っている場合は、最小のIDを持つGPUはデフォルトで選択されます。あなたが別のGPU上で実行したい場合は、明示的に優先順位を指定する必要があります:0:

with tf.device('/gpu:2'): 
    tf code here 
関連する問題