分配0字节时,超出GPU内存

时间:2018-01-20 20:28:32

标签: python tensorflow gpu mnist

我将tensorflow网站上的Deep Mnist示例修改为以下内容:

a = np.zeros((5500,10))
a = mnist.train.labels.copy()

batchsize = 250

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for i in range(1000):
        batch = [mnist.train.images[i:batchsize], a[i:batchsize]]
        if i % 10 == 0:
            train_accuracy = accuracy.eval(feed_dict={x: batch[0], y_:batch[1], keep_prob: 1.0})
            print('step %d, training accuracy %g' % (i, train_accuracy))
        train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5})
        del batch

    print('test accuracy %g' % accuracy.eval(feed_dict={x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0}))
    save_path = saver.save(sess, "/tmp/model.ckpt")
    print("Model saved in file: %s" % save_path)

我所做的只是使用自定义标签数组创建我自己的一批mnist.datasets。

但是当我运行它时,经过一些迭代后,我得到以下输出:

Ran out of GPU memory when allocating 0 bytes for 
 [[Node: SoftmaxCrossEntropyWithLogits_6 = SoftmaxCrossEntropyWithLogits[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:GPU:0"](Reshape_20, Reshape_21)]]

我甚至添加了这些内容:

config = tf.ConfigProto()
config.gpu_options.allow_growth = True

和nvidia-smi告诉我,4Gb应该是免费的。

有没有人知道这个问题,甚至可能知道如何修复它?

1 个答案:

答案 0 :(得分:0)

这一行:

batch = [mnist.train.images[i:batchsize], a[i:batchsize]]

会在i >= batchsize后立即为您提供空批次。实际上,您发布的错误消息显示为Ran out of GPU memory when allocating 0 bytes

您可能想要的是(请注意添加的i+):

batch = [mnist.train.images[i:i+batchsize], a[i:i+batchsize]]

编辑

代码还应按批量大小增加i,以便在一个训练时期内不重复使用样本:

for i in range(0,1000, batchsize):

请注意,代码也不会循环遍历整个示例,您可以通过执行以下操作来执行此操作:

for i in range(0,len(a), batchsize):

此外,建议以随机顺序循环遍历样本。如果您多次循环样本(这可能会获得与上一次迭代中相同的梯度步骤),这一点非常重要,同时也可以避免因训练样本的特定顺序而产生的任何影响(例如,先学习所有零,然后全部在你的网络可能倾向于将太多的东西归类为9种情况下完成这些工作。