跳转至

Part 8 · 生产部署与系统设计

从一个能跑的引擎,到一个生产服务——再到答好系统设计面试。

本 Part 覆盖

  • HTTP 服务化:OpenAI 兼容 server、压测找并发 knee、以及跨多实例的路由 / 自动扩缩 / KV 感知路由
  • 可观测性与 profilingSLO 调优;框架取舍——TensorRT-LLM / TGI / SGLang / LMDeploy——在选型题上有观点
  • 容量规划:给定模型 + 硬件估 VRAM / 吞吐
  • 系统设计演练:「为 X QPS、Y 延迟设计推理服务」

Capstone 会把这里的一切在单张 4090 上串起来。

课程

  • 用 HTTP 服务化 vLLM:OpenAI 兼容 server —— vllm serve 把引擎核心包进一层薄 FastAPI 前端、说 OpenAI API,任何 OpenAI client 改一行 base_url 就能重定向。讲 endpoints(/v1/chat/completions 套 chat template、/v1/completions 纯文本、/v1/models 列服务 id + LoRA adapter、/health存活性 200/503、/metrics 是 Prometheus 数据源)、鉴权(--api-key / VLLM_API_KEY,可重复以轮换)、流式(SSE),以及为何接口旋钮(--port / --served-model-name)与设天花板的容量旋钮(--max-num-seqs / --gpu-memory-utilization)相互独立——均在 vLLM 0.26.0 上核实。
  • 压测找并发拐点(knee) —— knee 是单实例 batch 填满、vllm:num_requests_waiting 离开零往上爬之处;由 Little 定律\(L=\lambda W\)),把到达率推过最大完成率会让队列与延迟失控。你靠vllm bench serve --request-rate 往上扫(开环 Poisson 到达——不是 --request-rate inf不是闭环 --max-concurrency)找到它,按 SLO 读 p99 TTFT/E2EL 与 goodput,把最后一个仍通过的档作为实例诚实容量报告。
  • 路由、自动扩缩与 KV 感知路由(多实例) —— 过了一个实例的 knee,你扩到 N 个独立副本、挂在一个 router 后;让它变好的两个决定是 KV 感知(前缀感知)路由(缓存是每实例的,所以 round-robin 会重 prefill 共享 prompt)与按队列自动扩缩vllm:num_requests_waiting,不是 GPU 利用率),并处理好冷启动滞后与「缩容前排空」。vLLM 把它作为 production stack 发布(Helm:前缀感知 + 模型感知 router、引擎 pod、LMCache KV offload);SkyPilot 按 target_qps_per_replica 自动扩缩。
  • 可观测性与 profiling:指标、trace 与 kernel 时间线 —— 生产调试的三个缩放层级指标(Prometheus /metrics——num_requests_waitinggpu_cache_usage_perc、TTFT / prefill-time / decode-time 直方图、request_success_total{finished_reason};自带 Grafana 仪表盘)来检测OpenTelemetry trace(span 经 OTLP 到 Jaeger)来定位某一段;以及 PyTorch profiler--profiler-config + /start_profile / /stop_profile)或 Nsight Systemsnsys … --capture-range=cudaProfilerApi)来在 kernel 层解释它——先便宜层,profiling 是按需手术刀。
  • SLO 驱动调优:从指标到调优闭环 —— 锚在 SLO 上的调优:以 goodput(满足 SLO 的吞吐)给每个配置打分,从 /metrics绑定约束(队列 → 加副本;prefill → --max-num-batched-tokens / prefix caching;decode → --max-num-seqs / 量化 / 投机解码;KV → --gpu-memory-utilization / --max-model-len),拧那一个对症旋钮、重测、走平就停——一次一个旋钮、对着类生产 workload。
  • 服务生态:vLLM vs TensorRT-LLM / TGI / SGLang / LMDeploy —— 没有全局第一:一个共享基线(continuous batching、paged KV、prefix caching、OpenAI 兼容 API)与少数分歧轴——vLLM 主打广度/速度/硬件灵活(默认),TensorRT-LLM 靠提前编译引擎主打 NVIDIA 峰值延迟,TGI 主打 HuggingFace 原生生产,SGLang 主打共享前缀/结构化/agentic(RadixAttention),LMDeploy 主打 TurboMind + weight-only 量化。把选型答成 「默认 X,当约束 Z 时切到 Y」,并靠在你自己 workload 上、你 SLO 下 OpenAI 兼容地压测来定夺。
  • 容量规划:从一张卡的吞吐到一个集群 —— 每道系统设计面试开场的草稿纸算术:单实例容量是 min(装得下, 跑得快)——显存闸(并发)与速度闸(decode 由带宽决定的 TPOT 地板与它测出的 knee 吞吐)。把 knee 换成 req/s(\(r_{\text{inst}} = T_{\text{out}}/\bar{o}\)),再定集群 \(N_{\text{inst}}=\lceil \lambda_{\text{peak}}/(\rho\,r_{\text{inst}})\rceil\)\(N_{\text{GPU}}=N_{\text{inst}}\times\text{TP}\)——按峰值 + 余量定,且先由「SLO 是否越过 TPOT 地板」把关。通往系统设计长题的桥。

Part 8 完成

七节课全部就位——OpenAI 兼容 server压测找 knee路由 / 自动扩缩可观测性与 profilingSLO 驱动调优服务生态对比;以及容量规划 + 系统设计——各自与其面试题双向链接,最后一节还连到一组系统设计长题。所有 vLLM flag/API 均经 Context7 核实(ADR-0004);基线是 vLLM 0.26.0,一切性能数字均为示例 / 量级参考。下一站:Capstone。见 术语表面试题库