大模型部署基础:推理流程、部署方式与推理引擎
大模型从训练完成到真正对外提供服务,中间隔着一条名为“部署”的鸿沟。训练阶段关注的是如何降低 Loss,而部署阶段关注的是如何在有限的算力、内存、带宽和延迟约束下,将模型能力稳定、高效地释放出来。本章作为性能基准测试的前置基础,将系统梳理大模型推理的基本流程、三种主流部署形态(云端、边缘、本地)以及当前工业界最常用的推理引擎(vLLM、TensorRT-LLM、TGI),为后续章节的基准测试方法、指标解读和调优实践建立统一的认知框架。
上图从三个维度勾勒了大模型部署的核心骨架:推理流程决定了性能瓶颈的位置,部署形态决定了资源约束与优化目标,推理引擎则决定了底层算力释放的效率。下面逐一展开。
2.1 大模型推理的基本流程:从输入到输出的完整链路
核心原理:Prefill 与 Decode 的两阶段本质
大模型推理(Inference)与训练的本质区别在于:训练是前向+反向传播更新权重,而推理只做前向计算,且以自回归(Autoregressive)方式逐 Token 生成输出。整个推理过程可拆解为两个计算特征截然不同的阶段:
- Prefill(预填充)阶段:将用户输入的 Prompt 一次性编码为 KV Cache(键值缓存),并行计算所有输入 Token 的注意力分数。此阶段属于计算密集型(Compute-bound),GPU 利用率高,耗时主要取决于输入长度和模型参数量。
- Decode(解码)阶段:逐个生成输出 Token,每生成一个 Token 需要读取全部 KV Cache 并更新。此阶段属于访存密集型(Memory-bound),GPU 算力利用率通常不足 30%,耗时主要取决于模型大小、KV Cache 容量和显存带宽。
理解这两个阶段的差异是性能调优的起点。例如,在基准测试中,如果测试数据以短 Prompt 长输出为主,则 Decode 阶段主导延迟;如果以长 Prompt 短输出为主,则 Prefill 阶段主导首 Token 延迟(TTFT)。
判断方法:识别推理链路中的关键性能指标
在实际部署中,我们需要通过一组指标来量化推理流程的健康度。下表列出了与推理流程直接相关的核心指标及其含义:
| 指标名称 | 缩写 | 定义 | 对应阶段 | 典型优化手段 |
|---|---|---|---|---|
| 首 Token 延迟 | TTFT | 从请求发出到收到第一个输出 Token 的时间 | Prefill | 减少 Prompt 长度、使用投机采样 |
| 单 Token 生成延迟 | TPOT | 生成每个输出 Token 的平均耗时 | Decode | KV Cache 量化、减少模型层数 |
| 端到端延迟 | E2E Latency | 完整请求的总耗时 | 全流程 | 优化 Prefill/Decode 平衡 |
| 吞吐量 | Throughput | 单位时间处理的请求数或 Token 数 | 全流程 | Continuous Batching、动态批处理 |
| 显存占用 | VRAM Usage | 模型权重 + KV Cache + 激活值 | 全流程 | 量化、PagedAttention、KV Cache 复用 |
案例拆解:一个在线聊天机器人的推理链路分析
假设我们部署一个 7B 参数的对话模型,用户输入 200 Token 的 Prompt,期望输出 500 Token 的回答。在 A100 80G 显卡上,我们观察到:
- 初始现象:TTFT 为 800ms,TPOT 为 45ms,端到端延迟约 23.3s,吞吐量仅 21 Token/s,远低于业务要求的 50 Token/s。
- 分析过程:通过 profiling 工具发现,Prefill 阶段 GPU 利用率达 85%,但耗时仅 0.8s;Decode 阶段 GPU 利用率仅 18%,耗时 22.5s,占端到端延迟的 96.5%。瓶颈明确指向 Decode 阶段的访存瓶颈。
- 操作步骤:① 启用 vLLM 的 PagedAttention 减少显存碎片;② 开启 Continuous Batching 将并发请求从 1 提升至 8;③ 将 KV Cache 精度从 FP16 降为 FP8。
- 结果对比:优化后 TPOT 降至 28ms,吞吐量提升至 68 Token/s,端到端延迟降至 14.8s,满足业务要求。
- 复盘经验:Decode 阶段的优化空间远大于 Prefill 阶段;批处理大小是吞吐量的杠杆,但受限于显存容量。
2.2 部署方式:云端、边缘与本地
核心原理:三种形态的资源边界与优化目标
部署方式的选择本质上是延迟、成本、数据安全、算力规模四者的权衡。云端部署追求弹性与高吞吐;边缘部署追求低延迟与数据本地化;本地部署追求完全可控与私有化。三者的技术栈差异显著:
- 云端部署:通常使用 A100/H100 等数据中心 GPU,配合 Kubernetes 进行弹性伸缩,通过 API Gateway 对外提供 REST/gRPC 服务。适合大规模并发、模型频繁迭代的场景。
- 边缘部署:使用 Jetson Orin、边缘服务器等中低功耗设备,模型需经过量化(INT8/INT4)或蒸馏压缩。适合实时性要求高、网络不稳定、数据隐私敏感的场景。
- 本地部署:使用单张或多张消费级/专业级 GPU(如 RTX 4090、A6000),模型可保持 FP16 精度。适合企业内部知识库、代码辅助等中等并发场景。
判断方法:部署形态选择决策清单
在项目启动前,建议按以下顺序进行决策:
- 数据合规性:数据是否允许离开本地?若否,直接选择本地或边缘部署。
- 延迟预算:业务要求的 P99 延迟是多少?若小于 50ms,边缘部署优先;若可接受 200ms 以上,云端部署即可。
- 并发规模:峰值 QPS 是多少?若超过 100,云端弹性扩容更经济;若低于 10,本地单卡即可。
- 成本模型:对比云端按量付费与本地硬件折旧+电费+运维成本,通常以 3 年为周期计算总拥有成本(TCO)。
案例拆解:某金融企业的智能客服部署选型
某证券公司需要部署一个 13B 参数的智能客服模型,处理客户咨询。约束条件:① 客户数据涉及个人隐私,不能出域;② 业务要求首响应时间小于 1.5s;③ 日请求量约 5 万次,峰值 QPS 约 20。
- 方案对比:云端部署(公有云)因数据合规被否决;边缘部署(Jetson)算力不足,13B 模型 INT8 量化后仍需 16GB 显存,Jetson Orin 64G 勉强可跑但延迟超标;本地部署(2×RTX 4090)满足算力与合规要求。
- 实施过程:采用 TensorRT-LLM 对模型进行 FP8 量化,使用张量并行(Tensor Parallelism)将模型拆分到两张 4090 上。实测 TTFT 为 0.9s,TPOT 为 35ms,满足业务要求。
- 结果与代价:硬件投入约 5 万元,电费与运维成本约 2000 元/月;相比公有云按量付费(约 1.2 万元/月),一年半即可收回成本。
- 复盘:本地部署并非“省钱”的代名词,当并发规模增长到 QPS>100 时,本地扩容成本将急剧上升,届时需重新评估云端方案。
2.3 常见推理引擎:vLLM、TensorRT-LLM 与 TGI
核心原理:推理引擎的三大核心能力
推理引擎的本质是调度器 + 显存管理器 + 计算优化器的组合。不同引擎的差异主要体现在:
- 批处理策略:静态批处理(等待凑满一批再计算) vs 连续批处理(Continuous Batching,一个请求的 Decode 完成后立即插入新请求)。后者可显著提升 GPU 利用率。
- 显存管理:传统方式为预分配固定大小的 KV Cache,容易产生碎片;vLLM 的 PagedAttention 将 KV Cache 分页管理,按需分配,显存利用率提升至 90% 以上。
- 计算图优化:TensorRT-LLM 在编译阶段进行算子融合、层融合、精度校准,生成高度优化的 TensorRT 引擎,但需要针对具体 GPU 型号编译,且编译时间较长。
对比分析:三大引擎的选型参考
| 维度 | vLLM | TensorRT-LLM | TGI |
|---|---|---|---|
| 开发语言 | Python + CUDA | C++ + Python API | Rust + Python |
| 显存优化 | PagedAttention(分页) | KV Cache 量化 + 内存池 | FlashAttention + 量化 |
| 量化支持 | AWQ、GPTQ、FP8 | FP8、INT4、INT8(SmoothQuant) | GPTQ、AWQ、FP8 |
| 硬件适配 | NVIDIA GPU(通用) | 仅 NVIDIA GPU(需编译) | NVIDIA/AMD/CPU |
| 易用性 | ⭐️⭐️⭐️⭐️⭐️(开箱即用) | ⭐️⭐️(需编译调优) | ⭐️⭐️⭐️⭐️(HF 生态) |
| 典型场景 | 高吞吐在线服务 | 极致延迟/吞吐优化 | 快速原型 + 生产 |
实战场景:如何选择与切换引擎
以一个实际项目为例:某团队需要将 Llama-3-8B 部署为内部代码补全服务,要求 P99 延迟小于 100ms,吞吐量大于 100 Token/s。
- 初始尝试:直接使用 vLLM 默认配置,实测 P99 延迟 150ms,吞吐量 80 Token/s,不达标。
- 调优过程:① 在 vLLM 中开启
--enable-prefix-caching复用公共代码前缀的 KV Cache;② 将--max-num-seqs从 256 调至 512;③ 切换至 TensorRT-LLM,使用 FP8 量化并编译引擎。 - 结果对比:vLLM 调优后 P99 降至 120ms,吞吐 95 Token/s;TensorRT-LLM 编译后 P99 为 85ms,吞吐 130 Token/s,达标。
- 代价与决策:TensorRT-LLM 编译耗时约 40 分钟,且后续模型更新需重新编译。考虑到模型迭代频率较低(每月一次),最终选择 TensorRT-LLM 作为生产引擎,vLLM 保留为开发环境。