Skip to content

本篇首先分析Transformers 库与推理引擎在AI软件栈中的作用和分工是怎么样的。然后详细分析,对于不同的推理引擎,走什么样的路径处理计算图。

Hugging Face Transformers 库 & Hub

  • 角色:Transformers 库的核心职责是模型研发、定义和标准化。它提供了用 Python 实现的、易于理解和修改的模型架构参考代码。
  • 产出:当一个模型训练完成并使用 model.save_pretrained 保存时,它会生成一套标准化的“设计文件”,通常包括:
    • config.json:定义模型架构的元数据(如层数、头数、隐藏层大小等)。
    • *.safetensors 或 pytorch_model.bin:存储模型训练好的权重。
    • tokenizer.json 及相关文件:定义文本预处理(分词)的规则。
  • 本质:这是一个为灵活性和易用性而设计的环境,非常适合研究和微调,但其原生的 Python 推理逻辑并非为极致的生产性能而生。

推理引擎:高度优化的执行器

  • 角色:推理引擎的唯一目标是以最高的性能(低延迟、高吞吐)在特定硬件上执行模型推理。它们是为部署和生产而生的。
  • 工作方式:它们会“读取”由 Transformers 库生成的“设计蓝图”(模型配置和权重),然后利用 C++/CUDA/专用硬件指令集等底层技术,将模型转换并编译成一个为特定硬件高度优化的、可执行的格式。

总结来说,Transformers 库负责“是什么模型”,而推理引擎负责“如何最高效地运行这个模型”。


从原始文件到推理格式:不同引擎的转换与优化路径

从如何处理计算图的角度,不同类型的推理引擎采用了不同的策略来消费 Transformers 模型并进行优化。下面我们以几类主流引擎为例,详细拆解其工作流程。

类别 A:通用图编译器引擎 (如 NVIDIA TensorRT, ONNX Runtime)

这类引擎通常依赖一个中间表示(Intermediate Representation, IR),最常见的就是 ONNX。

工作流程 (以 TensorRT 为例,通过 Optimum 桥接):

起点:HF Transformers 模型

  • 我们拥有一个保存在本地或 Hub 上的 PyTorch 模型。

步骤一:导出为 ONNX (Intermediate Representation)

  • 工具:使用 Hugging Face 的 Optimum 库。
  • 过程Optimum 会加载 Transformers 模型,然后通过 PyTorch 的 torch.export 或 torch.onnx.export 功能,将模型的计算图“追踪”(Trace)下来。这个过程会执行一次模型的 forward pass,记录下所有的计算操作,并将它们转换成 ONNX 图的节点和边。
  • 产出:一个 .onnx 文件。这是一个静态的、与框架无关的计算图。

步骤二:编译为 TensorRT Engine (硬件特定的图优化)

  • 工具:TensorRT Builder。
  • 过程:TensorRT Builder 会解析 .onnx 文件,并进行一系列极其深入的、针对 NVIDIA GPU 的优化。这是图优化的核心环节
    • 层与张量融合 (Layer & Tensor Fusion):将多个独立的计算层(如 Conv + Bias + ReLU)融合成一个单一的、高效的 CUDA 核(Kernel),极大减少内存读写和核启动开销。
    • 算子优化:用 TensorRT 内部高度优化的 cuDNN/cuBLAS-LT 内核替换 ONNX 中的标准算子。
    • 精度校准 (Precision Calibration):将模型的精度从 FP32 安全地转换为 FP16 或 INT8,利用 Tensor Core 加速计算,同时最小化精度损失。
    • 内核自动调整 (Kernel Auto-Tuning):根据目标 GPU 架构(如 Ampere, Hopper)和输入尺寸,选择最优的算法和 CUDA 内核实现。
    • 动态 Shape 优化:为输入尺寸可变的情况(如不同长度的句子)生成优化的执行策略。
  • 产出:一个 .plan 或 .engine 文件。这是一个针对特定 GPU、特定 TensorRT 版本、特定精度模式编译好的、不可移植的二进制文件。

步骤三:部署与推理

  • 使用 TensorRT Runtime 加载 .engine 文件,输入数据进行高速推理。

ONNX Runtime 的流程类似,但它通常是在加载 .onnx 模型时进行即时(JIT)或预先(AOT)的图优化,其优化程度和硬件绑定性没有 TensorRT 那么极致,但换来了更好的跨平台性。

类别 B:专用 LLM 文本生成引擎 (如 vLLM, TGI)

这类引擎为大语言模型(LLM)的自回归生成任务做了特殊优化,它们的“转换”过程和优化重点与通用引擎不同。

工作流程 (以 vLLM 为例):

起点:HF Transformers 模型

  • 直接指定 Hub 上的模型 ID 或本地路径。

转换/加载过程:动态重构与权重映射

  • 无静态 IR 转换:vLLM 不经过 ONNX 这类中间格式。它直接读取 config.json 来理解模型架构,并加载 .safetensors 中的权重。
  • 内部重实现:vLLM 内部用 C++/CUDA 重新实现了 Transformer 的各个模块(如 Attention、MLP)。
  • 权重加载:它将从 HF 模型文件中加载的权重,直接映射到自己内部优化过的模型结构的相应参数上。

优化方式:运行时系统 (Runtime System) 优化

  • vLLM 的魔力不在于静态的图编译,而在于其创新的运行时调度系统这里的“优化”是运行时的,而非编译时的
    • PagedAttention:核心创新。它像操作系统管理虚拟内存一样,以非连续的块(Block)来管理巨大的 KV Cache,从根本上解决了内存碎片和浪费问题,极大地提升了批处理大小(Batch Size)。
    • 连续批处理 (Continuous Batching):当一个序列生成结束时,可以立刻将其资源释放,并插入新的请求,无需等待整个批次完成,从而将 GPU 利用率推向极致。
    • 优化的 CUDA 核:集成了 FlashAttention/PagedAttention 等高度优化的注意力计算核。

TGI (Text Generation Inference) 采用了类似的思想,通过高效的 KV Cache 管理、连续批处理和 safetensors 的快速加载机制来实现高性能。

类别 C:边缘/CPU 优化引擎 (如 llama.cpp)

这类引擎专注于在消费级硬件(尤其是 CPU 和 Apple Silicon)上高效运行,其核心优化手段是量化专门的文件格式

工作流程:

起点:HF Transformers 模型

步骤一:格式转换与量化

  • 工具llama.cpp 项目中提供的 convert.py 脚本。
  • 过程
    • 脚本会加载 HF 模型的权重和配置。
    • 然后,它将权重从标准的浮点数(FP32/FP16)量化为低比特整数(如 4-bit, 5-bit, 8-bit)。llama.cpp 的 GGML/GGUF 格式支持数十种复杂的量化策略(如 Q4_K_M),以在最大化压缩率和最小化精度损失之间取得平衡。
    • 最后,将量化后的权重和模型元数据打包成一个单一的、紧凑的 .gguf 文件。
  • 图优化:这里的“图优化”不那么明显,更多的是数据布局优化算子替换。GGUF 格式会以最优的方式组织数据以利于内存映射和访问。在运行时,llama.cpp 会调用针对特定 CPU 架构(如 AVX2, NEON)高度优化的 C++ 函数来执行计算。

步骤二:部署与推理

  • 使用 llama.cpp 的可执行文件直接加载 .gguf 模型进行推理。

总结表

下面通过一种表格整理上面的三种模型格式,尤其转换过程。

推理引擎主要使用场景输入格式 (from HF)"转换" 过程关键优化技术
TensorRT (via Optimum)NVIDIA GPU 上的通用高性能推理HF 模型目录HF -> ONNX -> .engine静态图编译:层/张量融合、精度校准 (INT8/FP16)、内核自动调整
ONNX Runtime (via Optimum)跨平台通用推理HF 模型目录HF -> .onnx图优化:常量折叠、算子融合、冗余节点消除
vLLM / TGILLM 文本生成 (云端/服务器)HF 模型目录 (直接加载)动态加载与重实现运行时系统优化:PagedAttention, 连续批处理, 优化的 CUDA 核
llama.cppLLM 文本生成 (CPU/边缘设备)HF 模型目录HF -> .gguf (转换脚本)深度量化 (4/5/8-bit), 优化的 C++ 实现 (SIMD), 内存高效格式

结语

Transformers 库及其 Hub 已经成为 AI 模型事实上的“发行标准”。各种主流推理引擎,无论其技术路径如何,都将兼容和消费这种标准格式作为其生态的起点。它们通过静态图编译、运行时系统创新或深度量化等不同手段,将通用的模型设计蓝图转化为在特定硬件上极致高效的生产力工具,共同构成了从研发到部署的完整、健康的生态链。

持续沉淀企业 AI 技术内容。