Skip to content

模型服务化与编排

本页速览 把模型从 notebook 变成稳定线上服务:推理服务架构分层(API gateway / 推理引擎 / 模型仓库 / 负载均衡 / 健康检查)、部署形态、主流框架(Triton / vLLM / TGI / SGLang / Ray Serve)、多模型路由、弹性伸缩、监控指标与 MLOps 闭环。

模型服务化与编排

把一个能跑通的模型,变成一个能扛流量、可观测、可回滚的线上服务,中间隔着整套工程。这就是模型服务化(model serving)——本站什么是推理加速讲"怎么让模型跑得快",本文讲"怎么让模型稳稳地对外提供"。它是批处理与请求调度(怎么把请求塞进 batch)的上层、部署设计原则的落地、Triton 推理服务vLLM这些引擎案例的"外壳"。

本文定位

本文不是某个具体框架的使用教程,而是建立"推理服务长什么样"的心智模型。读完你能回答:服务分几层、各层管什么、选什么框架、怎么监控、怎么伸缩。具体框架实操见对应案例研究,落地原则见部署设计原则

概念定义:模型服务化的五个诉求

一个生产级推理服务要同时满足五件事,缺一不可:

诉求含义不做会怎样
可用性服务不挂、挂了能快速恢复单点故障,一次 OOM 全站宕机
可伸缩流量涨能加卡、流量落能省钱白天扛不住、晚上烧钱
可观测知道延迟、吞吐、错误率、GPU 利用率黑盒运营,出问题靠猜
可演进模型能热更新、灰度发布、回滚发版停服、回滚靠重启
成本可控单 token 成本可量化、可优化GPU 利用率 < 30%、账单失控

这五件事是服务化与"裸跑模型脚本"的根本区别。裸脚本能验证"模型行不行",服务化验证"系统能不能上线"。详见部署设计原则

一、推理服务的架构分层

一个成熟的推理服务通常分五层,从外到内:

text
┌──────────────────────────────────────────────────┐
│  ① API Gateway / 接入层                          │  ← 鉴权、限流、路由
├──────────────────────────────────────────────────┤
│  ② Load Balancer / 调度层                        │  ← 请求分发、负载均衡
├──────────────────────────────────────────────────┤
│  ③ Inference Engine / 推理引擎层                 │  ← vLLM、TensorRT-LLM、TGI
├──────────────────────────────────────────────────┤
│  ④ Model Repository / 模型仓库层                 │  ← 版本化、热加载
├──────────────────────────────────────────────────┤
│  ⑤ Hardware / 硬件层                             │  ← GPU/CPU/NPU + 监控
└──────────────────────────────────────────────────┘

① API Gateway(接入层)

对外暴露 HTTP/gRPC 接口,负责鉴权(API key / OAuth)、限流(令牌桶 / 漏桶)、路由(按模型名 / 租户分流)。LLM 场景还要处理流式响应(SSE / WebSocket)与长连接超时——生成 2000 token 可能要几十秒,传统网关默认 30s 超时会截断。

② Load Balancer(调度层)

把请求分发到后端推理实例。常见策略:

策略做法适用
轮询依次分发实例同质、请求同质
最少连接发给当前并发最低的LLM 场景默认(请求耗时不一)
一致性哈希相同 prompt 路由到同一实例配合prefix caching
按模型路由不同模型到不同实例池多模型服务

LLM 推理的负载均衡难点:请求耗时长且差异大(短 prompt 0.5s、长 prompt 10s),简单轮询会让某实例堆积长请求。最少连接 + 健康检查是事实标准。

③ Inference Engine(推理引擎层)

真正跑模型的一层,本站的核心。主流引擎见推理引擎选型对比

  • vLLM:开源社区最大,PagedAttention + continuous batching;
  • TensorRT-LLM:NVIDIA 官方,FP8 + in-flight batching;
  • TGI:HuggingFace 出品,与 Transformers 生态贴近;
  • Triton Inference Server:NVIDIA 多后端服务框架,统一管理多种引擎。

引擎层内部的批处理与调度详见批处理与请求调度,性能指标定义详见延迟、吞吐与并发

④ Model Repository(模型仓库层)

管理模型文件的版本化、存储与热加载。要求:

  • 版本化:每次发版有唯一版本号,可回滚;
  • 热加载:不停服加载新模型(Triton 的 --model-control=explicit + poll);
  • A/B 与灰度:同时跑两个版本按比例分流;
  • 存储格式:LLM 常用 SafeTensors / GGUF / TensorRT Plan,详见vLLMllama.cpp

工具上,MLflow Model Registry 是开源事实标准,配合对象存储(S3/OSS)做模型仓库。

⑤ Hardware(硬件层)

GPU/CPU/NPU,及配套的驱动、CUDA、NCCL。硬件选型见硬件基础速查,硬件上的实测数据见基准数据与工具档案。这层的监控(GPU 利用率、显存、温度)是上层调度决策的依据。

二、部署形态

推理服务有四种典型部署形态,适用场景与成本结构完全不同。

单机单卡

最简单:一个进程 + 一张卡 + 一个模型。适合原型验证小流量内部服务。瓶颈是单卡显存与算力——70B 模型 FP16 放不下,必须量化或升级硬件。

单机多卡(TP)

一张机器多张卡,张量并行把单层权重切到多卡。要求 NVLink 互联(详见硬件基础速查),适合 70B+ 模型单机推理。8×H100 SXM 是常见配置。

多机多卡(PP / DP)

  • 流水线并行(PP):模型按层切到多机,通信少但有气泡,适合超大模型(405B);
  • 数据并行(DP):多机各跑完整模型副本,前加负载均衡,适合扩吞吐(流量大时加副本)。

详见分布式推理(TP/PP)

Serverless / 边缘

  • Serverless:按请求冷启动实例,适合突发流量低频调用。LLM 冷启动慢(模型加载几分钟),需配合预热与模型缓存;
  • 边缘部署:手机/车机/IoT,必须 INT4 量化 + 小模型,详见移动端部署llama.cpp

LLM 不适合裸 Serverless

LLM 模型动辄几十 GB,冷启动加载到显存要几十秒到几分钟,远超传统服务的毫秒级。常见折中:常驻实例 + 自动伸缩(保底几实例不关,流量涨时扩),而非纯按请求冷启动。详见部署设计原则

三、主流服务框架对比

不同框架定位不同,不是"谁取代谁"。

框架定位强项适合
Triton Inference Server多后端服务框架统一管理 TensorRT/PyTorch/ONNX 多模型,动态 batching多模型/多引擎统一服务
vLLM serverLLM 专用引擎+服务PagedAttention、continuous batching、OpenAI 兼容 API单一 LLM 高吞吐服务
TGIHF 官方 LLM 服务与 Transformers/Hub 深度集成HF 生态用户
SGLang结构化生成框架RadixAttention 前缀缓存、JSON/工具调用结构化输出、多轮对话
Ray Serve通用 ML 服务框架弹性伸缩、多模型流水线、Python 原生复杂编排、多模型 pipeline
BentoMLML 模型打包部署模型打包成可移植 image跨环境部署

选框架的三条经验

  1. 单一 LLM 服务:直接 vLLM 或 TensorRT-LLM,自带 HTTP 服务与 continuous batching;
  2. 多模型/多引擎统一:上 Triton,把 vLLM/TensorRT 作为 backend 接入;
  3. 复杂编排(多模型 pipeline、RAG):Ray Serve 或 BentoML 做上层编排,下层调 vLLM/Triton。 不要一上来就上 Ray Serve——简单 LLM 服务用 vLLM 一行命令即可。详见推理引擎选型对比

四、多模型路由与流量管理

线上服务常同时部署多个模型(不同规模、不同任务、不同版本),路由层决定"请求到哪个模型"。

路由策略

策略做法场景
按模型名请求带 model=llama-3-70b 路由多模型并存(OpenAI 兼容 API)
按任务分类→小模型,生成→大模型任务异构
按租户VIP 客户走大模型,免费走小模型多租户 SLA
按成本简单请求走小模型,复杂走大模型成本优化
A/B 灰度5% 流量到新版本模型发版
级联小模型先答,不确定再升级大模型级联推理降本

级联推理(cascade inference)

成本优化的高级玩法:先用小模型(8B)生成,用置信度判断;不确定的请求升级到大模型(70B)重答。整体成本可降到原来的 20–30%,质量接近全用大模型。详见调参与性能调优

五、弹性伸缩与容量规划

弹性伸缩的核心是"按负载增减推理实例"。LLM 服务的伸缩比传统服务难——单个实例加载模型慢、显存大、启动后还需预热。

伸缩指标

指标含义伸缩触发
QPS每秒请求数超阈值扩容
并发数当前在途请求超单实例上限扩容
GPU 利用率算力使用比例> 80% 扩,< 30% 缩
P99 延迟尾部延迟超过 SLA 扩容
KV cache 占用显存压力接近上限扩容

容量规划:从 Little's Law 推导

根据Little's Law(并发 = 吞吐 × 延迟),给定业务目标即可反推硬件需求:

text
目标:1000 QPS,P99 延迟 < 2s
→ 最大并发 = 1000 × 2 = 2000
→ 单 H100 能撑 ~200 并发(Llama-3-70B INT4)
→ 需要 2000 / 200 = 10 张 H100
→ 加 30% 冗余 = 13 张

单卡并发数要通过基准测试实测,不能拍脑袋。详见延迟、吞吐与并发基准数据与工具档案

LLM 伸缩的三个坑

  1. 冷启动慢:实例拉起到能服务要几十秒到几分钟(模型加载+预热),不能像 web 服务那样秒级伸缩——要提前伸缩(基于 QPS 趋势预测);
  2. 缩容别太激进:在途请求要等完,直接 kill 会丢请求——设 grace period;
  3. 显存碎片:长期运行后 KV cache 碎片化,吞吐下降——定期重启实例(如每 24h)。 详见常见陷阱与反模式

六、监控指标与可观测性

"没有监控的服务等于黑盒"——LLM 推理服务的监控比传统服务更复杂,因为要同时看业务、引擎、硬件三层。

三层监控

层级指标工具
业务QPS、P50/P95/P99 延迟、错误率、token 吞吐Prometheus + Grafana
引擎batch 大小、KV cache 命中率、queue 长度、prefix cache 命中vLLM metrics / Triton metrics
硬件GPU 利用率、显存占用、温度、功耗DCGM Exporter

关键指标详解

  • P50/P95/P99 延迟:必须分 TTFT 与 TPOT 看——TTFT 反映 prefill,TPOT 反映 decode,瓶颈完全不同。只看平均会被长尾掩盖。详见延迟、吞吐与并发
  • GPU 利用率:注意区分"SM 利用率"与"Tensor Core 利用率"——前者高不代表后者高,可能在做访存。配合 Nsight Systems 看时间线。
  • KV cache 命中率prefix caching 的命中率,直接决定多租户场景的 TTFT。低于 20% 说明 prompt 没复用价值或缓存策略有问题。
  • queue 长度:请求在引擎内排队数——持续 > 0 说明已饱和,该扩容了。

监控的黄金信号

四个信号必看:延迟(latency)、流量(traffic)、错误(errors)、饱和度(saturation)——Google SRE 的"四个黄金信号"在 LLM 推理上同样适用。任一信号异常都该触发告警,详见部署设计原则

七、MLOps 闭环:从部署到再训练

模型服务化不是终点,而是闭环的一环。完整的 MLOps 循环:

text
训练 → 评估 → 部署 → 监控 → 收集线上数据 → 再训练
                ↑                         │
                └─────────────────────────┘

线上推理阶段要为闭环贡献两件事:

  1. 数据飞轮:记录用户真实输入与模型输出(脱敏后),筛高价值样本回流训练集,详见部署设计原则
  2. 漂移检测:监控输入分布(prompt 长度、话题)与输出分布(token 数、拒绝率)的变化,触发再训练。术语见术语表

LLM 场景的漂移更隐蔽——用户提问风格随时间变化(新话题、新指令),模型不会"报错"只会"答得不好"。需要定期用基准测试在固定评测集上回归。

八、权衡与取舍

  • 延迟 vs 成本:小 batch 低延迟但 GPU 利用率低、成本高;大 batch 高吞吐但延迟高——交互式重延迟,批处理重吞吐;
  • 单机 vs 分布式:单机简单但上限低;分布式能扩但要 NVLink 与调度开销,详见分布式推理
  • 自建 vs 托管:自建灵活但运维重;托管(各云厂商 LLM 推理服务)省心但贵且锁定,详见部署设计原则
  • 精度 vs 容量FP8/INT4 量化腾出显存可多放并发,但精度损失要监控质量回归。

延伸阅读

参考资料