Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory 由于GPU内存敏感,Tensorflow中出现错误结果_Memory_Tensorflow_Gpu - Fatal编程技术网

Memory 由于GPU内存敏感,Tensorflow中出现错误结果

Memory 由于GPU内存敏感,Tensorflow中出现错误结果,memory,tensorflow,gpu,Memory,Tensorflow,Gpu,考虑Tensorflow中的以下简单VGG培训代码: import tensorflow as tf import tensorflow.contrib.slim as slim from tensorflow.contrib.slim.nets import vgg # random input for training images = tf.random_normal(shape=(32, 224, 224, 3)) labels = tf.cast(1000 * tf.

考虑Tensorflow中的以下简单VGG培训代码:

import tensorflow as tf
import tensorflow.contrib.slim as slim
from tensorflow.contrib.slim.nets import vgg

# random input for training
images     = tf.random_normal(shape=(32, 224, 224, 3))
labels     = tf.cast(1000 * tf.random_uniform(shape=(32,)), dtype=tf.int32)

# init graph & cost
logits, _ = vgg.vgg_19(images)

cost = tf.nn.sparse_softmax_cross_entropy_with_logits(logits, labels)
cost = tf.reduce_mean(cost, name='cross_entropy_loss')

# create training_op
optimizer  = tf.train.MomentumOptimizer(1e-5, 0.9)
train_op   = slim.learning.create_train_op(cost, optimizer)

# start training
slim.learning.train(train_op, logdir='logs/bugreport')
在我的几个GPU(特斯拉K40和特斯拉K80)上,在训练开始时(每次跑步时都保持一致),损失几乎恢复正常:

有趣的是,如果将内存消耗限制在某个固定部分,即用

gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.9)
slim.learning.train(train_op, logdir='logs/bugreport', 
                    session_config=tf.ConfigProto(gpu_options=gpu_options))
在这种情况下,培训可以顺利进行。但是,将内存分数增加到0.95会返回上述错误。我可以在其他一些GPU(同样是K40或K80)上重现此错误,尽管阈值不同(其中一个GPU的内存分数不能超过0.7),但并非所有GPU都会受到影响。更糟糕的是,我还有另一个例子(在VGG上评估一组固定的1000个图像),如果没有应用内存约束,那么返回的精度取决于批大小


GPU之间的差异表明GPU内存应该受到责备,尽管我在Theano从未遇到过这样的问题。有趣的是,受影响GPU的ECC日志显示了从0到500位不等的不同数量的内存错误。在这一点上,我有点迷失了如何进一步分析和调试这个问题。特别是,如果GPU内存有故障,那么我需要更严格的证明,以便向我的供应商要求更换。

您可以通过将巨大的矩阵乘以已知结果来测试GPU内存。也就是说,如果A是一个用1填充的nxn矩阵,那么A*A应该是一个用n填充的nxn矩阵。这个问题似乎是关于硬件测试,其次是关于Tensorflow的问题,Tensorflow不是一个编程工具。因此,它似乎离题了。我建议强调可能隐藏在这里的编程问题。@njuffa:问题是:我不完全清楚这是tensorflow的问题还是硬件的问题,因为我无法用其他软件包(如Theano)重现此错误。所以,至少在一定程度上,这是tensorflow和GPU内存之间相互作用的问题。@user45893我在使用GPU时也遇到了不同的(不正确的)结果。。。我用tensorboard记录了损失,这证实了情况并没有像预期的那样好转。我看了这张图,虽然我是新手,但看起来GPU实际上并没有做所有的计算,只是初始化。
gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.9)
slim.learning.train(train_op, logdir='logs/bugreport', 
                    session_config=tf.ConfigProto(gpu_options=gpu_options))