私は2つの質問を持っています:Tensorflow GPU /マルチGPUがメモリを割り当てる方法は?
(1)Tensorflowは1つのGPUだけを使用するとGPUメモリをどのように割り当てますか?私は(世界的にGPUを使用して)このような畳み込み2dの実装を持っている:
def _conv(self, name, x, filter_size, in_filters, out_filters, strides):
with tf.variable_scope(name):
n = filter_size * filter_size * out_filters
kernel = tf.get_variable(
'', [filter_size, filter_size, in_filters, out_filters], tf.float32,
initializer=tf.random_normal_initializer(stddev=np.sqrt(2.0/n)),
)
return tf.nn.conv2d(x, kernel, strides, padding='SAME')
# another option
# x = tf.nn.conv2d(x, kernel, strides, padding='SAME')
# return x
コメント内の別のオプションは、同じ操作を行いますが、新しい変数x
を追加しました。この場合、TFはより多くのGPUメモリを割り当てますか?
(2)複数のGPUを使用する場合。私はlist
を使用して複数のGPUからの結果を収集したいと思います。実装は以下の通りです:
def _conv(self, name, input, filter_size, in_filters, out_filters, strides, trainable=True):
assert type(input) is list
assert len(input) == FLAGS.gpu_num
n = filter_size * filter_size * out_filters
output = []
for i in range(len(input)):
with tf.device('/gpu:%d' % i):
with tf.variable_scope(name, reuse=i > 0):
kernel = tf.get_variable(
'', [filter_size, filter_size, in_filters, out_filters], tf.float32,
initializer=tf.random_normal_initializer(stddev=np.sqrt(2.0/n))
)
output.append(tf.nn.conv2d(input[i], kernel, strides, padding='SAME'))
return output
はTFためlist
の使用のより多くのメモリを割り当てるのでしょうか? output
(list
)がGPUデバイスに接続されていますか?私は、この実装でCNNをトレーニングするために2つのGPUを使用している場合、1つのGPUを使用する場合よりもはるかに多くのGPUメモリを使用するため、この種の質問があります。私は逃したか誤解したことがあると思う。
[Tensorflow website here](https://www.tensorflow.org/tutorials/using_gpu#allowing_gpu_memory_growth)のGPUオプションページをご覧ください。私が理解しているように、Tensorflowはできるだけ多くのGPUメモリをつかみ、それ自体を管理します。これは、nvidia SMIを使ってすばやく監視しようとすると、少しイライラすることがあります。しかし、あなたはGPUの成長を許すことができます。これは、GPUが必要とするものだけを取り、より多くのものを取ることができることを意味します。あなたはTFもメモリのほんの一部を取ることができるように設定することができます。リンクされたページがあなたの質問に答えるかどうかを確認してください。 – JCooke
ご意見ありがとうございますが、そのリンクは私の質問に答えていませんでした。 TFによって把握されたGPUメモリには、「必要な」メモリの一部と性能向上のための別の部分があります。 GPUメモリが不足している場合、TFは必要なメモリだけを割り当てます(多少複雑なことがありますので、メモリが不足しているという警告が表示されます)。私の質問で言及された記憶は、この必要な記憶を意味し、TFによって捕えられた記憶を意味しない。 – Seven
ああそうだよ。だから、あなたは記憶がどのように獲得され、何のためにもっと興味がありますか?私はあなたに合理的な答えを与えるのに十分な資格はないと思います。うまくいけば、他の人があなたを助けることができます! – JCooke