Netflix 详述内部 LLM 服务平台:Triton 与 vLLM 如何分担推理与调度
流媒体巨头首次系统披露将大模型推理纳入内部生产平台的工程经验:Triton 负责模型加载与 GPU 调度,vLLM 执行推理,两者版本必须绑定测试——通用服务接口并未消除底层工程的复杂性。
流媒体巨头首次系统披露将大模型推理纳入内部生产平台的工程经验:Triton 负责模型加载与 GPU 调度,vLLM 执行推理,两者版本必须绑定测试——通用服务接口并未消除底层工程的复杂性。
Netflix 没有另起炉灶,而是将 LLM 推理嵌入已有的 JVM 服务层。路由、特征获取、候选生成、后处理和日志记录——这些外围生产工作流保持不变。变化的只是推理执行的位置。
小模型留在本地,大模型走向远端。
阅读说明:箭头表示请求流向。CPU 与 GPU 为并行路径,由 JVM 服务层根据模型规模自动路由。即便推理在本地与远程硬件之间切换,外围生产工作流始终保持一致。
在 GPU 路径中,Netflix 选择了 vLLM 以满足运营适配性与可扩展性,但并未让 vLLM 接管一切。Triton 仍然负责模型周边的服务环境,vLLM 专注执行推理并提供扩展点。
模型加载 · 批处理调度 · GPU 资源管理 · 多框架服务封装
推理执行 · 自定义架构扩展点 · 解码行为控制 · Hugging Face 兼容层
这种分工的代价是版本耦合。Netflix 报告称,不匹配的 Triton 与 vLLM 版本可能导致部署完全无法加载模型——因此两引擎版本必须成对测试并固定发布。
一个引擎升级,另一个可能就要跟着动。
自定义模型带来了额外的集成挑战。vLLM 对 Hugging Face 的兼容性对部分 Netflix 内部模型尚有不足,公司不得不使用 vLLM 的扩展点为自定义架构与解码行为提供支持。
Netflix 比较了两种 Triton 打包方式,结论很明确:vLLM backend 让模型与前端更独立地演进。这一选择影响的是模型与服务环境的耦合强度,而非决定由哪个引擎执行推理。
模型与前端耦合较紧,升级一处可能牵动另一处,迭代节奏受限。
模型与前端独立演进,各自升级互不阻塞,适合快速迭代场景。
但通用服务接口并未消除底层引擎之间的差异。Triton 同时暴露了兼容 OpenAI 的 API 以及 KServe 的 HTTP 和 gRPC 前端,Netflix 仍在这些集成中遇到了功能处理上的差异。
约束解码允许 Netflix 在每一步过滤模型可生成的 token,强制输出符合合法 JSON 等格式。问题在于:这些规则依赖于已生成的所有内容,解码器必须在整个请求过程中维护状态。
Uber 在应用边界处描述了相关做法。其生成式 AI 网关在外部托管与内部管理的模型之间提供兼容 OpenAI 的接口,同时集中处理认证、缓存、可观测性与路由。
实现路径不同,抽象理念一致。
Netflix 与 Uber 的共同思路是:将应用集成与后端的模型、运行时和托管环境进行分离。应用团队获得稳定的接口,模型提供商和运行时可以继续演进——但抽象并未消除底层工作。
通用接口给了应用团队「稳定的幻觉」,但打包、兼容性、约束解码与部署隔离的工程债,不会因为多加一层抽象而消失。
Netflix 的经验证明:大模型服务化的真正瓶颈不在模型能力,而在系统工程——版本耦合、状态同步、部署隔离,每一层都需要扎实的工程实现。那些指望「接上 API 就能用」的团队,迟早会在约束解码和版本升级时撞上同一堵墙。
Netflix 技术博客已公开完整架构文章,涵盖 CPU/GPU 路径、Triton 打包对比与约束解码实现细节。
Netflix TechBlog → 搜索「LLM Serving」