tensorflow-gpu 2.3.0运行报FailedPreconditionError如何解决?
tensorflow.python.framework.errors_impl.FailedPreconditionError: Failed to allocate scratch buffer for device 0 [Op:VarHandleOp] name: Variable/
问题触发原因
- 核心原因是TensorFlow版本与CUDA、cuDNN版本不兼容:tensorflow-gpu 2.3.0官方要求匹配的CUDA版本为10.1,cuDNN版本为7.6.x,当前使用的CUDA 8.0、cuDNN 6.0远低于要求的最低版本,框架调用GPU底层接口时出现适配错误,无法正常分配显存缓冲区。
- 次要可能原因是GPU显存不足:当前进程申请的显存超过了设备0(默认第一块GPU)的剩余可用显存,导致缓冲区分配失败。
修复方案
方案1:修复版本不兼容问题(优先执行)
卸载现有CUDA、cuDNN以及tensorflow-gpu包,安装版本匹配的组件:
- 卸载命令:
pip uninstall tensorflow-gpu # 若CUDA、cuDNN通过conda安装,使用 conda remove cudatoolkit cudnn 卸载 # 若通过系统包管理器安装,对应使用apt/yum/brew的卸载命令即可 - 安装适配版本(以conda环境为例):
conda install cudatoolkit=10.1 cudnn=7.6 pip install tensorflow-gpu==2.3.0 - 适配验证:执行以下代码确认GPU可正常识别:
import tensorflow as tf print(tf.test.is_gpu_available())
方案2:显存不足适配方案
如果版本匹配后仍然报错,按以下方式调整显存策略:
- 开启TensorFlow显存动态分配,在训练代码开头加入以下配置:
import tensorflow as tf gpus = tf.config.experimental.list_physical_devices('GPU') for gpu in gpus: tf.config.experimental.set_memory_growth(gpu, True) - 限制进程最大显存占用,可按实际可用显存调整配额:
tf.config.experimental.set_virtual_device_configuration( gpus[0], [tf.config.experimental.VirtualDeviceConfiguration(memory_limit=4096)] # 单位为MB,按实际情况调整数值 ) - 调小训练batch size,降低单步运算的显存占用。
内容的提问来源于stack exchange,提问作者Fibonacci1012
相关产品推荐
相关产品推荐

