Ultralytics YOLO27: 加入候补名单。
获取 YOLO 许可
返回 Ultralytics 术语表

Inference Engine

推理引擎通过融合层、降低精度和优化内核,在目标硬件上运行训练好的模型。内容涵盖其工作原理和常见推理引擎。

推理引擎是一种用于执行经过训练的神经网络并在新数据上生成预测的软件。它接收从训练框架导出的模型,通常以计算图的形式(例如ONNX文件),针对特定处理器优化该计算图,并以尽可能低的推理延迟和内存占用运行。各种硬件类别都有对应的引擎,从数据中心 GPU到手机和微控制器皆有;在模型部署中,引擎是负责计算每个预测结果的组件。

推理引擎如何加速模型#

部署后的模型不会更新其权重,因此引擎可以舍弃训练所需的一切内容,例如用于反向传播的激活值存储,并自由改写计算图。引擎会预先计算仅依赖常量的部分,将卷积、归一化和激活等连续层融合为单个内核,让中间结果留在快速的片上内存中,并规划内存以便重复使用缓冲区。引擎还可以通过模型量化将数值精度降低到 FP16 或 INT8;对于 INT8,会使用样本数据测量激活值范围。TensorRT 等引擎随后会在实际设备上为每一层测试多个候选内核,并保留最快的内核,因此运行结果会针对该硬件进行优化:

将批归一化折叠到前一层卷积中,是最常见的改写方式之一。在推理时,归一化只会按固定数值缩放和平移各个通道,因此这些数值可以合并到卷积的权重和偏置中。PyTorch 将同样的变换实现为 fuse_conv_bn_eval:

import torch
from torch.nn.utils.fusion import fuse_conv_bn_eval

torch.manual_seed(0)

# A trained convolution followed by batch normalization (random statistics here)
conv = torch.nn.Conv2d(16, 32, kernel_size=3, padding=1).eval()
bn = torch.nn.BatchNorm2d(32).eval()
bn.running_mean.uniform_(-1, 1)
bn.running_var.uniform_(0.5, 2.0)

# Fold the normalization's scale and shift into the convolution's weights and bias
fused = fuse_conv_bn_eval(conv, bn)

# One layer now replaces two and produces the same output
x = torch.randn(1, 16, 64, 64)
with torch.inference_mode():
    diff = (bn(conv(x)) - fused(x)).abs().max().item()
print(f"Max difference after fusing: {diff:.1e}")

打印结果显示最大差异为 2.1e-06,这是浮点舍入误差:融合后的单层只需遍历一次内存,就能计算出与原来的两层相同的函数。

常见推理引擎#

  • TensorRT: NVIDIA 为其数据中心 GPU 和 Jetson 模块打造的引擎。它会为特定 GPU 型号和 TensorRT 版本构建执行计划,因此两者任一发生变化时都需要重新构建引擎。
  • OpenVINO: Intel 为其 CPU、集成和独立 GPU 以及 NPU 提供的工具套件。
  • ONNX Runtime: Microsoft 为 ONNX 模型打造的跨平台引擎,会将任务交给称为执行提供程序的硬件后端处理,包括 CUDA、TensorRT、OpenVINO 和 Core ML。
  • LiteRT: Google 的运行时,前身为 TensorFlow Lite,适用于 Android、嵌入式 Linux 和微控制器,并提供面向移动 GPU 和 NPU 的委托。
  • Core ML: Apple 的设备端框架,可在 CPU、GPU 和 Neural Engine 之间分配任务。
  • vLLM: 一种用于大型语言模型的开源引擎,提供请求调度和注意力缓存的分页内存,以便同时服务许多用户。

Ultralytics YOLO API会根据加载的文件选择引擎,因此同一个 predict 调用可以在 PyTorch 中运行 .pt 检查点,在 ONNX Runtime 中运行 .onnx 文件,在 TensorRT 中运行 .engine 文件,也可以在 OpenVINO 中运行 OpenVINO 文件夹。将 Ultralytics YOLO26 导出为 OpenVINO 格式并加载结果,即可切换引擎,无需更改其他代码:

from ultralytics import YOLO

# 将 PyTorch 模型导出为 OpenVINO 格式
model = YOLO("yolo26n.pt")
path = model.export(format="openvino")  # creates 'yolo26n_openvino_model/'

# 加载导出的文件夹后,即可通过 OpenVINO 引擎运行预测
ov_model = YOLO(path)
results = ov_model("https://ultralytics.com/images/bus.jpg")
results[0].save(filename="bus_openvino.jpg")
  • PyTorch 和其他训练框架: 保持计算图灵活,并记录用于求梯度的操作,以便设计和训练模型。它们也能运行推理,但开销比针对单个设备构建的引擎更大。
  • ONNX: 描述模型计算图和权重的文件格式。ONNX Runtime 和 TensorRT 是读取该格式的引擎。
  • 模型服务:将一个或多个引擎封装为网络服务,提供 API、请求批处理和版本管理;NVIDIA Dynamo-Triton(原名 Triton Inference Server)便是为 TensorRT、ONNX Runtime 和 PyTorch 模型提供此类服务的系统。
  • 专家系统推理引擎: 该术语较早的含义,源自基于规则的 AI。此类推理引擎通过正向或反向链推理,将 if-then 规则应用于知识库。

探索解决方案

体育领域的计算机视觉

体育领域的计算机视觉

了解 Ultralytics YOLO 如何通过球员和球追踪、表现分析、教练洞察及运动员康复,推动体育视觉技术的发展。
了解详情
航空影像计算机视觉

航空影像计算机视觉

使用 Ultralytics YOLO 将无人机和航空影像转化为农业、水产养殖、保护工作和地理空间分析的实时洞察。
了解详情
航空航天中的计算机视觉

航空航天中的计算机视觉

使用 Ultralytics YOLO 将计算机视觉应用于航空航天领域,包括飞机检查、跑道 FOD 检测、机场地面作业和复合材料缺陷检测。
了解详情
安防领域的计算机视觉

安防领域的计算机视觉

使用 Ultralytics YOLO 模型守护每个场所。视觉 AI 可用于周界监控、威胁检测、车牌识别和工作场所安全。
了解详情
机器人领域的计算机视觉

机器人领域的计算机视觉

使用 Ultralytics YOLO 模型提升智能机器的能力。机器人领域的视觉 AI 可用于自主导航、感知、目标跟踪和实时控制。
了解详情
物流中的计算机视觉

物流中的计算机视觉

借助 Ultralytics YOLO 模型优化物流流程。视觉 AI 可用于包裹检查、分拣、车辆跟踪和仓库安全实时监控。
了解详情
零售中的计算机视觉

零售中的计算机视觉

借助 Ultralytics YOLO 模型重新构想零售。视觉 AI 可用于库存跟踪、货架监控、排队管理和更深入的客户洞察。
了解详情
医疗领域的计算机视觉

医疗领域的计算机视觉

借助 Ultralytics YOLO 模型构建医疗解决方案。医疗领域的视觉 AI 可加快医学影像处理、优化诊断并监测患者。
了解详情
制造业中的计算机视觉

制造业中的计算机视觉

利用 Ultralytics YOLO 模型优化制造流程。视觉 AI 可用于质量控制、缺陷检测、个人防护装备合规检查和装配线自动化。
了解详情
汽车领域的计算机视觉

汽车领域的计算机视觉

利用 Ultralytics YOLO 模型在汽车领域应用计算机视觉。视觉 AI 可提升道路安全、驾驶辅助和车辆自动化水平,让道路更智能。
了解详情
农业中的计算机视觉

农业中的计算机视觉

借助 Ultralytics YOLO 模型,将视觉 AI 引入智慧农业。为作物监测、牲畜追踪和精准农业提供支持,从而提高产量并实现更智能的生产。
了解详情

让我们携手构建 AI 的未来!

开启你的旅程,迎接机器学习的未来