← 文章 / AI技术
NVIDIA 开发者博客 1小时前 · 2026-09-10 05:06:15 · 1 阅读

多模态模型推理加速:何时采用 EPD 分离

EPD(Encode-Prefill-Decode)分离是一种面向多模态模型的推理优化技术,将视觉编码器阶段与 prefill、decode 阶段解耦。它在图片密集型提示、短至中等长度输出以及量化 MoE 模型上效果最为显著。

本文介绍如何借助 NVIDIA Dynamo 在合适的场景下使用 EPD 分离,实现 TTFT(首 token 时间)最多提速 5 倍、端到端响应时间最多提速 7 倍,同时也说明了哪些场景下不建议采用 EPD 分离。

Dynamo 是一个面向分布式环境的开源推理框架,支持 EPD 分离——将各阶段拆分为可独立伸缩的模块,而非像传统聚合部署那样以紧密耦合的调度和伸缩模式一起运行。专用 encoder worker 能够改善批处理效率、内存利用率以及整体吞吐量。

为什么需要 EPD 分离?

多模态请求在 LLM prefill 开始前还有额外工作要做:serving 层必须先对媒体数据做预处理,再运行视觉 Transformer(ViT)生成 embedding。在聚合式部署中,视觉编码、LLM prefill 和 decode 共用同一个 worker 和同一套调度域。当媒体处理仅占整体负载的一小部分时,这种简单架构尚能应付。

柱状图显示对多图像和视频请求而言,编码器计算在 TTFT 中占主导地位。
图 1. 单图像、多图像和视频请求的 TTFT 分解,分为媒体预处理、ViT 前向与投影、LLM prefill 三部分

当请求包含更多图像或视频时,这种平衡就会改变。视觉编码可能耗时数百毫秒甚至更长。由于编码器和 LLM 共享同一块 GPU,媒体密集的请求不仅会拖慢自己的 prefill,还会与并发的 prefill 和 decode 任务抢占资源。反过来,在混合负载下,纯文本请求即使不需要视觉编码,也可能排在多模态请求之后等待。

Dynamo 通过将编码器和 PD worker 角色分离来实现 EPD serving,同时不固定它们的硬件位置。编码器 worker 负责生成视觉 embedding,PD worker 则消费这些 embedding 并运行 LLM。这样各阶段就可以独立地进行批处理、调度和扩缩容。图 2 对比了聚合式 serving 和 EPD serving,其中编码 worker 通过 NVIDIA Inference Transfer Library (NIXL) 将 embedding 传递给 PD worker。

聚合式与 EPD 服务流程对比图,encode worker 通过 NIXL 向 PD worker 传递 embedding。
图 2. Dynamo 中聚合式与 EPD 的请求流程。EPD 将 encode 执行从 PD worker 中分离,并通过 NIXL 传输 embedding

Encode 分离化只能在特定场景下降低 TTFT 并提升同等 SLO 下的 goodput。分离出的 encode 计算量必须足够大,才能抵消 worker 间协调和 embedding 传输带来的额外开销。Encode worker 可以与 PD 共享 GPU,也可以部署在独立的 GPU 层级上,由此产生不同的部署方案。下面我们来分析 encode worker 的各种部署选项及其在不同场景下的收益。

三种 encode 部署拓扑

图 3 对比了聚合式服务与两种 encoder 分离化拓扑——共部署和全分离:

  • 聚合式:每块 GPU 上运行一个聚合 worker,其调度器将视觉编码、LLM prefill 和 decode 统一纳入同一请求生命周期管理。
  • 共部署 encoder:每块 GPU 上运行一个或多个 encoder worker,同时搭载一个 PD worker。这样既能让各 worker 共享 GPU 算力,又保持独立的请求队列和批处理。在齐集群上,共部署 encoder 通常是更优选择。视觉 encoder 相对于 LLM 很轻量,若整块同规格 GPU 都留给 encode,利用率会偏低。共部署在保持 worker 逻辑隔离的同时,避免了为 encoder 独占一整块 GPU。
  • 分离式编码器:当集群中存在一个成本更低的 GPU 层级且该层级更适合运行编码器负载,而主 GPU 层级承载 PD 节点时,分离式编码器方案就具有吸引力。Dynamo 通过 NIXL 将生成的视觉嵌入传递到 PD 层级。在我们的测试环境中,编码器节点运行在两块 NVIDIA RTX 6000D GPU 上,PD 节点运行在四块 NVIDIA GB200 GPU 上。这样的部署让较轻的编码器负载留在 RTX GPU 上,将 GB200 GPU 留给计算和内存需求更高的 LLM 负载。需要注意的是,本分析未涵盖同构 GPU 的分离式部署,因为其性能始终不如共置编码器方案。

硬件可用性决定了编码器能部署在哪里,而负载特征则决定了分离部署是否划算。

Diagram of three encoder placements: aggregated (one worker), colocated (shared GPU through CUDA MPS), and disaggregated (RTX encoders, GB200 PD).
图 3。三种编码器部署方案:聚合式服务、编码器与 PD 节点共置、以及将编码器部署在独立低成本 GPU 层级上的分离式编码器

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

EPD 的收益取决于视觉编码、LLM prefill 和 decode 之间的工作分配。当视觉编码占请求处理时间的较大比例或成为吞吐瓶颈时,EPD 最有价值。媒体密集型请求容易产生这种情况,但仅凭媒体负载并不能决定最终效果。输出长度、模型规模与精度、流量构成同样会改变这一平衡。

因素对 EPD 的影响EPD 何时产生收益
输入媒体负载媒体负载越重,产生的视觉 token 越多,编码器工作也越重。EPD 允许独立扩展编码器,避免编码瓶颈。 多张图片、高分辨率图片或视频输入会产生更多视觉 token。
输出序列长度(OSL)OSL 越长,总延迟中解码占比越高。EPD 带来的 TTFT 提升依然成立,但端到端(E2E)的收益会缩小。短 OSL:E2E 收益保持;长 OSL:E2E 收益逐渐消失
模型规模 / 精度ViT 的计算量基本固定,而 LLM 的计算量会随有效参数减少和精度降低而下降。因此小型、MoE 和量化 LLM 的 ViT 与 LLM 计算量之比更高。更小、MoE 和低精度的模型从 EPD 中获益更多,大型稠密模型收益较小。
混合流量(文本 + 多模态)混合 prefill 批次可能让文本请求等待 ViT。EPD 将编码器工作隔离,使文本请求无需等待编码器。多模态流量较重且与延迟敏感的文本请求混合的场景。
表 1. 各因素对 EPD 性能的影响

测试环境

除精度消融实验外,所有基准测试均使用 Qwen3.5 122B A10B NVFP4。我们使用四块 GB200 GPU(分离部署时另加 RTX 6000D GPU):

  • 聚合部署:每块 GB200 运行一个 TP1 聚合 worker
  • 同机 EPD:每块 GB200 运行两个编码器 worker 加一个 PD worker
  • 分离 EPD:RTX 节点作为编码层,GB200 作为 PD

视觉 embedding 传输采用基于 UCX RC/TCP 以太网的 NIXL,实测峰值带宽 20 Gbps。前端使用 Dynamo,并启用了前端并行媒体解码。goodput SLO 为 token 间延迟(ITL)低于 100 ms。

图像密集型负载示例

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

柱状图显示 EPD 方案下每请求 10 张图片时 TTFT 降低约 2 倍、goodput 提升约 1.5 倍。
图 4. 图片密集型负载(每请求 10 张图)下各拓扑的平均 TTFT 与端到端延迟(左)。在 ITL 低于 100 ms 的 SLO 约束下,goodput 相对于聚合架构的提升(右)

encoder 与 prefill 同节点部署时 TTFT 下降 58%,异构分层部署时下降 50%。端到端延迟改善有限,因为 OSL 为 1024 意味着模型需生成 1024 个 token,而 Encoder 分离并不能缩短 decode 时间。更显著的收益体现在 goodput 上:异构分层在相同延迟 SLO 下可多承载 70% 的流量,因为新增的 encoder 算力没有占用 GB200 的预算。

图片数量与 OSL 如何影响性能收益?

我们在多组实验中分析了 5 至 50 张图片、每张图片分别使用 128 或 256 token 预算时对 TTFT 和端到端延迟的影响,OSL 保持恒定。结果表明,在 encoder 聚合部署的场景下,TTFT 和端到端延迟均随图片数量增加而恶化;而两种分离式拓扑的性能则基本保持稳定。

两张并排的折线图,显示聚合部署的 TTFT 随图片数量上升而急剧增长,而两种 EPD 拓扑均保持平稳。
图 5. 平均 TTFT 随视觉 token 负载变化(5 至 50 张图片,OSL 512)。聚合部署的延迟随视觉 token 数量(图片数 × 每张图的 token 数)急剧上升;两种 EPD 拓扑的延迟则几乎保持平稳

接下来,我们将 OSL 从 128 逐步调整到 2,048,图片负载固定为 5 张。随着 OSL 增大,TTFT 基本不变,但 decode 时间占端到端延迟的比重越来越大。因此,异构 EPD 相对聚合部署的端到端收益从 20.3% 收窄至 5.2%。同节点部署的 encoder 则从 11.8% 的收益转为 2.5% 的性能退化,因为其额外的 encoder worker 与 PD worker 共享同一组 GPU。OSL 越大、decode 压力越强,GPU 争用对 encoder 解耦收益的抵消乃至反转就越显著。

折线图,显示随着 OSL 增大,EPD 相对聚合部署的端到端延迟优势逐步收窄。
图 6. 平均端到端延迟随 OSL 变化。随着 OSL 增大,EPD 与聚合部署之间的端到端差距逐步收窄,因为 decode 时间 increasingly 占主导地位

图 7 和图 8 分别展示了在不同 OSL 和图片负载下,TTFT 和端到端延迟相对聚合(baseline)的百分比改善。在几乎所有场景下,输入媒体负载越高,encoder 解耦带来的收益越显著。而在 OSL 较高、图片负载较低的场景中,将 encoder 解耦反而会损害性能。

两张热力图,显示相比聚合部署有 25–93% 的 TTFT 提升,图像数量越多收益越明显。
图 7. 输入图像负载(图像数量 × 视觉 token 数)。相比聚合部署的 TTFT 提升(Qwen 3.5 122B NVFP4)。上图是同址 EPD,下图是异构 EPD。两种拓扑在整个网格范围内都带来 25–93% 的 TTFT 提升。负载最重的单元格(50×128 张图像,任意 OSL)提升达 92–93%。由于 TTFT 不受输出长度影响,收益在整个 OSL 维度上保持一致
两张热力图,端到端收益在图像负载高、OSL 短时最大,随着媒体负载变轻和输出变长而缩小。
图 8. 相比聚合部署的端到端请求延迟提升(相同模型和硬件)。图像负载高且 OSL 短时收益显著,向左上角(媒体负载轻、输出长)逐渐缩小。同址 EPD 在 5×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 倍。

柱状图:colocated EPD 相对于 aggregated serving 的 goodput 增益随模型规模增大而下降,MoE/量化场景下有所回升。
图 9. 不同模型配置下,Same-SLO 条件中 colocated EPD 相对于 aggregated serving 的 goodput 增益。EPD 增益随模型规模增大而递减,在 27B 处跌破盈亏平衡点;低精度及 MoE 模型因激活参数量更少,增益更大。

参数占比只是一个间接指标,真正起决定作用的是 ViT forward、LLM prefill 和 decode 三者在运行时的耗时是否均衡。当 ViT forward 在请求处理中占比较大时,EPD 的收益更明显;一旦 prefill 和 decode 成为主要耗时环节,可供优化的 encoder 工作就相应减少。在我们的 27B 配置下,colocated 部署中 LM 的开销已经超过了将 encoder 独立出来所带来的收益。

我们测量了 LLM 精度对 EPD 增益的影响。当视觉 encoder 和 LLM 均使用 BF16 时,colocated EPD 的 goodput 达到 aggregated serving 的 1.78 倍。仅将激活的 LM 权重量化为 NVFP4 后,这一增益进一步提升至 2.64 倍。

柱状图:LLM 精度从 BF16 降至 NVFP4 时,共置 EPD 的 goodput 从 1.78x 提升至 2.64x。
图 10:LLM 量化对 EPD goodput 的影响。柱状图展示共置 EPD 相对于聚合式服务的 goodput 比值。将 LLM 活跃权重从 BF16 量化到 NVFP4 后,该比值从 1.78x 提升至 2.64x。两种配置下视觉编码器均保持 BF16。

NVFP4 加速了 LLM 的 prefill 和 decode 阶段,而 ViT 前向推理仍保持 BF16,这使得请求时间中编码器工作占比更大。EPD 因此获得了更大的调度空间,可以将编码器负载与 PD worker 独立编排。

EPD 如何助力混合模态请求

生产环境中,纯文本请求和多模态请求经常混在一起,两者可能被调度到同一批 prefill。在聚合式服务中,一个 worker 同时负责视觉编码和 LLM prefill。一旦批次中混入多模态请求,worker 就必须先完成媒体预处理和 ViT 前向,再开始 prefill。纯文本请求本身不需要这些步骤,却只能被动等待,TTFT 因此被拉长。

EPD 通过把视觉编码放到独立的 encoder worker 上,解除了这种依赖。前端将两类请求都路由到 prefill worker,但只有缺少 embedding 的多模态请求才会触发 encoder 池。纯文本请求可以直接进入 prefill,编码器则独立处理多模态请求,从而消除了两类请求之间的队头阻塞。

为了量化这一收益,我们在持续混合文本与图片流量的条件下,对比了聚合式服务(编码器共置)的表现。

柱状图显示在 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 prefill,这就是文本请求 TTFT 相对改善更大的原因。

如何选择最优的编码器拓扑

编码器的最佳部署位置取决于请求耗时分布在哪一环节。当视觉编码在请求处理中占比较大时,EPD 带来的收益最为明显,例如媒体内容较多的输入、短到中等长度的输出、较小或量化后的模型,以及混合流量场景。而当媒体处理负载较轻或长解码序列主导延迟时,聚合服务依然是合适的选择。

硬件条件也会影响部署决策。在同构集群上,同机部署编码器可以在不必为相对轻量的视觉模型独占整块 GPU 的情况下,实现编码器调度和批处理的分离。而在异构硬件上,独立编码器层更为实用,可让低配 GPU 运行编码器,高端 GPU 专注 PD。

需要注意的是,vLLMSGLang 都已将 EPD 的进一步开发列入路线图。

开始使用 EPD 分离部署

如需复现本文中的实验,请参考 ai-dynamo/dynamo 的 GitHub 指南。

如图 1 所示,TTFT 中有 43% 的时间消耗在 ViT 启动之前,EPD 对这些阶段无能为力。以下列出的 Dynamo 其他优化手段可以分别针对技术栈的不同环节。

并行媒体解码将下载和解码从 worker 移到 Dynamo 前端,由前端把解码后的像素数据直接发送给后端。在单台 GB200、两个编码 worker、30×256 分辨率的纯 encoder 基准测试中,同等吞吐下平均 encoder 请求延迟降低 26%(281.3 ms → 207.0 ms),P99 降低 23%(752.1 ms → 581.7 ms)。通过 --frontend-decoding 启用。

Embedding 缓存将已计算的 embedding 存储在 CPU DRAM 中,避免重复媒体被重新编码。当同一多模态内容(如图片或视频)出现在多个请求中时,系统直接复用缓存的 embedding,而非再次运行视觉 encoder。

多模态 KV 路由在 Dynamo 的 KV-aware 路由器中,将媒体内容与文本一起参与哈希计算,使共享同一媒体的请求被调度到已持有相关 KV blocks 的 worker 上。缺少这一机制时,每张图片在路由器眼里都只是同一个占位 token。

致谢

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

原始来源: NVIDIA 开发者博客

评论 (0)