返回 文章 apply CMS 文章

何时使用编码-预填充-解码(EPD)分离加速多模态模型服务

EPD 分离将视觉编码从 LLM 预填充/解码中解耦,在图像密集、短输出、小模型或量化 MoE 及混合流量场景下显著降低 TTFT 并提升有效吞吐。

EPD分离多模态推理NVIDIA Dynamo推理优化
成长分 / 100 74 综合收获、行动、留存与影响

何时使用编码-预填充-解码(EPD)分离加速多模态模型服务
为什么值得读了解 EPD 分离的核心原理及其对多模态推理性能的影响机制。

掌握三种编码器放置拓扑(聚合式、同置、解耦)的适用场景与硬件选择依据。

关键洞察
  1. EPD 分离将视觉编码器阶段与预填充/解码阶段拆分为可独立扩展的 worker,通过 NIXL 传输嵌入,改善批处理、内存效率和吞吐量。
  2. 收益取决于视觉编码在请求处理时间中的占比:图像密集、短 OSL、小模型/量化 MoE、混合流量场景下收益最大;长 OSL 或轻媒体负载时收益收窄甚至回退。
  3. 三种编码器放置拓扑:聚合式(单 worker)、同置(编码器与 PD 共享 GPU)、解耦(编码器运行在低成本 GPU 层级),硬件可用性决定放置选择。
转成行动

深入阅读

正文与原文对照

原文保真覆盖:全文原文字符:19070

编码-预填充-解码(Encode-prefill-decode,EPD)分离是一种面向多模态模型的推理优化技术,它把视觉编码器阶段与预填充、解码阶段拆开。它对图像密集的提示词、中短输出以及量化的混合专家(mixture-of-experts,MoE)模型最为有效。

本文介绍何时以及如何借助NVIDIA Dynamo使用 EPD 分离,使首词元时间(TTFT)最高提升 5 倍、端到端响应时间最高提升 7 倍,同时也说明不建议使用 EPD 分离的场景。

Dynamo 是一个开源推理框架,用于在分布式环境中服务 AI 模型。它支持 EPD 分离,把这些阶段拆成可独立扩缩的环节,而不是以紧耦合的调度和扩缩模式放在一起运行。专用的编码器 worker 可以改善批处理、内存效率和整体吞吐量。

为什么 EPD 分离很重要?

多模态请求在 LLM 预填充开始之前会增加额外工作:服务栈必须先预处理媒体数据,并运行视觉 Transformer(ViT)生成嵌入向量。在聚合式服务中,视觉编码、LLM 预填充和解码共用一个 worker 和同一个调度域。当媒体处理只占负载的一小部分时,这种简单设计运行良好。

柱状图:对于多图和视频请求,编码器工作在 TTFT 中占主导。
图 1. 单图、多图和视频请求的 TTFT 构成,分为媒体预处理、ViT 前向计算与投影、LLM 预填充

当请求包含更多图像或视频时,这种平衡就会改变。视觉编码可能耗时数百毫秒甚至更久。由于编码器和 LLM 的工作共用同一块 GPU,媒体密集的请求会拖慢自身的预填充,并与并发的预填充和解码工作争用资源。相比之下,在混合流量下,纯文本请求即使不需要视觉编码,也可能排在多模态请求后面等待。

Dynamo 通过拆分编码器和 PD worker 角色来实现 EPD 服务,且不固定它们的硬件部署位置。编码器 worker 生成视觉嵌入,PD worker 则消费这些嵌入并运行 LLM。这种拆分使各阶段可以独立地进行批处理、调度和扩缩。图 2 对比了聚合式服务与 EPD 服务,其中编码 worker 通过NVIDIA Inference Transfer Library(NIXL)把嵌入传给 PD worker。

流程图:对比聚合式服务与 EPD 服务,编码 worker 通过 NIXL 把嵌入传给 PD worker。
图 2. Dynamo 中聚合式与 EPD 的请求流。EPD 把编码执行从 PD worker 中分离出来,并通过 NIXL 传输嵌入

编码分离只在某些场景下才能降低 TTFT 并提高同 SLO 下的有效吞吐(goodput)。被隔离出来的编码工作必须足够大,才能抵消 worker 协调和嵌入传输的开销。编码 worker 可以与 PD GPU 共享,也可以运行在独立的 GPU 层上,由此产生不同的部署方案。下面我们探讨编码 worker 的不同部署方案,以及它们在各种场景下带来的收益。

三种编码器部署拓扑

图 3 对比了聚合式服务与两种编码器分离拓扑,即同机部署(colocated)和分离部署(disaggregated):

  • 聚合式:每块 GPU 运行一个聚合 worker,其调度器在同一个请求生命周期内统一管理视觉编码、LLM 预填充和解码。
  • 同机部署编码器:每块 GPU 在一个 PD worker 之外运行一个或多个编码器 worker。这样 worker 之间共享 GPU 算力,同时保持各自独立的请求队列和批处理。在同构集群上,同机部署编码器通常更合适。相对于 LLM,视觉编码器很轻量,因此为编码工作单独预留一整块同级别 GPU,可能让这块 GPU 的大部分算力闲置。同机部署在不为编码器独占一块 GPU 的前提下实现了 worker 的分离。
  • 分离部署编码器:当集群中有成本更低、更适合编码工作的 GPU 层,而主 GPU 层承载 PD worker 时,分离部署编码器就变得有吸引力。Dynamo 通过 NIXL 把生成的视觉嵌入传输到 PD 层。在我们的测试环境中,两块 NVIDIA RTX 6000D GPU 运行编码器 worker,四块 NVIDIA GB200 GPU 运行 PD worker。这种部署把较轻的编码负载放在 RTX GPU 上,把 GB200 GPU 留给计算和内存更密集的 LLM 负载。请注意,本分析不考虑使用同构 GPU 的分离部署,因为它的表现总是不如同机部署编码器。

硬件可用性决定编码器能在哪里运行,而工作负载特征决定拆分是否划算。

三种编码器部署示意图:聚合式(一个 worker)、同机部署(通过 CUDA MPS 共享 GPU)和分离部署(RTX 运行编码器,GB200 运行 PD)。
图 3. 三种编码器部署方案:聚合式服务、编码器与 PD worker 同机部署,以及为编码器 worker 使用独立的低成本 GPU 层的分离部署

哪些因素决定 EPD 分离的收益?

EPD 的收益取决于工作如何在视觉编码、LLM 预填充和解码之间分配。当视觉编码占请求处理时间的很大比例,或限制了吞吐量时,EPD 最为有用。媒体密集的请求往往会造成这种情况,但仅凭媒体负载并不能决定结果。输出长度、模型大小与精度以及流量构成,同样会改变这种平衡。

表 1. 各类因素如何影响 EPD 性能

因素 对 EPD 的影响原因 EPD 何时带来收益
输入媒体负载 媒体负载越重,视觉词元越多,编码器的工作也越多。EPD 允许横向扩展编码器,避免编码成为瓶颈。 多张图像、高分辨率图像,或产生更多视觉词元的视频输入。
输出序列长度(OSL) OSL 越长,总延迟越向解码倾斜。EPD 带来的 TTFT 收益依然成立,但端到端(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 聚合 worker
  • 同机部署 EPD:每块 GB200 上运行两个编码器 worker 加一个 PD worker
  • 分离部署 EPD:RTX 节点作为编码器层,GB200 作为 PD

我们使用基于 UCX RC/TCP 以太网的 NIXL 传输视觉嵌入,实测峰值为 20 Gbps。我们使用启用了前端并行媒体解码的 Dynamo 前端。有效吞吐(goodput)的 SLO 为词元间延迟(ITL)低于 100 ms。

图像密集型工作负载示例

我们用如下请求对比了聚合式与编码器分离式服务:每个请求包含十张图像(每张图像上限 256 个词元),OSL 为 1024,以模拟视觉负载较重且输出序列较长的场景。图 4 展示了结果。

柱状图:每请求 10 张图像时,EPD 使 TTFT 降低约 2 倍,有效吞吐提升约 1.5 倍。
图 4. 图像密集型工作负载(每请求 10 张图像)在不同拓扑下的平均 TTFT 与端到端延迟(左)。在 ITL 低于 100 ms 的 SLO 下,相对聚合式部署的有效吞吐提升(右)

同机部署编码器使 TTFT 下降 58%,异构部署下降 50%。端到端的改善有限,因为 OSL 为 1024 意味着模型要生成 1024 个词元,而解码时间不会因编码器分离而缩短。更显著的信号是有效吞吐:异构层在相同延迟 SLO 下多服务了 70% 的流量,因为编码器容量是新增的,没有动用 GB200 的预算。

图像负载和 OSL 如何影响性能收益?

我们在 5 到 50 张图像、每张图像 128/256 词元预算、OSL 保持不变的一系列实验中,分析了对 TTFT 和端到端延迟的影响。在聚合式编码器场景下,TTFT 和端到端延迟的表现都会变差,而两种分离拓扑的表现则相对稳定。

并排的两张折线图:聚合式 TTFT 随图像数量急剧上升,而两种 EPD 拓扑保持平稳。
图 5. 平均 TTFT 与视觉词元负载的关系(5 到 50 张图像,OSL 512)。聚合式延迟随视觉词元(图像数量乘以每张图像的词元数)急剧上升;两种 EPD 拓扑几乎保持平稳

接下来,我们把 OSL 从 128 变化到 2,048,同时把图像负载固定为五张图像。随着 OSL 增大,TTFT 基本不变,但解码时间在端到端延迟中的占比越来越大。因此,异构 EPD 相对聚合式服务的端到端收益从 20.3% 收窄到 5.2%。同机部署编码器则从 11.8% 的收益转为 2.5% 的退步,因为其额外的编码器 worker 与 PD worker 共用相同的 GPU。随着 OSL 增大、解码压力上升,GPU 争用越来越多地抵消并最终超过编码器分离带来的好处。

折线图:随着 OSL 增大,EPD 相对聚合式的端到端延迟优势逐渐收窄。
图 6. 平均端到端延迟与 OSL 的关系。随着 OSL 增长,EPD 与聚合式之间的端到端差距收窄,因为解码时间的占比越来越高

图 7 和图 8 展示了在一系列 OSL 和图像负载下,TTFT 与端到端延迟相对聚合式(基线)的百分比改善。在几乎所有场景中,输入媒体负载较高时,编码器分离的价值最大。而在 OSL 高、图像负载低的场景中,分离编码器反而会损害性能。

两张热力图:TTFT 相对聚合式改善 25% 至 93%,图像数量多时收益最强。
图 7. 输入图像负载(图像数量乘以视觉词元数)。TTFT 相对聚合式的改善(Qwen 3.5 122B NVFP4)。同机部署 EPD(上)和异构 EPD(下)。两种拓扑在整个网格上都带来 25% 至 93% 的 TTFT 改善。负载最重的单元格(50 x 128 张图像,任意 OSL)达到 92% 至 93%。由于 TTFT 不受输出长度影响,收益在 OSL 维度上保持一致
两张热力图:端到端收益在图像负载高、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 倍。

柱状图:同机部署 EPD 相对聚合式的有效吞吐随模型增大而下降,随 MoE 和量化而上升。
图 9. 不同模型配置下,相同 SLO 的有效吞吐相对聚合式服务的收益。EPD 收益随模型增大而降低,在 27B 时跌破盈亏平衡点。激活参数更少的低精度模型和 MoE 模型收益更大

参数占比只是更直接因素的代理指标,这个因素是 ViT 前向计算、LLM 预填充和解码三者之间的运行时平衡。当 ViT 前向计算占请求处理时间的比例可观时,EPD 的收益更大。随着预填充和解码占据主导,可优化的编码器工作就变少了。在我们的 27B 配置中,同机部署下 LM 的开销超过了分离编码器带来的好处。

我们测量了 LLM 精度对 EPD 收益的影响。当视觉编码器和 LLM 都使用 BF16 时,同机部署 EPD 的有效吞吐是聚合式服务的 1.78 倍。仅把激活的 LM 权重量化为NVFP4后,这一收益提升到 2.64 倍。

柱状图:LLM 精度从 BF16 降到 NVFP4 时,同机部署 EPD 的有效吞吐从 1.78 倍升至 2.64 倍。
图 10. LLM 量化对 EPD 有效吞吐的影响。柱形表示同机部署 EPD 相对聚合式服务的有效吞吐。把激活的 LM 权重从 BF16 量化为 NVFP4,使该比值从 1.78 倍升至 2.64 倍。两种配置中视觉编码器均保持 BF16

NVFP4 加速了 LLM 的预填充和解码,而 ViT 前向计算仍保持 BF16,使请求耗时中更大的份额转移到编码器工作上。这让 EPD 有更多空间把编码器负载与 PD worker 独立调度。

EPD 如何帮助混合模态请求

生产环境的负载常常混合了纯文本请求和多模态请求,这两类请求还可能被一起调度做预填充。在聚合式服务中,同一个 worker 既处理视觉编码又处理 LLM 预填充。如果一个批次包含多模态请求,worker 要先完成媒体预处理和 ViT 前向计算,才能开始预填充。纯文本请求虽然不需要这些工作,却仍可能为此等待,从而增加其 TTFT。

EPD 通过在独立的编码器 worker 上运行视觉编码,消除了这种依赖。前端把两类请求都路由到预填充 worker,但只有缺少嵌入的多模态请求才会调用编码器池。在编码器独立处理多模态请求的同时,纯文本请求可以继续进行预填充,从而减少两类请求之间的队头阻塞。

为了测量这一点,我们在持续的文本与图像混合流量下,对比了聚合式服务与同机部署编码器。

柱状图:在 50/50 混合流量下,同机部署 EPD 使文本 TTFT 降低 42%,图像 TTFT 降低 31%。
图 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 其他优化手段,针对技术栈的不同阶段进行优化。

并行媒体解码把下载和解码从 worker 移到 Dynamo 前端,由前端把解码后的像素发送给后端。在单块 GB200、两个编码 worker、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 块的 worker 上。没有它的话,路由器会把每张图像都看成同一个占位词元。

致谢

感谢 Inferact 联合创始人 Roger Wang 对本文的反馈,也感谢 NVIDIA 团队的 Alexandre Milesi、Ayush Agarwal、Guan Luo、Indrajit Bhosale、J Wyman、Kris Hung、Krishnan Prashanth、Qi Wang 和 Zhongdao Ren 在 Dynamo 多模态支持上的核心工作。