onnxruntime-gpu识别GPU但创建推理会话时仅使用CPU问题求助
ONNXRuntime 无法加载CUDA执行提供器排查方案
- 版本兼容性校验
onnxruntime-gpu的版本和CUDA、cuDNN版本是严格绑定的,不匹配会直接静默降级到CPU执行。onnxruntime 1.9.0官方适配的是CUDA 11.2 + cuDNN 8.1.1,你当前使用的CUDA 11.4、cuDNN 8.2.4版本高于适配要求,是最可能的诱因。你可以选择降级CUDA和cuDNN到适配版本,或者升级onnxruntime-gpu到匹配CUDA11.4的版本。 - 环境变量校验
执行echo $LD_LIBRARY_PATH确认输出中包含CUDA 11.4的lib64路径(默认是/usr/local/cuda-11.4/lib64)和cuDNN的库文件路径,避免动态库加载失败。如果是将cuDNN文件合并到CUDA目录的安装方式,需要确认cuDNN的so文件已经正确复制到CUDA的lib64目录下,权限配置正常。 - 开启调试日志定位具体错误
在创建InferenceSession前添加日志级别配置,输出加载CUDA提供器的详细报错信息:
日志中会明确标注加载失败的原因,比如缺少动态库、符号不匹配、显存不足、GPU权限不足等,可根据具体报错进一步处理。import onnxruntime as ort # 日志级别设为0即VERBOSE,输出所有加载日志 ort.set_default_logger_severity(0) ort_session = ort.InferenceSession(onnx_file, providers=["CUDAExecutionProvider"]) - GPU访问权限校验
执行nvidia-smi确认可以正常输出显卡信息,如果报错需检查当前用户是否在video用户组,或者/dev/nvidia*设备的访问权限是否正常。如果是在Docker容器内运行,需要确认容器启动时添加了--gpus all参数完成GPU挂载。 - 残留安装包校验
执行pip list | grep onnxruntime确认输出中仅存在onnxruntime-gpu,如果同时存在CPU版本的onnxruntime,需执行pip uninstall onnxruntime onnxruntime-gpu -y完全卸载后,再重新安装对应版本的onnxruntime-gpu。 - 模型兼容性校验
可使用官方公开的ResNet50 ONNX模型做测试,如果测试模型可以正常加载CUDA执行提供器,则说明你的自定义模型中存在不支持CUDA加速的特殊算子,可针对性调整算子实现。
内容的提问来源于stack exchange,提问作者kwagjj
相关产品推荐
相关产品推荐

