无论批量大小如何,Tensorflow都使用相同数量的gpu内存

时间:2016-06-12 15:28:38

标签: tensorflow

我是tensorflow的新手,我正在努力训练CIFAR 10数据集。我注意到无论根据我的nvidia控制面板我使用的批量大小,我使用的是97%的gpu内存。我尝试批量大小为100到2,在每种情况下我的gpu内存使用率总是97%。为什么要这样做?

def batchGenerator(batch_size = 32):
    bi = 0
    random.shuffle(train_data)
    while bi + batch_size < len(train_data):
        x = np.zeros((batch_size, 32, 32, 3))
        y = np.zeros((batch_size, 10))
        for b in range(batch_size):
            x[b] = train_data[bi + b][0]
            if random.choice((True, False)):
                img = cv2.flip(x[b], 0)
            if random.choice((True, False)):
                img = cv2.flip(x[b], 1)
            y[b][train_data[bi + b][1]] = 1
        bi += batch_size
        yield(x, y)

with tf.Session() as s:
    s.run(tf.initialize_all_variables())
    for epoch in range(100):
        a = 0.0
        i = 0
        for x_train, y_train in batchGenerator(2):
            outs = s.run([opt, accuracy], feed_dict = {x: x_train, y_exp: y_train, p_keep: 0.5})
            a += outs[-1]
            i += 1
        print('Epoch', epoch, 'Accuracy', a / i)

1 个答案:

答案 0 :(得分:7)

此问题与How to prevent tensorflow from allocating the totality of a GPU memory?

有关

TensorFlow默认使用GPU的所有内存,这是正常行为。从教程Using GPUs

  

默认情况下,TensorFlow几乎映射了进程可见的所有GPU的所有GPU内存。这样做是为了通过减少内存碎片来更有效地使用设备上相对宝贵的GPU内存资源。

如果您需要减少TensorFlow占用的内存,它们还提供不同的选项,例如:

config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.4
session = tf.Session(config=config, ...)

(来自链接的文档),将内存使用限制为GPU可用内存的40%。