判断 ONNX 模型是否支持 GPU
🔍 判断 ONNX 模型是否支持 GPU 的几个关键点:
✅ 1. 检查模型支持的 Execution Provider
可以通过下面的代码打印出来当前模型使用了什么设备:
需要安装好:onnxruntime-gpu
import onnxruntime as ort
session = ort.InferenceSession("your_model.onnx", providers=['CUDAExecutionProvider', 'CPUExecutionProvider'])
print("当前使用设备:", session.get_providers())
如果输出是:
# UserWarning: Specified provider 'CUDAExecutionProvider' is not in available provider names.Available providers: 'AzureExecutionProvider, CPUExecutionProvider'
#当前使用设备: ['CPUExecutionProvider']
那说明 即使你指定了 CUDA,模型也没用上 GPU。可能的原因如下👇
⚠️ 常见模型不支持 GPU 的原因:
🧪 你可以这样验证是否真的不支持 GPU:
运行这个脚本测试你的模型:
import onnxruntime as ortmodel_path = "model/line-drawings.onnx" # 或 line-relifer.onnx
session = ort.InferenceSession(model_path, providers=['CUDAExecutionProvider', 'CPUExecutionProvider'])print("可用 Provider:", ort.get_available_providers())
print("当前 Session 使用 Provider:", session.get_providers())
如果你看到:
当前 Session 使用 Provider: ['CPUExecutionProvider']
就确认模型 不支持 CUDA 推理。
🛠️ 解决方法(建议):
✅ 方案 1:尝试重新导出支持 GPU 的 ONNX 模型
如果你能访问训练代码,建议使用:
torch.onnx.export(..., opset_version=11, do_constant_folding=True)
并确保:
不使用动态形状(除非必要)
避免包含 grid_sample, loop, scan, 等复杂或实验算子
可通过 Netron 打开 .onnx 文件查看每个 node 的类型,排查问题
✅ 方案 2:使用 OpenVINO 或 TensorRT(适用于优化部署)
若是 NVIDIA 平台:TensorRT 可以加速大多数兼容模型(比 ONNXRuntime-GPU 更强)
若是 Intel 平台:OpenVINO 会是更适合的加速方式
✅ 方案 3:使用 onnxruntime-tools 检查模型兼容性
pip install onnxruntime-tools
python -m onnxruntime.tools.convert_onnx_models_to_ort -m your_model.onnx
这会尝试生成一个 .ort 文件并报告哪些算子不支持 GPU。