2017-07-28 20 views
1

私はTensorFlowを使用して、変数を宣言する場所を手動で制御できることを知っています(GPUのニューラルネットワークの半分、他のGPUの残りの部分など)。TensorFlowの自動デバイス配置はマルチGPUケースを処理しますか?

それは我々が手動で複数のGPU に変数を置くことができることを確認しているにもかかわらず、彼らは、そのような自動変数配置を使用して、これらの複数のGPUに自動的を置くことができますか? TensorFlowのドキュメントでは、自動デバイス配置がマルチGPUのケースを処理するかどうかを明示的には言及していないようです。

たとえば、では、TensorFlowバックエンドを使用してKerasモデルを構築するとします。モデルが大きすぎるためにモデルが最初のGPUのすべてに収まらない場合、TensorFlowは自動的に2番目のGPU(およびより多くのGPU)を使用してニューラルネットワークの変数を宣言しますか?

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

+2

いいえ、TensorFlowはgpuでできることすべてを実行しようとします:もし存在すれば0 –

+0

ありがとう。あなたはその質問に答えることができ、私はそれを最良の答えとして受け入れます。私はあなたが念頭に置いている例を持っているならば、 "整数値の演算を除いて"についてもっと詳しく知りたいと思う。 –

+0

私はまた、複数のGPUを使用した場合の潜在的なパフォーマンスの欠点を知ることに興味があります。このようなニューラルネットワークの分割のためにパフォーマンスが大幅に低下することを期待する必要がありますか?私には、フォワードパスの途中で1テンソルの出力を転送し、CNNの場合はトレーニング中の後方パスでこれをやり直す必要があるので、わからないと思った。 –

答えて

0

いいえ、あなたは、あなたのシステムに複数のGPUを持っている場合は、最小のIDを持つGPUはデフォルトで選択されますofficial doc

をrefを。あなたが別のGPU上で実行したい場合は、明示的に優先順位を指定する必要があります:あなたは、あなたのシステム内に複数のGPU、最低でGPUを持っている場合は

# Creates a graph. 
with tf.device('/gpu:2'): 
    a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a') 
    b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b') 
    c = tf.matmul(a, b) 
# Creates a session with log_device_placement set to True. 
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True)) 
# Runs the op. 
print(sess.run(c)) 
+0

私はすでにそれを読んでいます。あなたの抜粋のすぐ上にあるタイトルは、「マルチGPUシステムで単一のGPUを使用する」と言っています。これは、デフォルトの動作について話すときに自動配置について話していないと誤解してしまいます。私は、デフォルトの振る舞いが異なっていたと思った。ありがとう。 –

0

No, you are responsible for device placement:

IDがデフォルトで選択されます。

GPUから別のGPUにデータを移動するのはコストがかかり、システムが本当にどのような場合にデータを移動することができないか分からないためだと思います。

関連する問題