编码 – 预填充 – 解码 (EPD) 分解是一种适用于多模态模型的推理优化技术,可将视觉编码器阶段与预填充和解码阶段分离开来。它对于图像密集型提示词、中短输出和量化专家混合 (MoE)模型最为有效。
本文介绍了何时以及如何将 EPD 解聚 与 NVIDIA Dynamo 结合使用,从而将生成第一个token (TTFT) 的时间缩短高达 5 倍,并将端到端响应时间缩短 7 倍。本文还介绍了不推荐进行 EPD 分解 的场景。
Dynamo 是一个开源推理框架,用于在分布式环境中服务 AI 模型。它支持 EPD 分解,将这些阶段分离为独立可扩展的阶段,而不是将它们与紧密合的调度和扩展模式一起运行。专用编码器工作者可以提高批处理、内存效率和整体吞吐量。
为什么 EPD 解很重要?
在 LLM 预填充开始之前,多模态请求会添加工作。服务堆栈必须对媒体进行预处理,并运行视觉转换器 (ViT) 以生成嵌入。在聚合服务中,视觉编码、LLM 预填充和解码都共享一个 worker 和一个调度域。当媒体处理仅占工作负载的一小部分时,这种简单的设计效果很好。

当请求包含更多图像或视频时,余量会发生变化。视觉编码可能需要数百毫秒或更长时间。由于编码器和 LLM 工作共享相同的 GPU,媒体密集型请求可能会延迟其自身的预填充,并与并发预填充和解码工作相抗衡。相比之下,在混合流量下,即使不需要视觉编码,纯文本请求也可能会在多模态请求后等待。
Dynamo 通过分离编码器和 PD 工作者角色来实现 EPD 服务,而无需固定其硬件位置。编码器工作者生成视觉嵌入,而 PD 工作者使用这些嵌入并运行 LLM。这种分离允许各个阶段分别进行批量、调度和扩展。图 2 比较了聚合服务和 EPD 服务,其中编码工作者通过 NVIDIA 推理传输库 (NIXL) 将嵌入传递给 PD 工作者。

只有在某些场景中,编码分解才能减少 TTFT,并增加相同 SLO 的良好输出。隔离的编码工作必须足够大,以抵消工作协调和嵌入传输开销。编码工作者可能会共享 PD GPU 或在单独的 GPU 层上运行,从而产生不同的放置选项。在这里,我们将探索编码工作进程的不同放置选项,以及它们在各种场景下产生的优势。
三种编码放置拓扑
图 3 将聚合服务与两种编码器解拓扑 (共置和解拓扑) 进行比较:
- 聚合:每个 GPU 运行一个聚合 worker,其调度程序在同一请求生命周期中管理视觉编码、LLM 预填充和解码。
- 协同编码器:每个 GPU 与一个 PD 工作节点一起运行一个或多个编码器工作节点。这允许工作者共享 GPU 计算,同时维护单独的请求队列和批处理。在同构集群中,Colocated Encoder 通常更适合。相对于 LLM,视觉编码器的重量较轻,因此为编码器工作预留完整的同等级 GPU 可能会导致大部分 GPU 未得到充分利用。托管可分离工作节点,而无需将 GPU 专用于编码器。
- 分类编码器:当集群包含更适合编码器工作的低成本 GPU 层,而主要 GPU 层托管 PD worker 时,分类编码器就会变得很有吸引力。Dynamo 通过 NIXL 将生成的视觉嵌入传输到 PD 层。在我们的测试环境中,两个 NVIDIA RTX 6000D GPU 运行编码器工作节点,四个 NVIDIA GB200 GPU 运行 PD 工作节点。这种布局可在 RTX GPU 上保留较轻的编码器工作负载,并为计算和内存密集型 LLM 工作负载预留 GB200 GPU。请注意,此分析不考虑使用同构 GPU 的解设置,因为它始终低估了共置编码器设置。
硬件可用性决定了编码器的运行位置,而工作负载特性则决定了将其分离是否会带来回报。

哪些因素决定了 EPD 分解的优势?
EPD 的优势取决于视觉编码、LLM 预填充和解码工作的分配方式。当视觉编码在请求处理时间中占很大比例或限制吞吐量时,EPD 非常有用。媒体密集型请求通常会造成这种情况,但媒体加载本身并不能决定结果。输出长度、模型大小和精度以及流量组合也会改变这种平衡。
| 因子 | 为什么它对 EPD 很重要 | EPD 何时产生收益 |
|---|---|---|
| 输入媒体负载 | 媒体负载越重,视觉token就越多,这意味着编码器的工作量也就越大。EPD 允许纵向扩展编码器,从而防止编码瓶颈。 | 生成更多视觉token的多张图像、高分辨率图像或视频输入。 |
| 输出序列长度 (OSL) | 更长的 OSL 会将总延迟转为解码。TTFT 从 EPD 持有中获益,但端到端 (E2E) 收益缩小。 | 短 OSL:E2E 获得长期 OSL 支持:E2E 获得侵蚀 |
| 模型大小/ 精度 | ViT 计算在很大程度上是固定不变的,而 LLM 计算会随着活动参数的减少和精度的降低而减少。因此,小型 MoE 和量化 LLM 具有更高的 ViT 与 LLM 的计算比。 | 较小、MoE 和较低精度的模型从 EPD 中受益更多,而大型密集型模型的增益更少。 |
| 混合流量 (文本+ 多模态) | 混合预填充批量会导致文本请求等待 ViT 处理。EPD 隔离编码器工作,允许文本请求跳过等待编码器的过程。 | 混合了大量多模态流量和延迟敏感型文本请求。 |
测试环境
除精度消融实验外,所有基准测试均使用 Qwen3.5 122B A10B NVFP4 运行。我们使用了四个 GB200 GPU (以及在解设置中额外使用的 RTX 6000D GPU) :
- 聚合:每个 GB200 聚合一个 TP1 工作者
- 共享 EPD:每个 GB200 配备 2 个编码器工作节点和 1 个 PD 工作节点
- 解 EPD:以 RTX 节点作为编码器层,以 GB200 作为 PD
我们使用 NIXL over UCX RC/ TCP 以太网进行视觉嵌入传输,测量峰值为 20 Gbps。我们使用了启用前端并行媒体解码的 Dynamo 前端。有效输出 SLO 是低于 100 毫秒的token间延迟 (ITL) 。
图像密集型工作负载示例
我们在以下请求中将聚合服务与编码器解服务进行了比较:在 OSL 1024 下,每次请求提供 10 张图像 (每张图像上限为 256 个token) ,以模拟具有长输出序列的中等负载视觉工作负载。图 4 显示了结果。

使用共置编码器时,TTFT 下降了 58%,使用异构编码器时,TTFT 下降了 50%。端到端改进幅度不大,因为 OSL 1024 意味着模型会生成 1024 个 token,而且编码器解聚不会缩短解码时间。信号越大,输出越好:异构层在相同延迟 SLO 下服务的流量增加了 70%,因为编码器容量增加了,而没有影响 GB200 预算。
镜像加载和 OSL 如何影响性能提升?
我们在一系列实验中分析了对 TTFT 和端到端延迟的影响,这些实验使用 5-50 张图像,每张图像使用 128/ 256 token预算,保持 OSL 不变。在聚合编码器场景中,TTFT 和端到端延迟的性能都会降低,而对于两种解拓扑而言,性能相对稳定。

接下来,我们将 OSL 从 128 改为 2048,同时将图像加载固定为 5 张图像。随着 OSL 的增加,TTFT 在很大程度上保持不变,但解码时间越来越多地主宰了端到端延迟。因此,与聚合服务相比,异构 EPD 端到端收益从 20.3% 缩小到 5.2%。位于同一位置的编码器从 11.8% 的增益转变为 2.5% 的回归,因为其附加编码器工作节点与 PD 工作节点共享相同的 GPU。随着 OSL 的增加和解码压力的增加,GPU 争用会越来越多地抵消并最终超过编码器解的优势。

图 7 和 8 显示了 TTFT 和端到端延迟相对于一系列 OSL 和图像负载的聚合 (基准) 的百分比改进。在几乎所有场景中,编码器解在高输入介质负载的情况下提供最大价值。在高 OSL 和低图像负载的场景中,解构编码器会降低性能。


模型大小和精度如何改变 EPD 收益?
随着模型大小的增加,LLM 在服务工作负载中占据更多,而视觉编码器的大小大致保持不变。为了量化这对 EPD 的影响,我们在 Qwen3.5 4B、Qwen3.5 9B 和 Qwen3.5 27B 上运行了模型大小消融。ViT 参数占比从 4B 时的 7.2% 降低到 9B 时的 4.7% 和 270B 时的 1.7%。托管式 EPD 遵循相同的趋势,可分别提供 2.62 倍、1.50 倍和 0.65 倍的聚合服务输出。

参数共享只是更直接因素的代理:ViT 前向、LLM 预填充和解码之间的运行时平衡。当 ViT 转发占请求处理时间的重要部分时,EPD 提供了更多优势。随着预填充和解码成为主流,需要优化的编码器工作也会减少。在我们的 270B 配置中,LM 的成本超过了在托管设置下分离编码器的优势。
我们测量了 LLM 精度对 EPD 增益的影响。当视觉编码器和 LLM 都使用 BF16 时,共享 EPD 提供了 1.78 倍的聚合服务输出。仅将活跃的 LM 权重量化为 NVFP4 后,此增益提升至 2.64 倍。

NVFP4 可加速 LLM 预填充和解码,而 ViT 正向则保留在 BF16 中,从而将更大比例的请求时间转移到编码器工作上。这为 EPD 提供了更多空间,可以独立于 PD 工作负载来调度编码器工作负载。
EPD 如何帮助混合模态请求
生产工作负载通常混合纯文本和多模态请求,这两种请求类型可以一起调度以进行预填充。借助聚合服务,一名工作者可同时处理视觉编码和 LLM 预填充。如果批量包含多模态请求,则工作节点会在开始预填充之前完成媒体预处理和 ViT 转发。纯文本请求不需要这项工作,但仍然可以等待它,从而增加其 TTFT。
EPD 通过在单独的编码器工作流上运行视觉编码来消除这种依赖关系。前端会将这两种请求类型路由到预填充工作器,但只有缺少嵌入的多模态请求才能调用编码器池。纯文本请求可以继续进行预填充,而编码器则独立处理多模态请求,从而减少两种请求类型之间的线头阻塞。
为了衡量这一点,我们将聚合服务与持续混合文本和图像流量下的协同编码器进行了比较。

编码器解聚将文本请求的平均 TTFT 从 92.3 毫秒降低到 53.3 毫秒,减少了 42.2%。图像请求 TTFT 从 289.9 毫秒降至 200.6 毫秒,减少了 30.8%。图像请求仍然会产生编码器延迟,而文本请求可以开始 LLM 预填充,而无需等待视觉编码完成。这是在文本请求 TTFT 中相对改进较大的原因。
如何选择最佳编码器拓扑
编码器的最佳放置位置取决于请求所花费的时间。当视觉编码代表请求处理的重要组成部分时,例如媒体密集型输入、中短输出、较小模型或量化模型以及混合流量,EPD 可提供最大价值。当媒体处理速度较慢或长解码序列主导延迟时,聚合服务仍然是一个很好的选择。
硬件也会影响放置决策。在同构集群上,位于同一位置的编码器可将编码器调度和批处理分开,而无需为相对轻量级的视觉模型预留整个 GPU。单独的编码器层对于异构硬件更有用,其中较低级别的 GPU 可以运行编码器,而高端 GPU 仍然专用于 PD。
请注意,vLLM 和 SGLang 具有进一步开发其 EPD 堆栈的路线图。
开始使用 EPD 分解
要重现本文中介绍的实验,请遵循 AI – dynamo/dynamo GitHub 指南。
如图 1 所示,在 ViT 开始之前,TTFT 花费了 43%。EPD 无法帮助优化管道的这些阶段。尝试以下 Dynamo 中列出的其他手段,以解决堆栈的不同阶段问题。
并行媒体解码可将下载和解码从工作流中移出,然后进入 Dynamo 前端,后者会将解码后的像素传输到后端。在仅对编码器进行的基准测试中,在具有两个编码工作器的一个 GB200 上,其性能为 30 × 256,在匹配的吞吐量下,它将编码器请求的平均延迟从 271.3 毫秒降低到 207.0 毫秒,降低了 26%,将 P99 的平均延迟从 752.1 毫秒降低到 581.7 毫秒,降低了 23%。使用 --frontend-decoding 启用它。
在 CPU DRAM 中嵌入缓存存储并卸载计算的嵌入,因此重复的媒体不会被重新编码。当图像或视频等相同的多模态内容在多个请求中出现时,系统会重复使用缓存的嵌入,而无需再次运行视觉编码器。
多模态 KV 路由会将媒体内容与 Dynamo KV 感知路由器中的文本一起哈希处理,以便在已持有相关 KV 块的工作者上请求共享媒体。如果没有它,每张图像看起来都与路由器的占位符token相同。
致谢
我们要感谢 Inferact 联合创始人 Roger Wang 对此博文的反馈,并感谢 NVIDIA 团队 Alexandre Milesi、Ayush Agarwal、Guan Luo、Indrajit Bhosale、J Wyman、Kris Hung、Krishnan Prashanth、Qi Wang 和 Zhongdao Ren 在 Dynamo 中就多模态支持所做的核心工作。