ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

ONNX Runtime 推理卡住?从环境到提速的完整排查指南

ONNX Runtime 推理卡住?从环境到提速的完整排查指南 ONNX Runtime 推理卡住从环境到提速的完整排查指南【免费下载链接】onnxruntimeONNX Runtime: cross-platform, high performance ML inferencing and training accelerator项目地址: https://gitcode.com/GitHub_Trending/on/onnxruntime你刚把 ONNX Runtime 装好一跑模型就报No module named onnxruntime或者明明有显卡却提示CUDA not available先别乱试。这篇文章按你实际使用的顺序走一遍装环境 → 模型首次加载 → 提速调优 → 报错自查每一步告诉你该做什么、容易卡在哪、怎么解开。环境准备导入失败先核对这 3 件事装完包后第一件事是验证能import onnxruntime。核对三处安装命令别混CPU 版是pip install onnxruntimeGPU 版是单独的pip install onnxruntime-gpu两者不是一个包。用pip show onnxruntime确认安装位置和版本查不到说明装到了别的环境里常见于 conda 虚拟环境不一致。要用 GPU 就先跑nvidia-smi命令都报不出显卡问题在驱动不在 ONNX Runtime。 GPU 版装完跑不起来3 个原因机器上的 CUDA / cuDNN 版本和你装的 wheel 不匹配装之前先对照官方 docs/FAQ.md 里的版本兼容说明。驱动没装好nvidia-smi直接报错任何 GPU 框架都用不了。装错了包GPU 能力只有onnxruntime-gpu这个包才有。想固定版本的话仓库根的 VERSION_NUMBER 和 docs/python/README.rst 写着当前稳定版号。模型首次加载解决算子不支持和形状对不上算子不支持报错Failed to load model with error: Node (xxx) Op (xxx) is not supported意思是模型里有个算子你的构建不支持。先看清报错里是哪个算子再翻 docs/ContribOperators.md它列出了各执行提供器Execution Provider简单说就是负责在 CPU/GPU 等具体设备上干活的模块额外支持的算子清单。缺算子时先pip install -U onnxruntime升到最新版确实没有的话也可以自己编译一个算子库用session_options.register_custom_ops_library注册进去。形状不匹配推理时报Shape mismatch就是输入张量的维度和模型要求对不上。别靠猜先执行session.get_inputs()打印每个输入的名字和期望形状再按它 reshape 你的数据。如果怀疑 GPU 没生效创建 session 时给一个带兜底的设备列表然后打印实际分配结果import onnxruntime as ort session ort.InferenceSession(model.onnx, providers[CUDAExecutionProvider, CPUExecutionProvider]) print(session.get_providers())打印里只剩CPUExecutionProvider说明是执行提供器或算子支持的问题不用怀疑业务代码。⚡ 提速调优线程数该设几瓶颈在哪里先用默认配置跑通再调参数。intra_op_num_threads控制单个算子内部用多少线程并行计算inter_op_num_threads控制多少个算子可以并行执行只跑单条请求就把 intra 调大要并发服务多个请求再调 inter。想限制 ONNX Runtime 只用一个核心设环境变量OMP_NUM_THREADS1并把执行模式设为顺序执行即可。options ort.SessionOptions() options.intra_op_num_threads 4 options.inter_op_num_threads 2 options.enable_profiling True打开 profiling 后跑一次推理再调用session.end_profiling()会得到一个 trace 文件用 trace 查看器打开就能看出具体是哪个算子拖慢了整体比盲猜线程数有效得多。量化模型在 GPU 上跑不动很多人一上来就量化求快但默认 CUDA 构建只支持 3 个量化算子QuantizeLinear、DequantizeLinear、MatMulIntegerTensorRT 执行提供器也只是有限支持 INT8。量化模型报错多数就是算子不在支持清单里。建议顺序反过来先做性能调优确认确实不达标再上量化。优化器还会把图拆成子图分派给不同设备所以排查时以get_providers()的打印为准 报错自查拿到真正有用的详细日志默认日志级别是 WARNING大部分细节都被吞掉了。排查时把级别调到 VERBOSEimport onnxruntime as ort ort.set_default_logger_severity(0) # 0VERBOSE3只显示错误C 里则是把Ort::Env的第一个参数设成ORT_LOGGING_LEVEL_VERBOSE。详细日志里能看到设备检查过程和算子回退原因通常一眼就看出卡在哪一环。模型有多个输入输出时先用session.get_inputs()和session.get_outputs()拿到名字列表再逐个构造输入字典完整的 C/C 写法在 docs/FAQ.md 里有现成段落多输入多输出的测试代码可以直接参考 onnxruntime/test/shared_lib/test_inference.cc。四步走下来还没解决回到 docs/FAQ.md 把你的报错原文对照一遍同时去项目主页的 Issues 区搜搜同款报错——大多数问题都有人踩过。发 Issue 时带上 ONNX Runtime 版本、CUDA 版本和完整报错文本能省掉来回追问的时间。【免费下载链接】onnxruntimeONNX Runtime: cross-platform, high performance ML inferencing and training accelerator项目地址: https://gitcode.com/GitHub_Trending/on/onnxruntime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表