训练 vs. 推理
首先必须区分两个关键阶段:

- 训练:这是一个 “学习” 的过程,使用海量数据和强大的计算资源(如GPU集群),通过反复迭代调整模型内部数以亿计的参数,最终得到一个“知识库”(模型文件,如
.pt,.onnx,.pb),这个过程通常耗时、耗电、昂贵。 - 推理:这是一个 “应用” 的过程,将训练好的模型部署到实际环境中(服务器、手机、边缘设备),输入新的、未见过的数据,让模型基于学到的“知识”进行计算,并输出预测结果(分类标签、检测框、生成的文本)。推理引擎就是专门为高效、稳定地执行这个“应用”过程而设计的软件系统。
推理引擎的核心工作流程
一个典型的推理请求会经历以下阶段:
-
- 引擎读取训练后保存的模型文件(如PyTorch的
.pt、TensorFlow的.pb或通用的.onnx格式)。 - 解析模型的计算图,计算图是一个有向无环图,定义了模型中所有算子(如卷积、矩阵乘法、激活函数)的执行顺序和数据依赖关系。
- 引擎读取训练后保存的模型文件(如PyTorch的
-
图优化与编译:
-
运行时调度与执行:
- 引擎管理输入数据的加载(如将图片预处理成张量)。
- 根据优化后的计算图,调度各个算子在合适的计算单元(CPU核心、GPU流处理器)上执行。
- 高效管理数据在内存和计算单元之间的流动。
-
输出后处理:
推理引擎的关键优化技术
为了达到高性能(高吞吐、低延迟)和高效率(低资源消耗),推理引擎采用了多种优化技术:
-
量化:
-
剪枝:
-
硬件特定优化:
-
动态批处理:
主要挑战
-
延迟 vs. 吞吐量的权衡:
-
精度 vs. 效率的权衡:
量化、剪枝会损失精度,需要在可接受的精度损失范围内追求极致的效率。
-
硬件多样性:
-
动态输入:
对于输入尺寸可变的模型(如NLP中句子长度可变),优化和内存管理更为复杂。
典型推理引擎举例
-
通用引擎:
- ONNX Runtime:微软推出,支持跨平台和多硬件后端,是ONNX模型的“官方”运行时。
- TensorRT:NVIDIA推出,针对NVIDIA GPU的极致优化引擎,特别擅长算子融合和低精度推理。
- OpenVINO:英特尔推出,主要优化Intel CPU、集成显卡和VPU。
- TFLite / Core ML:分别针对移动端Android和iOS设备的轻量级引擎。
-
大语言模型专用优化:
- vLLM:通过 PagedAttention 等技术,极高地优化了LLM的吞吐量和内存使用。
- TGI:Hugging Face推出的推理引擎,支持流行LLM,并具有连续批处理、流式输出等高级功能。
- Triton Inference Server:NVIDIA的推理服务化平台,支持多种框架的模型,擅长动态批处理和模型流水线。
推理引擎的本质,是一个将训练好的、通用的深度学习模型,针对特定部署场景(硬件、延迟要求、功耗限制)进行“翻译”和“精修”,并将其高效执行出来的系统软件。
它架起了AI模型研究与实际应用落地的桥梁,没有高效的推理引擎,再先进的模型也无法在真实世界中发挥价值,随着模型(尤其是大语言模型)的日益复杂,推理引擎的技术也在飞速发展,其重要性愈发凸显。
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。