Ubuntu 18.04下RTX 2080 Ti运行tensorflow-gpu触发Segmentation fault求助
解决TensorFlow-GPU与RTX 2080 Ti训练时Segmentation Fault的问题
从你的日志来看,TensorFlow已经成功识别到了你的RTX 2080 Ti(Compute Capability 7.5),硬件检测环节是正常的,训练启动时的段错误大概率是版本兼容性、内存配置或驱动问题导致的。下面是几个针对性的解决步骤:
第一步:确认TensorFlow、CUDA、cuDNN版本兼容性
RTX 2080 Ti属于Turing架构,需要支持Compute Capability 7.5的软件版本。如果你安装的是TensorFlow 1.x,需要至少TensorFlow 1.13+搭配CUDA 10.0+和cuDNN 7.4+;如果是TensorFlow 2.x,对应CUDA 10.1+(或更高)和匹配的cuDNN版本。
你可以通过以下命令检查当前版本:# 查看TensorFlow版本 pip show tensorflow-gpu # 查看CUDA版本 nvcc --version # 查看cuDNN版本(查看头文件) cat /usr/include/cudnn_version.h | grep CUDNN_MAJOR -A 2如果版本不匹配,建议卸载现有版本后重新安装对应组合的包。
第二步:启用GPU内存按需分配
有时候TensorFlow尝试一次性分配全部GPU内存会引发段错误,你可以在代码开头添加内存按需分配的配置:# 针对TensorFlow 1.x + Keras import tensorflow as tf from keras.backend.tensorflow_backend import set_session config = tf.ConfigProto() config.gpu_options.allow_growth = True sess = tf.Session(config=config) set_session(sess) # 针对TensorFlow 2.x import tensorflow as tf physical_devices = tf.config.list_physical_devices('GPU') tf.config.experimental.set_memory_growth(physical_devices[0], True)第三步:禁用XLA即时编译
XLA编译偶尔会和Turing架构GPU出现兼容性问题,你可以尝试关闭它:# TensorFlow 1.x import tensorflow as tf config = tf.ConfigProto() config.graph_options.optimizer_options.global_jit_level = tf.OptimizerOptions.OFF sess = tf.Session(config=config) set_session(sess)第四步:更新NVIDIA驱动
RTX 20系列需要较新的驱动版本(建议410.x及以上),你可以通过以下命令更新:# 添加NVIDIA驱动PPA sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt update # 安装推荐的驱动版本 sudo ubuntu-drivers autoinstall # 重启系统 sudo reboot第五步:排查GPU占用与最小测试
先通过nvidia-smi命令检查是否有其他进程占用GPU内存,如果有,关闭这些进程后再尝试训练。
另外,写一个最小的GPU测试脚本验证环境是否正常:import tensorflow as tf print("GPU可用状态:", tf.test.is_gpu_available()) # 在GPU上执行简单计算 with tf.device('/GPU:0'): a = tf.constant([1.0, 2.0], shape=[1,2]) b = tf.constant([3.0,4.0], shape=[2,1]) c = tf.matmul(a,b) # TensorFlow 1.x用Session,2.x直接运行 if tf.__version__.startswith('1'): with tf.Session() as sess: print("GPU计算结果:", sess.run(c)) else: print("GPU计算结果:", c.numpy())如果这个脚本也出现段错误,说明环境配置有问题;如果能正常运行,那问题可能出在你的训练脚本(比如模型结构、数据加载逻辑)上,建议逐步简化脚本排查。
内容的提问来源于stack exchange,提问作者Marcos Soares

