首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tensorflow GPU/多GPU如何分配内存?

Tensorflow GPU/多GPU如何分配内存?
EN

Stack Overflow用户
提问于 2017-06-12 17:49:59
回答 0查看 977关注 0票数 1

我有两个问题:

(1)当只使用一个GPU时,Tensorflow如何分配GPU内存?我有一个卷积2d的实现,如下所示(全局使用GPU):

代码语言:javascript
复制
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的结果。具体实现如下:

代码语言:javascript
复制
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设备上?我有这样的问题,因为当我使用两个GPU来训练这种实现的CNN时,程序使用的GPU内存比使用一个GPU时要多得多。我想我漏掉或误解了一些东西。

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44496404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档