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

图 1. 单图像、多图像和视频请求的 TTFT 分解,分为媒体预处理、ViT 前向与投影以及 LLM 预填充随着请求包含更多图像或视频,这种平衡会发生变化。视觉编码可能需要数百毫秒甚至更长时间。由于编码器和 LLM 工作共享同一 GPU,媒体密集的请求可能会延迟自身的预填充,并与并发的预填充和解码工作争用资源。相比之下,在混合流量下,纯文本请求也可能排在多模态请求之后,即使它们不需要视觉编码。
Dynamo 通过分离编码器和 PD 工作进程角色来实现 EPD 服务,而不固定其硬件放置。编码器工作进程生成视觉嵌入,而 PD 工作进程消费这些嵌入并运行 LLM。这种分离允许各阶段独立地进行批处理、调度和扩展。图 2 比较了聚合式服务和 EPD 服务,其中编码工作进程通过 NVIDIA Inference Transfer Library (NIXL) 将嵌入传递给 PD 工作进程。

图 2. Dynamo 中的聚合式和 EPD 请求流。EPD 将编码执行与 PD 工作进程分离,并通过 NIXL 传输嵌入编码分离仅在某些场景下才能降低 TTFT 并提高相同 SLO 下的有效吞吐量。被隔离的编码工作必须足够大,以抵消工作进程协调和嵌入传输的开销。编码工作进程可以共享 PD GPU,也可以运行在单独的 GPU 层级上,从而产生不同的放置选项。在这里,我们探讨编码工作进程的不同放置选项及其在各种场景下带来的收益。
三种编码放置拓扑
图 3 比较了聚合式服务与两种编码器解耦拓扑:同置(colocated)和解耦(disaggregated):
聚合式: 每个 GPU 运行单个聚合式 worker,其调度器将视觉编码、LLM 预填充和解码作为同一请求生命周期的一部分进行管理。同置编码器:每个 GPU 在运行一个 PD worker 的同时运行一个或多个编码器 worker。这使 worker 能够共享 GPU 算力,同时保持独立的请求队列和批处理。在同构集群上,同置编码器通常是更合适的选择。视觉编码器相对于 LLM 而言较为轻量,因此为编码器工作预留一整块同类 GPU 会导致该 GPU 大部分时间处于未充分利用状态。同置将 worker 分离,而无需将 GPU 专门分配给编码器。解耦编码器:当集群包含一个更适合编码器工作的低成本 GPU 层级,而主 GPU 层级承载 PD worker 时,解耦编码器就变得有吸引力。Dynamo 通过 NIXL 将生成的视觉嵌入传输到 PD 层级。在我们的测试环境中,两块 NVIDIA RTX 6000D GPU 运行编码器 worker,而四块 NVIDIA GB200 GPU 运行 PD worker。这种放置方式将较轻量的编码器工作负载保留在 RTX GPU 上,并将 GB200 GPU 保留给计算和内存密集度更高的 LLM 工作负载。请注意,本分析未考虑使用同构 GPU 的解耦配置,因为它始终不如同置编码器配置。
硬件可用性决定了编码器可以在何处运行,而工作负载特征决定了将其分离是否划算。

图 3. 三种编码放置选项:聚合式服务、同置编码器与 PD worker,以及为编码器 worker 配备独立低成本 GPU 层级的解耦编码器## 哪些因素决定了 EPD 解耦的收益?
EPD 的收益取决于工作如何在视觉编码、LLM 预填充和解码之间划分。当视觉编码在请求处理时间中占据显著份额或限制吞吐量时,EPD 最为有用。媒体密集型请求通常会造成这种情况,但仅凭媒体负载并不能决定结果。输出长度、模型大小和精度以及流量组合也会改变这一平衡。
| 因素 | 为何对 EPD 重要 | EPD 何时带来收益 |
|---|---|---|
| 输入媒体负载 | 更重的媒体负载带来更多视觉 token,意味着编码器工作量更大。EPD 允许扩展编码器,防止编码瓶颈。 | 多张图像、高分辨率图像或视频输入,产生更多视觉 token。 |
| 输出序列长度(OSL) | 更长的 OSL 使总延迟向解码倾斜。EPD 带来的 TTFT 收益依然成立,但端到端(E2E)收益缩小。 | 短 OSL:E2E 收益保持 长 OSL:E2E 收益减弱 |
| 模型大小 / 精度 | ViT 计算量基本固定,而 LLM 计算量随活跃参数减少和精度降低而下降。因此小型、MoE 和量化 LLM 具有更高的 ViT 与 LLM 计算比。 | 更小、MoE 和更低精度的模型从 EPD 中获益更多,而大型稠密模型收益较少。 |
| 混合流量(文本 + 多模态) | 混合预填充批次可能使文本请求等待 ViT。EPD 隔离编码器工作,允许文本请求跳过等待编码器。 | 大量多模态流量与延迟敏感的文本请求混合时。 |
表 1. 各种因素如何影响 EPD 性能### 测试环境
除精度消融实验外,所有基准测试均使用 Qwen3.5 122B A10B NVFP4 运行。我们使用了四块 GB200 GPU(在分离式设置中额外使用 RTX 6000D GPU):
聚合式:每块 GB200 一个 TP1 聚合工作进程同址 EPD:每块 GB200 两个编码器工作进程加一个 PD 工作进程分离式 EPD:RTX 节点作为编码器层,GB200 作为 PD
我们使用基于 UCX RC/TCP 以太网的 NIXL 进行视觉嵌入传输,测得峰值 20 Gbps。我们使用了 Dynamo 前端,并启用了前端并行媒体解码。有效吞吐 SLO 为令牌间延迟(ITL)低于 100 ms。
图像密集型工作负载示例
我们使用以下请求比较了聚合式与编码器分离式服务:每个请求十张图像(每张图像上限 256 token),OSL 为 1024,以模拟具有长输出序列的中等偏重视觉工作负载。图 4 显示了结果。

*图 4. 图像密集型工作负载(每请求 10 张图像)下各拓扑的平均 TTFT 和端到端延迟(左)。在 ITL 低于 100 ms 的 SLO 下,相对于聚合式设置的有效吞吐提升(右)*同址编码器使 TTFT 下降 58%,异构方案下降 50%。端到端改进有限,因为 OSL 1024 意味着模型生成 1024 个 token,而解码时间不会因编码器分离而减少。更大的信号是有效吞吐:在相同延迟 SLO 下,异构层多服务 70% 的流量,因为在不触及 GB200 预算的情况下增加了编码器容量。
图像负载和 OSL 如何影响性能收益?
我们在 5-50 张图像、每张图像使用 128/256 token 预算、保持 OSL 不变的一系列实验中分析了其对 TTFT 和端到端延迟的影响。在聚合式编码器场景中,TTFT 和端到端延迟的性能均下降,而在两种分离式拓扑中性能相对稳定。

图 5. 平均 TTFT 与视觉 token 负载的关系(5 至 50 张图像,OSL 512)。聚合延迟随视觉 token(图像数量乘以每张图像的 token 数)图像数量急剧上升;两种 EPD 拓扑结构则几乎保持平稳接下来,我们在将图像负载固定为五张图像的同时,将 OSL 从 128 变化到 2,048。随着 OSL 增加,TTFT 基本保持不变,但解码时间在端到端延迟中所占的比重越来越大。因此,异构 EPD 相对于聚合服务的端到端增益从 20.3% 收窄至 5.2%。同址编码器从 11.8% 的增益转变为 2.5% 的回退,因为其额外的编码器工作进程与 PD 工作进程共享相同的 GPU。随着 OSL 增加、解码压力增大,GPU 争用越来越多地抵消、并最终超过编码器解聚带来的收益。

图 6. 平均端到端延迟与 OSL 的关系。EPD 与聚合之间的端到端差距随 OSL 增长而收窄,因为解码时间所占比重越来越大图 7 和图 8 展示了在一系列 OSL 和图像负载下,TTFT 和端到端延迟相对于聚合(基线)的百分比改进。在几乎所有场景中,编码器解聚在高输入媒体负载下带来的价值最大。在高 OSL 和低图像负载的场景中,解聚编码器会损害性能。

图 7. 输入图像负载(图像数量乘以视觉 token 数)。TTFT 相对于聚合的提升(Qwen 3.5 122B NVFP4)。同址 EPD(上)和异构 EPD(下)。两种拓扑结构在整个网格上均带来 25-93% 的 TTFT 提升。最重的单元格(50 x 128 张图像,任意 OSL)达到 92-93%。由于 TTFT 不受输出长度影响,增益在 OSL 维度上保持一致
图 8. 端到端请求延迟相对于聚合的改进(相同模型和硬件)。在高图像负载和短 OSL 时增益强劲,向左上角(轻媒体、长输出)逐渐缩小。同址 EPD 在 5 x 128 张图像 / OSL 2048 时显示出轻微的端到端回退(-2.5%),此时嵌入传输开销无法通过编码器容量节省来弥补## 模型大小和精度如何改变 EPD 增益?
随着模型规模增大,LLM 在服务负载中所占的比重更大,而视觉编码器的规模大致保持不变。为了量化这对 EPD 的影响,我们在 Qwen3.5 4B、Qwen3.5 9B 和 Qwen3.5 27B 上进行了模型规模消融实验。ViT 参数占比从 4B 时的 7.2% 下降到 9B 时的 4.7% 和 27B 时的 1.7%。同址 EPD 遵循相同的趋势,其有效吞吐量分别是聚合服务的 2.62 倍、1.50 倍和 0.65 倍。

图 9. 相同 SLO 下,不同模型配置的聚合服务与分离式服务的有效吞吐增益对比。EPD 增益随模型规模增大而下降,在 27B 时低于盈亏平衡点。激活参数更少的低精度模型和 MoE 模型增益更大 参数占比只是更直接因素的一个代理指标:ViT 前向、LLM 预填充和解码之间的运行时平衡。当 ViT 前向在请求处理时间中占据可观比例时,EPD 带来的收益更大。随着预填充和解码成为主导,可优化的编码器工作量就变少了。在我们的 27B 配置中,在共置部署下,LM 的成本超过了分离编码器带来的收益。
我们测量了 LLM 精度对 EPD 增益的影响。当视觉编码器和 LLM 均使用 BF16 时,共置 EPD 的有效吞吐是聚合服务的 1.78 倍。仅将活跃 LM 权重量化到 NVFP4 后,该增益提升至 2.64 倍。

图 10. LLM 量化对 EPD 有效吞吐的影响。柱状图显示共置 EPD 有效吞吐相对于聚合服务的比值。将活跃 LM 权重从 BF16 量化到 NVFP4 后,该比值从 1.78 倍提升至 2.64 倍。两种配置中视觉编码器均保持 BF16 NVFP4 加速了 LLM 预填充和解码,而 ViT 前向仍保持 BF16,使请求时间中更大比例转移到编码器工作上。这为 EPD 提供了更多空间,将编码器工作负载与 PD 工作节点独立调度。
EPD 如何帮助混合模态请求
生产工作负载通常混合文本请求和多模态请求,这两类请求可能被一起调度进行预填充。在聚合服务中,一个工作节点同时处理视觉编码和 LLM 预填充。如果批次中包含多模态请求,该工作节点需要先完成媒体预处理和 ViT 前向,然后才能开始预填充。纯文本请求不需要这些工作,但仍可能等待它们完成,从而增加其 TTFT。
EPD 通过在独立的编码器工作节点上运行视觉编码,消除了这种依赖。前端将两类请求都路由到预填充工作节点,但只有缺少嵌入的多模态请求才会调用编码器池。纯文本请求可以继续进行预填充,而编码器独立处理多模态请求,从而减少两类请求之间的队头阻塞。
为了测量这一点,我们在持续的文本和图像混合流量下,比较了聚合服务与共置编码器方案。

图 11. 在 OSL 128、持续 50:50 混合流量下,文本和图像请求的平均 TTFT,比较聚合服务与共置编码器方案 编码器分离将文本请求的平均 TTFT 从 92.3 ms 降至 53.3 ms,降低了 42.2%。图像请求的 TTFT 从 289.9 ms 降至 200.6 ms,降低了 30.8%。图像请求仍需承担编码器延迟,而文本请求无需等待视觉编码完成即可开始 LLM 预填充。这解释了文本请求 TTFT 相对改善更大的原因。
如何选择最佳编码器拓扑
最佳编码器放置位置取决于请求时间花在哪里。当视觉编码占请求处理的很大一部分时,EPD 提供的价值最大,例如媒体密集型输入、短到中等长度的输出、较小或量化模型以及混合流量。当媒体处理较轻或长解码序列主导延迟时,聚合服务仍然是合适的选择。
硬件也会影响放置决策。在同构集群上,共置编码器将编码器调度和批处理分离,而无需为相对轻量的视觉模型预留整个 GPU。单独的编码器层在异构硬件上更有用,此时较低层级的 GPU 可以运行编码器,而高端 GPU 仍专用于 PD。
请注意,vLLM 和 SGLang 都有进一步开发其 EPD 栈的路线图。
EPD 分离入门
要复现本文中的实验,请遵循 ai-dynamo/dynamo GitHub 指南。
如图 1 所示,43% 的 TTFT 花在 ViT 甚至开始之前。EPD 无助于优化流水线的这些阶段。请尝试下面列出的 Dynamo 中的其他手段,以应对你栈中的不同阶段。
并行媒体解码 将下载和解码从工作进程移出,放入 Dynamo 前端,由前端将解码后的像素发送到后端。在一个仅编码器基准测试中,在单台 GB200 上以 30×256 和两个编码工作进程运行,它在吞吐量匹配的情况下将平均编码器请求延迟降低了 26%,从 281.3 ms 降至 207.0 ms,并将 P99 降低了 23%,从 752.1 ms 降至 581.7 ms。使用 --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 多模态支持方面的核心工作。
