microsoft/onnxruntime View GitHub Homepage for Latest Official Releases
ONNX Runtime:跨平台、高性能的机器学习推理和训练加速器。
MITC++onnxruntimemicrosoft 18.1k Last Updated: October 16, 2025
ONNX Runtime (ORT)
简介
ONNX Runtime (ORT) 是一个跨平台的机器学习推理加速器,旨在加速 ONNX (Open Neural Network Exchange) 模型的推理过程。它由微软开发并开源,支持多种硬件平台和操作系统,并提供了高性能的推理能力。
核心目标:
- 加速 ONNX 模型推理: 通过优化执行图、利用硬件加速等手段,提高 ONNX 模型的推理速度。
- 跨平台支持: 支持 Windows、Linux、macOS 等操作系统,以及 CPU、GPU、FPGA 等多种硬件平台。
- 易于集成: 提供 C/C++、Python、Java、C# 等多种编程语言的 API,方便集成到各种应用中。
- 高性能: 通过各种优化技术,例如图优化、算子融合、内存优化等,实现高性能的推理。
- 可扩展性: 允许用户自定义算子和执行提供程序,以支持新的硬件平台和算法。
主要特性
- ONNX 模型支持: 完全支持 ONNX 标准,可以加载和执行符合 ONNX 规范的模型。
- 多种执行提供程序 (Execution Providers, EPs):
- CPU EP: 使用 CPU 进行推理,支持多种 CPU 指令集优化 (例如 AVX2, AVX512)。
- CUDA EP: 使用 NVIDIA GPU 进行推理,利用 CUDA 加速。
- TensorRT EP: 使用 NVIDIA TensorRT 进行推理,进一步优化 GPU 性能。
- OpenVINO EP: 使用 Intel OpenVINO 工具包进行推理,优化 Intel CPU 和 GPU 性能。
- DirectML EP: 使用 Windows DirectML API 进行推理,利用 Windows 上的 GPU 资源。
- CoreML EP: 使用 Apple CoreML 框架进行推理,优化 Apple 设备上的性能。
- 其他 EP: 还支持其他硬件平台,例如 ARM NN、ACL 等。
- 图优化: 自动优化 ONNX 模型图,例如算子融合、常量折叠、节点消除等,减少计算量和内存占用。
- 算子融合: 将多个算子合并成一个算子,减少算子之间的通信开销。
- 量化支持: 支持模型量化,将浮点数模型转换为整数模型,减少模型大小和计算量,提高推理速度。
- 动态形状支持: 支持具有动态形状的 ONNX 模型,可以处理不同大小的输入数据。
- 会话选项: 提供丰富的会话选项,可以控制推理过程的各个方面,例如线程数、内存分配、图优化级别等。
- 调试工具: 提供调试工具,可以帮助用户分析 ONNX 模型的性能瓶颈。
- 性能分析: 提供性能分析工具,可以帮助用户了解 ONNX 模型的性能指标,例如推理时间、内存占用等。
- 分布式推理: 支持分布式推理,可以将 ONNX 模型部署到多个设备上进行推理,提高推理吞吐量。
架构
ONNX Runtime 的架构主要包括以下几个部分:
- 前端 (Frontend): 负责加载 ONNX 模型,并将其转换为 ONNX Runtime 内部的表示形式。
- 图优化器 (Graph Optimizer): 负责优化 ONNX 模型图,例如算子融合、常量折叠等。
- 执行器 (Executor): 负责执行 ONNX 模型图,根据不同的执行提供程序,将算子分配到不同的硬件平台上执行。
- 执行提供程序 (Execution Provider): 负责在特定的硬件平台上执行算子,例如 CPU、GPU、FPGA 等。
- 会话 (Session): 负责管理 ONNX 模型的生命周期,包括加载模型、优化模型、执行模型、释放资源等。
使用方法
- 安装 ONNX Runtime: 可以通过 pip 安装 ONNX Runtime,例如:
pip install onnxruntime
(CPU 版本) 或pip install onnxruntime-gpu
(GPU 版本)。 - 加载 ONNX 模型: 使用
onnxruntime.InferenceSession
加载 ONNX 模型。 - 准备输入数据: 将输入数据转换为 ONNX Runtime 可以接受的格式,例如 NumPy 数组。
- 运行推理: 使用
InferenceSession.run()
方法运行推理,并获取输出结果。
示例代码 (Python):
import onnxruntime
import numpy as np
# 加载 ONNX 模型
session = onnxruntime.InferenceSession("model.onnx")
# 获取输入和输出信息
input_name = session.get_inputs()[0].name
output_name = session.get_outputs()[0].name
# 准备输入数据
input_data = np.random.randn(1, 3, 224, 224).astype(np.float32)
# 运行推理
output_data = session.run([output_name], {input_name: input_data})
# 打印输出结果
print(output_data)
适用场景
- 图像识别: 加速图像分类、目标检测、图像分割等任务的推理。
- 自然语言处理: 加速文本分类、机器翻译、文本生成等任务的推理。
- 语音识别: 加速语音识别、语音合成等任务的推理。
- 推荐系统: 加速推荐模型的推理,提高推荐效率。
- 其他机器学习任务: 可以加速各种机器学习任务的推理,例如回归、聚类等。
优势
- 高性能: 通过各种优化技术,实现高性能的推理。
- 跨平台: 支持多种操作系统和硬件平台。
- 易于集成: 提供多种编程语言的 API。
- 灵活可扩展: 允许用户自定义算子和执行提供程序。
- 活跃的社区: 拥有活跃的社区,可以获取技术支持和交流经验。
局限性
- 对 ONNX 模型格式的依赖: 只能执行 ONNX 格式的模型,需要将其他格式的模型转换为 ONNX 格式。
- 某些算子的支持可能不完善: 对于一些特殊的算子,ONNX Runtime 的支持可能不完善,需要用户自定义算子。
- 需要一定的配置和调优: 为了获得最佳性能,可能需要对 ONNX Runtime 进行一定的配置和调优。
总结
ONNX Runtime 是一个强大的机器学习推理加速器,可以帮助用户加速 ONNX 模型的推理过程,提高应用性能。它具有高性能、跨平台、易于集成、灵活可扩展等优点,适用于各种机器学习任务。