无GPU环境下使用Flask基于CPU加载预训练模型如何屏蔽GPU相关报错
纯CPU设备下Flask部署Keras/TensorFlow模型的GPU报错解决
触发报错的本质
你当前安装的TensorFlow是带GPU支持的版本,程序启动流程里默认会扫描系统中的CUDA、cuDNN动态库。日志最开始的cudart64_110.dll not found是警告级提示,本身不会导致程序崩溃;因为没有提前告知框架“这台机器没有GPU,不需要检索相关依赖”,程序会沿着GPU版本的加载流程继续执行,尝试加载后续GPU配套组件,最终触发WinError 126的“找不到指定模块”异常,直接中断模型加载。
具体配置步骤
- 第一,在所有深度学习库导入前,提前写入禁用GPU识别的环境变量
注意:这部分配置必须放在import numpy、import keras、import tensorflow这类语句的最前面,如果先导入TensorFlow再设置环境变量,配置不会生效。
对应代码片段:import os # 强制设置CUDA可见设备为空,完全跳过GPU硬件扫描 os.environ["CUDA_VISIBLE_DEVICES"] = "-1" # 屏蔽TensorFlow的非必要日志,减少冗余输出 os.environ["TF_CPP_MIN_LOG_LEVEL"] = "2" - 第二,在代码层面主动切断TensorFlow对GPU设备的识别
导入TensorFlow之后,主动调用API清空可见的GPU设备列表,避免隐式的GPU调用逻辑:import tensorflow as tf # 主动将所有GPU设备设置为不可见,框架完全依托CPU运行 tf.config.set_visible_devices([], 'GPU') - 第三,验证依赖包版本匹配性
如果完成上面两步仍提示找不到CUDA动态库,说明当前安装的TensorFlow是GPU专属版本包,直接替换为纯CPU版本即可,执行命令:# 卸载原有带GPU支持的TensorFlow包 pip uninstall tensorflow tensorflow-gpu -y # 安装和训练模型时版本一致的CPU专属TensorFlow包 pip install tensorflow-cpu==对应训练时的版本号 - 调整原有加载代码的细节
把原来的模型加载函数补充必要的异常判断、资源释放逻辑,避免文件路径问题引发的连锁报错,调整后的完整load.py参考:import os # 环境变量设置必须位于所有深度学习库导入之前 os.environ["CUDA_VISIBLE_DEVICES"] = "-1" os.environ["TF_CPP_MIN_LOG_LEVEL"] = "2" import numpy as np from tensorflow.keras.models import model_from_json import tensorflow as tf # 主动隐藏所有GPU设备 tf.config.set_visible_devices([], 'GPU') def load_model(): if not os.path.exists("model.json") or not os.path.exists("model.h5"): raise FileNotFoundError("未检测到模型结构/权重文件,请检查路径配置") with open("model.json", 'r') as json_file: model_structure = json_file.read() loaded_model = model_from_json(model_structure) loaded_model.load_weights("model.h5") loaded_model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) return loaded_model
内容的提问来源于stack exchange,提问作者KayseMca
相关产品推荐
相关产品推荐

