1. 推理引擎概述

大家好,我是这门课的主讲。做了这么多年大模型推理优化,我见过太多团队把模型训出来,结果上线时卡得没法用。说白了,推理引擎就是解决这个问题的——它让模型真正跑起来,跑得快,跑得稳。

这一章,我们先聊聊推理引擎到底是什么,它在整个大模型生态里扮演什么角色,以及市面上主流的几个引擎各自有什么特点。嗯,这部分内容偏概念,但很重要。你想想看,选错引擎,后面所有优化工作都得推倒重来。

什么是大模型推理引擎

大模型推理引擎,你可以把它理解成一个「高性能运行时」。它负责把训练好的模型加载到内存里,接收用户的输入请求,然后高效地执行前向计算,最后把生成的结果返回给用户。

听起来很简单?其实不然。大模型推理和传统模型推理有个本质区别——显存瓶颈。一个 70B 的模型,光参数就要占 140GB 显存(FP16)。再加上 KV Cache、中间激活值,单张 A100 80G 根本放不下。推理引擎要做的,就是在这些硬件限制下,把吞吐量和延迟做到极致。

核心矛盾:大模型推理的本质,是在「显存墙」和「计算墙」之间找平衡。显存放不下,就得做显存管理;计算来不及,就得做算子优化。推理引擎就是这两堵墙之间的「建筑师」。

我个人习惯把推理引擎拆成三个层次来看:

  • 调度层:管理请求排队、批处理、动态调度。谁先来?谁先走?要不要等一等凑个 batch?
  • 执行层:负责具体的计算。包括算子实现、显存管理、KV Cache 管理、量化推理等。
  • 服务层:对外提供 API,处理流式输出、多轮对话、并发控制等。

这三个层次,后面每一章我们都会深入拆解。今天先有个整体印象就好。

推理引擎的定位与价值

推理引擎在整个大模型技术栈里,处于「承上启下」的位置。上面是应用层,下面是硬件层。

我画了一张图,帮你理解这个定位:

大模型推理引擎技术栈定位 应用层 ChatBot · 代码助手 · 智能客服 · 内容生成 推理引擎层 请求调度 · 显存管理 · 算子优化 · 量化推理 · 服务封装 训练框架层 PyTorch · TensorFlow · JAX · Megatron-LM 硬件层 NVIDIA GPU · AMD GPU · 华为昇腾 · AWS Inferentia 推理引擎是连接「训练好的模型」与「生产环境硬件」的关键桥梁

推理引擎的价值,我总结为三点:

  1. 吞吐量提升:同样的硬件,推理引擎能让你服务更多用户。我见过一个案例,用 vLLM 替代原生 PyTorch 推理,吞吐量直接翻了 8 倍。
  2. 延迟降低:首 token 延迟和每个 token 的生成速度,直接影响用户体验。推理引擎通过算子融合、量化、KV Cache 优化等手段,把延迟压到极致。
  3. 显存效率:大模型最怕 OOM。好的推理引擎能把显存利用率从 30% 提到 80% 以上。我曾经踩过一个坑——用原生 PyTorch 跑 LLaMA-65B,单卡根本放不下,换了 TensorRT-LLM 配合 INT4 量化,一张 A100 就搞定了。

我的建议:选推理引擎之前,先搞清楚你的核心指标。是做在线对话(首 token 延迟敏感)?还是做离线批量处理(吞吐量优先)?不同的场景,引擎选型完全不同。

主流推理引擎介绍

目前市面上主流的推理引擎有三个:vLLM、TGI、TensorRT-LLM。每个都有自己的「性格」。我一个个说。

vLLM

vLLM 是 UC Berkeley 开源的推理引擎,核心卖点是 PagedAttention。这个技术解决了 KV Cache 显存碎片化的问题——它把 KV Cache 像操作系统的虚拟内存一样分页管理,显存利用率大幅提升。

我在项目中用过 vLLM 部署 LLaMA-2-70B,效果确实不错。它的 Continuous Batching 机制也很成熟,请求来了不用等,随时可以插入正在生成的 batch 里。

vLLM 的优缺点:

优势 劣势
PagedAttention 显存管理极强 对自定义算子支持有限
Continuous Batching 调度高效 量化支持不如 TensorRT-LLM 丰富
社区活跃,迭代快 多卡推理的通信优化一般
API 兼容 OpenAI 格式 对非 NVIDIA 硬件支持弱

TGI(Text Generation Inference)

TGI 是 Hugging Face 出品的推理引擎。它的优势在于和 Hugging Face 生态的无缝集成——你从 Hugging Face 下载的模型,几乎可以直接用 TGI 部署。

我记得有一次,团队需要快速上线一个 demo,模型是从 Hugging Face 拉下来的 Mistral-7B。用 TGI 部署,一行命令就搞定了。但说实话,TGI 在极致性能上不如 vLLM 和 TensorRT-LLM。

TGI 的特点:

  • 易用性:开箱即用,配置简单
  • 生态集成:原生支持 Hugging Face 模型和 tokenizer
  • 功能丰富:内置 watermark、logits processor、grammar 约束等
  • 性能中等:比原生 PyTorch 好,但不如 vLLM 和 TensorRT-LLM

避坑提醒:我曾经在生产环境用 TGI 部署了一个 13B 模型,并发一上来就 OOM。后来发现是 TGI 的显存预分配策略太保守。解决方案是手动调低 max_batch_prefill_tokens 参数。嗯,这个坑我踩过,你们别踩了。

TensorRT-LLM

TensorRT-LLM 是 NVIDIA 的亲儿子。它基于 TensorRT,做了大量针对 NVIDIA GPU 的极致优化。如果你用的是 A100/H100,TensorRT-LLM 基本是性能天花板。

它的核心优化手段包括:

  • 算子融合:把多个小算子合并成一个 kernel,减少 kernel launch 开销
  • INT4/INT8 量化:支持 SmoothQuant、AWQ、GPTQ 等多种量化方案
  • In-Flight Batching:类似 vLLM 的 Continuous Batching,但实现更底层
  • 多卡通信优化:利用 NCCL 做 tensor parallelism 和 pipeline parallelism

但 TensorRT-LLM 也有明显的缺点——编译时间长。模型需要先编译成 TensorRT engine,这个过程可能持续几十分钟甚至几小时。而且一旦模型结构变了,就得重新编译。

特性 vLLM TGI TensorRT-LLM
显存管理 PagedAttention(极强) 常规(中等) 自定义分配(强)
批处理策略 Continuous Batching Dynamic Batching In-Flight Batching
量化支持 中等 基础 丰富(INT4/INT8/FP8)
部署复杂度 低 极低 高(需编译)
性能(NVIDIA GPU) 高 中 极高
硬件兼容性 NVIDIA + AMD NVIDIA + AMD 仅 NVIDIA

我个人的经验是:

  • 如果你追求快速上线、模型经常换,选 vLLM
  • 如果你深度绑定 Hugging Face 生态、对性能要求不高,选 TGI
  • 如果你追求极致性能、硬件固定是 NVIDIA、愿意花时间做编译优化,选 TensorRT-LLM

一句话总结:vLLM 是「通用型」,TGI 是「生态型」,TensorRT-LLM 是「性能型」。没有最好的引擎,只有最适合你场景的引擎。