tf.Session()上的分段错误(核心转储)

Ben*_*Sam 9 installation segmentation-fault tensorflow

我是TensorFlow的新手.

我刚刚安装了TensorFlow并测试安装,我尝试了以下代码,一旦启动TF会话,我就会收到Segmentation fault(core dumped)错误.

bafhf@remote-server:~$ python
Python 3.6.5 |Anaconda, Inc.| (default, Apr 29 2018, 16:14:56) 
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
/home/bafhf/anaconda3/envs/ismll/lib/python3.6/site-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
  from ._conv import register_converters as _register_converters
>>> tf.Session()
2018-05-15 12:04:15.461361: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1349] Found device 0 with properties: 
name: Tesla K80 major: 3 minor: 7 memoryClockRate(GHz): 0.8235
pciBusID: 0000:04:00.0
totalMemory: 11.17GiB freeMemory: 11.10GiB
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)

我的nvidia-smi是:

Tue May 15 12:12:26 2018       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.30                 Driver Version: 390.30                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla K80           On   | 00000000:04:00.0 Off |                    0 |
| N/A   38C    P8    26W / 149W |      0MiB / 11441MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   1  Tesla K80           On   | 00000000:05:00.0 Off |                    2 |
| N/A   31C    P8    29W / 149W |      0MiB / 11441MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

nvcc --version是:

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2017 NVIDIA Corporation
Built on Fri_Sep__1_21:08:03_CDT_2017
Cuda compilation tools, release 9.0, V9.0.176
Run Code Online (Sandbox Code Playgroud)

此外GCC --version是:

gcc (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Run Code Online (Sandbox Code Playgroud)

以下是我的路径:

/home/bafhf/bin:/home/bafhf/.local/bin:/usr/local/cuda/bin:/usr/local/cuda/lib:/usr/local/cuda/extras/CUPTI/lib:/home/bafhf/anaconda3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Run Code Online (Sandbox Code Playgroud)

LD_LIBRARY_PATH:

/usr/local/cuda/bin:/usr/local/cuda/lib:/usr/local/cuda/extras/CUPTI/lib
Run Code Online (Sandbox Code Playgroud)


我在服务器上运行它,我没有root权限.我仍然按照官方网站上的说明安装了一切.

编辑:新观察:

似乎GPU正在为进程分配内存一秒钟,然后抛出核心分段转储错误:

终端输出

Edit2:更改了tensorflow版本

我将tensorflow版本从v1.8降级到v1.5.问题仍然存在.


有没有办法解决或调试此问题?

Ben*_*Sam 1

如果您可以看到nvidia-smi输出,则第二个 GPU 的ECC代码为 2。无论 CUDA 版本或 TF 版本错误如何,此错误都会出现,并且通常作为段错误,有时CUDA_ERROR_ECC_UNCORRECTABLE在堆栈跟踪中带有标志。

我从这篇文章中得到了这个结论:

“不可纠正的 ECC 错误”通常是指硬件故障。ECC 是纠错码,是一种检测和纠正 RAM 中存储的位错误的方法。杂散宇宙射线每隔很长一段时间就会破坏 RAM 中存储的一位,但“不可纠正的 ECC 错误”表明 RAM 存储中的多个位“错误” - 太多,ECC 无法恢复原始位值。

这可能意味着您的 GPU 设备内存中有一个坏的或边缘的 RAM 单元。

任何类型的边缘电路可能不会 100% 失效,但在大量使用和相关温度升高的压力下更有可能失效。

重新启动通常应该可以消除ECC错误。如果没有,似乎唯一的选择就是更改硬件。


那么我做了什么以及最后如何解决这个问题?

  1. 我在一台带有 NVIDIA 1050 Ti 机器的单独机器上测试了我的代码,并且我的代码执行得非常好。
  2. 我只在第一张ECC值正常的卡上运行代码 ,只是为了缩小问题范围。我在这篇文章之后做了设置 CUDA_VISIBLE_DEVICES环境变量。
  3. 然后我请求重新启动Tesla-K80 服务器以检查重新启动是否可以解决此问题,他们花了一段时间,但服务器随后重新启动

    现在问题不再存在,我可以为我的张量流实现运行这两张卡。