AI 入门到精通 07 · AI 推理与部署
训练只决定模型上限,推理决定模型能不能被用户用上。 工业界 80% 的算力账单花在推理而不是训练。
一、推理工程的目标矩阵
| 维度 | 含义 | 优化对象 |
|---|---|---|
| Latency (TTFT / TPOT) | 首 token 延迟 / 每 token 延迟 | 用户体验 |
| Throughput (tokens/s) | 单卡吞吐 | 成本 |
| Concurrency | 并发用户数 | 服务能力 |
| Cost ($/1M tokens) | 单位 token 成本 | 商业可行性 |
| Quality | 量化 / 蒸馏后是否掉点 | 用户感知 |
| 可控性 | 结构化输出、安全策略 | 应用集成 |
工程上你必须同时关注以上六者,单点优化会拆东墙补西墙。
二、知识点
2.1 推理的"快"从哪来
- KV Cache:自回归生成的核心,省去重复算 K/V。理解显存计算:
KV = 2 * num_layers * num_kv_heads * head_dim * seq_len * batch * dtype_size - Attention 优化:FlashAttention、PagedAttention(vLLM 的核心创新)、Continuous Batching。
- Batching 策略:static → dynamic → continuous batching;In-flight batching。
- 算子融合:FusedMLP / FusedRMSNorm / FusedRoPE。
- CUDA Graph:减少 kernel launch overhead。
- Speculative Decoding:小模型草稿 + 大模型验证;EAGLE / Medusa / Lookahead。
- Chunked Prefill:把长 prompt 分块,平衡 TTFT 与吞吐。
- Prefix Caching:相同 prompt 前缀复用 KV。
2.2 模型压缩
- 量化 (Quantization):
- PTQ:训练后量化。GPTQ / AWQ / SmoothQuant / GGUF (llama.cpp)。
- QAT:量化感知训练;精度更高但成本高。
- 精度档:fp16 / bf16 → int8 / fp8 → int4 → int2/三值/二值。
- 当前主流:AWQ / GPTQ / FP8 (Hopper / Blackwell)。
- 剪枝 (Pruning):结构化(按 head / 按层)vs 非结构化(按权重);现实中收益有限。
- 蒸馏 (Distillation):大模型当老师,把能力传给小模型;当下小模型主流路径。
- MoE 推理:Expert 调度、负载均衡。
2.3 推理引擎选型
| 引擎 | 适用 | 特点 |
|---|---|---|
| vLLM | 通用,社区活跃 | PagedAttention,支持 LoRA、speculative decoding |
| SGLang | 长 prompt / Agent | RadixAttention(前缀复用),结构化输出 |
| TensorRT-LLM | NVIDIA 极致性能 | 编译期优化,部署链路长 |
| TGI (HF) | 易用 | HF 全家桶友好 |
| llama.cpp / Ollama | 本地 / CPU / 边缘 | GGUF 量化,能在 Mac 上跑 |
| MLX | Apple Silicon | 苹果原生 |
| lmdeploy | 国内 | 中文社区支持好 |
2.4 部署架构
- 单机直连 vs 网关 + 调度 + worker:QPS 上规模就要分层。
- API 形态:OpenAI 兼容 (
/v1/chat/completions) 是事实标准;流式 (SSE)。 - 网关层:限流、鉴权、计费、路由、A/B test、灰度。
- 多模型路由:按任务难度路由到不同尺寸模型(router model)。
- 缓存策略:完全相同请求 → response cache;相似 → semantic cache。
- 可观测性:tokens/s、TTFT、p50/p95/p99、错误率、安全过滤命中率。
- 离线 / 在线:批量推理(OpenAI Batch API、vLLM offline mode)vs 在线服务。
2.5 端 / 边推理
- 手机 / PC 本地:MLC-LLM / llama.cpp / Ollama / LM Studio。
- 浏览器:WebLLM、ONNX Runtime Web、Transformers.js。
- 边缘 GPU:Jetson、TensorRT。
- NPU / 国产芯片:昇腾、寒武纪、MTT、海光等;适配生态在演进。
2.6 安全与合规
- 内容安全:输入 / 输出过滤(Llama Guard / Shield Gemma / 国内合规模型)。
- 提示注入 (Prompt Injection) 防御。
- 数据脱敏 / 出网控制。
- 计费与配额防滥用。
三、参考资料
- vLLM 文档 + 论文 (PagedAttention)。
- SGLang 文档。
- TensorRT-LLM 文档。
- llama.cpp 仓库 及 GGUF 量化指南。
- Hugging Face Optimum —— 量化 / 部署工具集。
- 论文:FlashAttention 1/2/3、PagedAttention、Speculative Decoding、Medusa、EAGLE、AWQ、GPTQ、SmoothQuant。
- 博客:Lilian Weng "LLM Inference Acceleration"、[a16z infra map for LLMs]。
- 课程:GPU MODE 的 inference 系列录播。
- 工业界案例:Anthropic / OpenAI / Mistral / 字节豆包 / 阿里通义 / DeepSeek 公开的工程博客。
四、动手实践
- 本地跑 vLLM:用 vLLM 部署一个 7B / 14B 模型,提供 OpenAI 兼容 API;写 client 测吞吐 / TTFT。
- 量化对比:把同一个模型分别用 fp16 / int8 / int4 (AWQ) 部署,测速度 / 显存 / MMLU 掉点。
- llama.cpp 边缘部署:在 Mac / 普通 PC 上用 GGUF 跑 7B 模型,测 token/s。
- Speculative Decoding:用 vLLM 启用 spec decoding(大模型 + 小 draft 模型),对比加速比。
- Prefix Caching 实验:用相同长 prompt 多次发请求,测 cache 命中前后 TTFT 差异。
- 结构化输出:用 SGLang 或 outlines,让模型严格输出 JSON Schema 定义的结构。
- 写一个 LLM 网关:用 FastAPI 套在 vLLM 前面,做:鉴权、限流、计费、日志、流式转发。
- 离线批量推理:用 vLLM offline 跑 10 万条数据的批量打标,对比在线接口的成本差。
- benchmark 自己:用 vllm-benchmarks 或 sglang bench,画 throughput-latency 曲线。
五、通关标志
- 能解释 KV Cache 占多少显存,能算"7B fp16 + 4096 ctx + batch=32"占多大。
- 能讲清 Continuous Batching 解决了什么、PagedAttention 解决了什么。
- 跑通过 vLLM / SGLang / TensorRT-LLM 中至少两个,并能讲清各自定位。
- 完成至少一次量化部署并能量化精度损失。
- 你能提供一个生产级可部署的 LLM 服务(带网关、监控、计费)。
- 看到一个推理性能问题,能给出 5 个排查方向(batch / cache / 量化 / 调度 / 通信)。
下一站:08. AI Agent