如何在GPU上运行Keras?TensorFlow无法识别GPU问题排查
问题成因
nvidia-smi能识别GPU仅代表硬件、NVIDIA内核驱动安装正常,Keras/TensorFlow检测不到GPU本质是GPU运行依赖栈异常,和代码逻辑无关:- 你看到的
tf.keras code in this scope will run on GPU提示没有任何参考价值,这是tf.device上下文管理器的固定输出,它不会在进入代码块时实际校验GPU是否存在、是否可用,哪怕机器没有GPU只要写了这段上下文就会打印该提示。 - 当TensorFlow无法加载GPU运行依赖时,会静默回退到CPU模式,不会抛出显性报错,因此你所有设备检测接口都只返回CPU设备,GPU上也看不到你的任务进程。
- 你看到的
- 常见触发场景:
- 当前Python环境安装的是CPU版本的TensorFlow,本身不包含GPU计算组件
- CUDA Toolkit、cuDNN版本和你安装的TensorFlow版本要求不匹配,TensorFlow启动时加载GPU动态库失败
- 服务器存在多套Python/CUDA环境,你运行代码的虚拟环境没有关联到正确的CUDA路径
- 如果你用Docker容器跑任务,启动容器时没有加GPU挂载参数,容器内部无法访问物理GPU
- 系统环境变量未正确配置,TensorFlow找不到CUDA库的存储位置
排查与解决步骤
- 先确认TensorFlow安装包类型
执行以下命令查看当前环境的TensorFlow包信息:
如果是CPU版本安装包,直接卸载后安装对应GPU版本即可;注意TensorFlow 2.11及以后的Windows原生版本已取消GPU支持,Linux/macOS(ARM)版本不受影响。pip show tensorflow - 对齐依赖版本
先通过nvidia-smi查看右上角的CUDA驱动版本,该版本必须大于等于你安装的CUDA Toolkit版本;再对照你所用TensorFlow版本官方要求的CUDA、cuDNN版本号做对齐,版本不匹配时要么更换TensorFlow版本,要么重装对应版本的CUDA、cuDNN。推荐在conda虚拟环境内直接安装对应版本的
cudatoolkit和cudnn包,不需要全局安装CUDA,能避免多环境冲突。 - 验证GPU识别状态
依赖配置完成后,不要用tf.device的提示判断状态,直接运行以下代码做校验:
如果输出中包含import tensorflow as tf print("TensorFlow版本:", tf.__version__) print("可用GPU设备:", tf.config.list_physical_devices('GPU'))physical_device:GPU:0条目,说明GPU已经被TensorFlow正常识别。 - Keras单GPU运行正确方式
只要TensorFlow能正常识别GPU,Keras默认会自动将模型训练、张量计算任务调度到GPU上执行,不需要手动用tf.device包裹代码。
如果需要确认算子实际运行位置,可以开启设备placement日志:
确实需要手动指定设备时,注意TensorFlow 2.x的GPU设备名格式为tf.debugging.set_log_device_placement(True) # 正常编写模型构建、model.fit()等逻辑即可,日志会打印每个算子的实际运行设备/GPU:0,设备名写错也会导致任务静默回退到CPU运行。
内容的提问来源于stack exchange,提问作者kkk5786
相关产品推荐
相关产品推荐

