Keras-GPU无法识别NVIDIA GTX950M,TensorFlow却可检测求助
看起来你遇到的核心问题是TensorFlow能正确检测到NVIDIA GTX950M,但Keras却默认调用了Intel集成显卡,而且因为误解双显卡的兼容性,调用multi_gpu_model时还报了错。我来一步步帮你解决:
1. 先确认Keras的后端配置
Keras本身是高层API,必须依赖TensorFlow、Theano或CNTK这些后端。你装了keras-gpu,理论上默认应该绑定TensorFlow GPU版,但有时候配置文件会出问题:
- 找到Keras配置文件:
- Windows:
C:\Users\<你的用户名>\.keras\keras.json - Linux/macOS:
~/.keras/keras.json
- Windows:
- 打开后确保内容如下(重点是
backend为tensorflow):
{ "floatx": "float32", "epsilon": 1e-07, "backend": "tensorflow", "image_data_format": "channels_last" }
修改后保存,重启你的Python环境。
2. 在Keras代码开头强制绑定NVIDIA GPU
你之前设置os.environ["CUDA_VISIBLE_DEVICES"]="1"是错误的——从TensorFlow的测试结果来看,你的NVIDIA GPU对应的设备编号是0,Intel集成显卡不会被CUDA版本的TensorFlow识别为GPU设备。
在你的Keras代码最顶部添加以下代码,确保TensorFlow优先加载NVIDIA GPU:
import os # 只让TensorFlow看到NVIDIA GPU(编号0) os.environ["CUDA_VISIBLE_DEVICES"] = "0" # 配置TensorFlow的GPU显存按需分配(避免一次性占满显存) import tensorflow as tf from keras import backend as K config = tf.compat.v1.ConfigProto() config.gpu_options.allow_growth = True sess = tf.compat.v1.Session(config=config) K.set_session(sess) # 之后再导入Keras的其他模块 from keras.models import Sequential from keras.layers import Dense, Activation from keras.utils import multi_gpu_model
3. 系统级设置:让Anaconda程序用NVIDIA独立显卡
笔记本的双显卡默认会自动切换,但有时候会优先用集成显卡跑Python程序,你需要手动指定:
- 打开NVIDIA控制面板 → 管理3D设置 → 程序设置
- 点击“添加”,找到你Anaconda环境里的
python.exe(比如C:\Users\<你的用户名>\anaconda3\envs\<你的环境名>\python.exe) - 在“为此程序选择首选图形处理器”里,选择“高性能NVIDIA处理器”,保存设置。
4. 关于multi_gpu_model的错误说明
你调用multi_gpu_model(model, 2)报错是正常的——因为Intel集成显卡不属于CUDA兼容的GPU,TensorFlow只能识别你的NVIDIA GTX950M这1个可用GPU。所谓的“两块显卡”里,只有NVIDIA的那块能用来加速深度学习,所以你应该改成:
# 单GPU不需要multi_gpu_model,直接用原模型即可 # 如果想测试多GPU(但你只有1个),可以设置gpus=1,或者干脆去掉这行 model = multi_gpu_model(model, gpus=1)
验证方法
在代码里添加以下代码,确认TensorFlow识别的GPU是NVIDIA的:
from tensorflow.python.client import device_lib print(device_lib.list_local_devices())
输出里应该能看到name: "/device:GPU:0",且device_type是GPU,physical_device_desc里包含NVIDIA GTX950M的信息。
按照这些步骤操作后,Keras应该就能正常调用NVIDIA GPU了,任务管理器里也能看到NVIDIA显卡的占用率上升。
内容的提问来源于stack exchange,提问作者Ed.S

