当前位置:  开发笔记 > 编程语言 > 正文

如何调试model.fit()中的Tensorflow分段错误?

如何解决《如何调试model.fit()中的Tensorflow分段错误?》经验,为你挑选了1个好方法。

我正在尝试使用带有Geforce 2080的tensorflow-gpu 运行Keras MINST示例.我的环境是Linux系统上的Anaconda.

我正在从命令行python会话运行未修改的示例.我得到以下输出:

Using TensorFlow backend.
Device mapping:
/job:localhost/replica:0/task:0/device:GPU:0 -> device: 0, name: GeForce RTX 2080, pci bus id: 0000:01:00.0, compute capability: 7.5
x_train shape: (60000, 28, 28, 1)
60000 train samples
10000 test samples
Train on 60000 samples, validate on 10000 samples
Epoch 1/12
conv2d_1/random_uniform/RandomUniform: (RandomUniform): 
/job:localhost/replica:0/task:0/device:GPU:0
conv2d_1/random_uniform/sub: (Sub): 
/job:localhost/replica:0/task:0/device:GPU:0
conv2d_1/random_uniform/mul: (Mul): 
/job:localhost/replica:0/task:0/device:GPU:0
conv2d_1/random_uniform: (Add): 
/job:localhost/replica:0/task:0/device:GPU:0
[...]

我收到的最后一行是:

training/Adadelta/Const_31: (Const): /job:localhost/replica:0/task:0/device:GPU:0
training/Adadelta/mul_46/x: (Const): /job:localhost/replica:0/task:0/device:GPU:0
training/Adadelta/mul_47/x: (Const): /job:localhost/replica:0/task:0/device:GPU:0
Segmentation fault (core dumped)

从阅读中我认为这可能是一个内存问题,并添加这些行,以防止GPU耗尽内存:

config = tf.ConfigProto(log_device_placement=True)
config.gpu_options.per_process_gpu_memory_fraction=0.3
K.tensorflow_backend.set_session(tf.Session(config=config))

使用nvidia-smi工具检查GPU实际使用(watch -n1 nvidia-smi)我可以从以下输出确认(在此运行中没有per_process_gpu_memory_fraction设置为1):

在此输入图像描述

我怀疑CUDA,Keras和Tensorflow之间的版本不兼容是问题所在,但我不知道,如何调试它.

有哪些调试措施可以解决这个问题?还有哪些其他问题可能是此段错误的原因?

编辑:我进一步实验,用这个代码替换模型工作正常:

model = keras.Sequential([
    keras.layers.Flatten(input_shape=input_shape),
    keras.layers.Dense(128, activation=tf.nn.relu),
    keras.layers.Dense(10, activation=tf.nn.softmax)
])

但是,一旦我引入了这样的卷积层

model = keras.Sequential([
    keras.layers.Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=input_shape),
#    keras.layers.Flatten(input_shape=input_shape),
    keras.layers.Flatten(),
    keras.layers.Dense(128, activation=tf.nn.relu),
    keras.layers.Dense(10, activation=tf.nn.softmax)

])

然后我再次得到上述的段错误.

所有数据包都是通过Anaconda安装的.我安装了

conda 4.5.11

python 3.6.6

keras-gpu 2.2.4

张量流1.12.0

tensorflow-gpu 1.12.0

cudnn 7.2.1

cudatoolkit 9.2

编辑:我在非anaconda环境中尝试了相同的代码,它完美无瑕.我宁愿使用anaconda来避免系统更新破坏事情.



1> 小智..:

从source(r1.13)建立张量流.Conv2D分段错误已修复。

关注源代码构建

我的GPU:RTX 2070 Ubuntu 16.04 Python 3.5.2 Nvidia驱动程序410.78 CUDA-10.0.130 cuDNN-10.0-7.4.2.24 TensorRT-5.0.0计算能力:7.5

内部版本:tensorflow-1.13.0rc0-cp35-cp35m-linux_x86_64

从https://github.com/tensorflow/tensorflow/issues/22706预先下载

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有