この文with tf.device('device:GPU:1')
は、tensorflowに特にGPU-1を使用するように指示しているため、他のデバイスを使用することはありません。
モデルが大きすぎる場合、recommended wayは、グラフを手動で別のGPUに分割することによってモデルの並列性を使用することです。あなたのケースでは、モデル定義がライブラリにあるため、テンソルフローを修正しない限り、異なるレイヤーにtf.device
ステートメントを挿入することはできません。
しかし、あなたは変数を定義して置くことができがinception_v3
ビルダーを起動する前にこの問題を回避する
があります。このようにしてinception_v3
はこれらの変数を再利用し、配置を変更しません。例:
with tf.variable_scope(tf.get_variable_scope(), reuse=tf.AUTO_REUSE):
with tf.device('device:GPU:1'):
tf.get_variable("InceptionV3/Logits/Conv2d_1c_1x1/biases", shape=[1000])
tf.get_variable("InceptionV3/Logits/Conv2d_1c_1x1/weights", shape=[1, 1, 2048, 1000])
with tf.device('device:GPU:0'):
logits, end_points = inception_v3(inputs)
ランニング時に、あなたはConv2d_1c_1x1
層はGPU-1上にある間Conv2d_1c_1x1
を除くすべての変数が、GPU-0上に配置されていることがわかります。
欠点は、置き換えたい各変数の形を知る必要があることです。しかし、それは実行可能であり、少なくともあなたのモデルを実行することができます。