Papers

031 · Text-to-Video Serving

DDiT:按扩散 step 动态调整视频生成的 GPU 并行度

DDiT 怎样分配 GPU:它把 T2V pipeline 中的 DiT 和 VAE 拆开。每张 GPU 预载完整权重,通信组按需建立;系统再依据分辨率和 starvation time,在 denoising step 边界调整 DoP。

本文目录 · 18 节
  1. 1. Monolithic serving 浪费在哪里
  2. 2. 3 层架构
  3. 3. 离线最优与在线可用算法
  4. 4. Greedy step-wise 调度
  5. 5. 完整例子:360p 请求与 144p 请求共享 8 卡
  6. 6. 前置知识:1 条文生视频请求究竟做了什么
  7. 7. 性能画像如何推出 3 个设计约束
  8. 8. 理论动态规划逐变量解释
  9. 9. Optimal DoP 与 starvation 的推导
  10. 10. 动态通信组与 latent 迁移的实现
  11. 11. 实验设置与结果
  12. 12. 消融告诉我们什么
  13. 13. 基线、成本与结果的完整解读
  14. 14. 消融结果、方法边界与相关工作
  15. 15. 从请求到完成的控制消息时序
  16. 16. 手算 1 个离线分配与在线偏离
  17. 17. 适用边界、故障模式与改进空间
  18. 18. 复现清单与结论边界

1. Monolithic serving 浪费在哪里

文本到视频通常依次经过语言编码器、Diffusion Transformer(DiT)多轮 denoising、VAE 解码。DiT 的 attention 随 token length 近似 \(\mathcal{O}(L^2)\),占主要时间;VAE 对 sequence parallelism 的收益远弱于 DiT。现有 monolithic 部署却让 2 个 phase 使用同一组 GPU 和同一个 degree of parallelism(DoP)。例如 DiT 用 4 卡明显加速,VAE 用 4 卡的单卡计算时间不降,后 3 卡便是浪费。

把 DiT、VAE 静态分成 2 个集群也不够。请求分辨率和到达率变化时,一边可能排队,另一边闲置;固定 DoP 也不能同时适合 144p、240p、360p。低分辨率过度并行会浪费通信,高分辨率 DoP 太小又拖长尾延迟。既有 scheduler 通常只在 request 开始时分资源,无法利用 1 条请求几十个 denoising step 之间的可重配置点。

2. 3 层架构

Offline Profiler 对每种分辨率与 DoP 组合测单步时间,只需对新分辨率做 1 次,结果写入 Request Information Database。Centralized Control Plane 包含 global scheduler、cluster monitor、resource allocator,跟踪每张 GPU、每个 request 的 phase、step 和当前 DoP。Engine Unit 在 GPU 上加载模型权重,controller 接收 GPU ID,按需建立通信组并逐 step 触发 model engine。

关键解耦是“加载权重”和“建立 parallel group”分开:所有 GPU 起初已有完整模型权重,但不预先绑定 2/4/8 卡组。扩容时只把 latent broadcast 到新成员并建通信域,缩容时保留 master 上的 latent。这样才可能在 1 个请求中途改变 DoP,而不是重新加载整个模型。

3. 离线最优与在线可用算法

论文先用动态规划描述已知 request 分辨率分布时的理论最小累计 GPU 占用时间:

\[ \begin{aligned} O &= \sum_j \operatorname{occupied\_time}(\mathrm{GPU}_j),\\ \mathrm{dp}[i][j] &= \text{minimum cumulative occupancy},\\ W_{\mathrm{batch}}(\mathrm{type}_j) &= \left\lceil\frac{Sx_j}{\alpha}\right\rceil d. \end{aligned} \]

其中 \(\mathrm{dp}[i][j]\) 表示前 \(i\) 张 GPU 服务前 \(j\) 类分辨率的最小累计占用;\(S\) 是 pending 请求数,\(x_j\) 是第 \(j\) 类比例,\(\alpha\) 是给定拓扑与 DoP 后可形成的实例数,\(d\) 是离线 profile 的单请求时间。在线时未来分布未知,DDiT 不反复求 DP,而是为每种分辨率选 1 个 optimal DoP \(B\):比较 DoP 每次翻倍时单步时间下降率 \(z=1-\frac{\operatorname{time}(i,r)}{\operatorname{time}(i/2,r)}\),取收益拐点。论文配置中 144p、240p、360p 的 \(B\) 分别为 1、2、4。\(B\) 不是最大可用 GPU,而是分辨率对应的合理上限。

4. Greedy step-wise 调度

  1. 请求按 FCFS 到达。若空闲 GPU 数 G 小于该分辨率的 B,先给 G 张启动,不等待凑齐 B;该请求标为 hungry。
  2. 其他请求完成 step、DiT phase 或 VAE phase 后释放 GPU,global scheduler 触发重排。
  3. 所有 hungry request 按 starvation time 排序。它估计自上次分配以来,由低于最优 DoP 导致的额外 DiT 时间。
  4. 优先给 starvation 最大者扩到 B;扩容在 step 边界发生,engine controller 建新通信组并同步 latent。
  5. DiT 结束后立即降到 VAE 所需的更小 DoP,多余 GPU 供下一请求,而不是等整条 pipeline 完成。
\[ r_{\mathrm{starv}}\mathrel{+}=\left(\mathrm{cur\_step}-\mathrm{last\_step}\right) \left(\mathrm{current\_step\_time}-\mathrm{optimal\_step\_time}\right). \]

hungry 优先级:\(r_{\mathrm{starv}}\) 越大越先补 GPU。

这个量不是作业已等待多久,而是“少卡造成的性能牺牲”。因此 1 个刚到但高分辨率、当前 1 卡远慢于最优 4 卡的请求,可能很快积累优先级;1 个 144p 请求本来 1 卡即最优,不会无意义抢卡。

5. 完整例子:360p 请求与 144p 请求共享 8 卡

360p 请求 A 到达,offline profile 给出 \(B=4\),但当时只有 2 卡空闲。传统静态 DoP=4 会让 A 等待;DDiT 先用 2 卡运行并记为 hungry。随后一个 144p 请求 B 到达,它的最优 DoP=1,拿 1 卡即可开始。A 每跑 1 个较慢 step,starvation 累积。

旧请求 C 完成后释放 2 卡。scheduler 在 A 的 step 边界把其中 2 卡加入 A,A 从 DoP 2 提升到 4;engine broadcast 当前 latent,下一 step 用新通信组。A 完成所有 DiT steps 后,VAE 只保留最低 ID 的 1 张 master GPU,另外 3 张立刻释放。新到的请求不必等 A 的 VAE 结束。这个例子同时体现“不到 B 也启动”“step 级升并行”“phase 间降并行”三件事,单做其中一项无法获得完整收益。

6. 前置知识:1 条文生视频请求究竟做了什么

语言编码器先把文本提示转换成条件表示;扩散变换器接收条件与带噪 latent,在固定次数的去噪步骤中反复预测噪声或速度,每一步都要遍历大量时空 token;最后变分自编码器把干净 latent 解码为像素帧。语言编码通常只执行 1 次,DiT 执行几十次且 attention 随 token 数平方增长,VAE 只在末尾执行但包含卷积和上采样。三者计算形态不同,把它们当成 1 个不可分割模型实例会掩盖资源需求。

序列并行把时空 token 沿序列维切给多张 GPU。每张卡计算一部分 attention/前馈,再用高速通信交换必要结果。分辨率越高、帧数越多,token 越多,计算可并行空间越大;但 GPU 数增加后,通信和同步占比也上升,所以单步时间不会按卡数线性下降。VAE 的算子和张量布局又不同于 DiT,同样的序列切分可能几乎没有收益。这是论文用异构 DoP 而不是统一 DoP 的硬件原因。

服务指标包含平均延迟与 99 分位延迟。平均值反映整体资源效率,尾延迟反映请求是否因排队或资源争用严重牺牲。只给每条请求最大 DoP 会缩短单条执行,却降低并发并拉长后续排队;只用 1 张卡可提高实例数,却让高分辨率请求占据卡太久。DDiT 的目标不是追求单步最短,而是在动态到达下平衡单请求速度、系统并发和累计 GPU 占用。

7. 性能画像如何推出 3 个设计约束

第一项画像比较 batch。文生视频请求的 latent 很大,不同分辨率又难以放入同一批,增加 batch 会显著推高显存并不稳定改善延迟,因此论文选择请求级并发和序列并行,而不是依赖大 batch 吞吐。第二项画像比较 DiT 与 VAE 的 DoP 曲线:DiT 在高分辨率下随卡数增长有明显下降,VAE 的每卡计算时间却可能不降,证明 phase 间必须异构。

第三项画像比较分辨率。论文的单步时间随 144、240、360 线分辨率显著增长,且相邻 DoP 翻倍的收益不同。低分辨率在 1 张卡附近就到拐点,中分辨率适合 2 张,高分辨率适合 4 张。在线上限来自每个模型、分辨率和并行度的离线实测曲线及其边际收益,并非“分辨率越高卡越多”的硬编码规则。

这些观察还否定静态 disaggregation。若固定若干卡只跑 DiT、另一些只跑 VAE,DiT 长时间繁忙而 VAE 间歇执行,VAE 组大部分时间闲置;突发低分辨率请求时,预留给高并行 DiT 的固定组也可能不匹配。DDiT 让 GPU 都能装载完整权重,并把“当前属于哪个通信组”变成运行时决定,避免硬资源边界。

8. 理论动态规划逐变量解释

理论问题假设系统已知一批请求中各分辨率比例。共有 \(m\) 个实例位置、每个位置含 \(n\) 张 GPU,总资源 \(M=m\times n\);分辨率类型数为 \(N\),第 \(j\) 类占比为 \(x_j\)。状态 \(\mathrm{dp}[i][j]\) 表示只用前 \(i\) 张 GPU 服务前 \(j\) 类请求时的最小累计占用时间。转移枚举给第 \(j\) 类分多少张卡 \(k\),以及这些卡上的序列并行度 \(p\)。

\[ \mathrm{dp}[i][j]=\min_{k,p}\left\{\mathrm{dp}[i-k][j-1]+k\cdot\operatorname{Occupy}\!\left(x_j,d(p,j),\alpha\right)\right\}. \]

其中 \(d(p,j)\) 是第 \(j\) 种分辨率在并行度 \(p\) 下的画像执行时间;\(\alpha\) 是给定 \(k\) 张卡、拓扑和 \(p\) 后能形成的并行实例数;\(x_j\) 是该类请求占总请求的比例;\(k\) 是划给该类的 GPU 数,而不是每实例并行度;\(p\) 是一个实例内部的序列并行度。

\(\alpha\) 必须考虑拓扑。例如 2 台各 8 卡机器,机内有高速互联、机间较慢;若空闲卡碎片分布跨节点,7 张空闲卡在 \(p=1\) 时可形成 7 个实例,在 \(p=4\) 时可能只能形成 1 个满足带宽要求的组。BandwidthAwarePartition 因此先判断给定卡集合能形成多少组,无法合法成组就跳过转移。

若系统开始前已有 \(S\) 个请求且之后不再到达,分给第 \(j\) 类的每个实例约处理 \(\left\lceil Sx_j/\alpha\right\rceil\) 个请求,单卡占用时间是这个数量乘画像时间 \(d\)。乘 \(k\) 后得到该类总 GPU 秒。动态规划使用完整请求分布计算离线下界,用于评价在线 greedy 距离最优多远;在线调度则只使用当前已经到达的请求。

9. Optimal DoP 与 starvation 的推导

如果目标只最小化单请求 GPU 秒,按照阿姆达尔定律,增加并行度后速度收益通常小于卡数增长,最省资源的选择常是 1 张卡。但 1 张卡执行高分辨率请求太久,会阻塞队列。论文用相邻并行度的单步时间下降率寻找兼顾延迟和效率的拐点:

\[ z(i,r)=1-\frac{\operatorname{step\_time}(i,r)}{\operatorname{step\_time}(i/2,r)}. \]

其中 \(i\) 是当前候选并行度,取二、四、八等;\(r\) 是请求分辨率;\(z\) 是从 \(i/2\) 张卡增加到 \(i\) 张卡后单步时间下降比例;\(B(r)\) 是画像曲线上边际收益最合适的并行度上限。

在线到达时,若空闲卡少于 B,请求仍立即启动并成为 hungry。它因少卡付出的牺牲不是简单等待时间,而是当前每步时间与最优每步时间的差,乘自上次资源事件后执行的步数。每次有新 GPU 释放,所有 hungry 请求更新该累计量,值最大的先扩。这样,高分辨率请求若 1 张卡与 4 张卡差距大,会比接近最优速度的请求更快积累优先级。

starvation 还避免只按到达时间造成的资源浪费。1 个很早到达的 144 线请求即使只用 1 张卡,也已达到它的 B,不属于 hungry;它不会因为年龄大继续抢卡。1 个稍晚的 360 线请求若只分到 1 张,实际牺牲迅速增加,释放的卡应先补给它。优先级直接度量性能损失,与系统优化目标更一致。

10. 动态通信组与 latent 迁移的实现

每个 Engine Unit 包含控制器与模型引擎。初始化时所有可服务 GPU 加载完整权重,但不立即建立固定大小的序列并行通信组。Global scheduler 分配 1 组 GPU 标识后,控制器为该请求创建独立通信句柄并开始 step。多个重叠 Engine Unit 必须使用不同句柄,避免集合变化后消息串入旧组。

扩容只能发生在 step 边界,因为 1 个 attention step 内部改变参与者会破坏 collective。旧 master 把当前 latent 表示广播到新成员,新组从下一步开始按新的序列切分执行。扩容成本包含建组、广播和重新切片,因此 DDiT 只向 B 提升,而不是每释放 1 张卡就无限加卡。论文的 intra-phase decoupling 就是让控制器逐步触发模型,而非 1 次调用执行完所有去噪步骤。

DiT 完成后进入 VAE,inter-phase decoupling 选最低标识 GPU 作为 master,保留完整或可恢复的 latent,解散 DiT 大组并建立更小 VAE 组。其余卡立即返回全局空闲表。权重已经常驻,卡随后可以加入另一 条请求的 DiT 或 VAE。若耦合实现把 2 个模型和通信组一起初始化,这 1 步就要重载权重,弹性收益会被分钟或秒级初始化吞掉。

Cluster monitor 需要持续收集请求所在 phase、当前 step、当前与最优 DoP、最近分配 step 和空闲 GPU 拓扑。Resource allocator 从满足高速互联的卡开始尝试最佳分配,若凑不出 B 就逐级减少,至少 1 张时让请求运行;完全无卡才留在 waiting queue。Hungry queue 与 waiting queue 分开,使中途扩容和新请求启动都能在同一资源事件中处理。

11. 实验设置与结果

实现使用 T5 encoder、OpenSora SDDiT 与 OpenSora VAE,测试 144p/240p/360p、不同比例和到达率;baseline 包括静态 DoP、静态分区并集群隔离、动态分区但隔离,以及无隔离的动态分区。单节点和仿真的 8 节点 64 GPU 集群分别评估 p99、平均延迟与按 GPU 占用秒数计算的成本。

单节点低到达率 0.25 时,最佳静态 DoP=4,DDiT 仍将 p99 降低 12.88%;到达率 0.5 时最佳静态 DoP 变为 2,DDiT 降低 10.71%。若错误沿用到达率 0.25 的静态 DoP=4,在 0.5 负载下 DDiT 相比它将 p99 最多降低 36.6%、平均延迟最多降低 44.4%。到达率 0.75/1.0 时,相对最佳静态配置,p99 最多降 19.23%,平均最多降 29.5%;burst 下相对最佳静态 DoP=1,分别降 20.7% 与 21.7%。

在 8 节点 64 GPU burst 模拟中,DDiT 相对 4 个 baseline 至少降低 30.4% p99 和 30% 平均延迟,成本最多降低 30.4%。它的成本是理论最优的 1.39×,最佳 baseline 是 2.08×。论文摘要对整体概括为 p99 最多改善 1.44×、平均延迟最多 1.43×。

12. 消融告诉我们什么

只把 DiT/VAE 解耦加入静态 DoP,就能因为 VAE 早释放 GPU 而改善连续请求;只打开 DoP promotion,则能利用中途释放的 GPU 缩短 hungry request。多节点重载下两者收益叠加最明显,因为资源释放与等待请求更多。静态/动态 cluster isolation 始终受固定边界拖累,即使分区时选了合理 B,也无法把 1 类分辨率的闲置 GPU 借给另一 类。

13. 基线、成本与结果的完整解读

静态 DoP 为所有请求选同一并行度,能说明某个到达率下的最佳固定点,但它随负载变化:低负载时 4 卡缩短单条延迟,负载升高时 2 卡或 1 卡让更多请求同时运行。静态分区并隔离为不同分辨率划固定组,动态分区并隔离会调整组大小,却都不允许跨组借卡;动态分区不隔离去掉硬边界,但仍缺 step 级 promotion 和 phase 级 demotion。DDiT 相对这些基线的增益可拆成共享资源、合适 B、DiT/VAE 解耦与中途扩容。

论文把货币成本数值等同累计 GPU 占用秒,假设每张卡每秒价格恒定。该指标能公平比较同一集群中不同分配的资源效率,却不包含云实例整机计费、空闲卡是否能立刻租给别人、网络和存储价格。8 节点模拟中 DDiT 成本是理论最优的 1.39×,最好基线 2.08×,说明 greedy 离已知未来的下界仍有差距,但比静态策略更接近。

摘要说最高 1.44×99 分位、最高 1.43× 平均延迟,是把降低百分比换成速度比后的总体概括。逐负载结果更有解释力:到达率 0.25 和 0.5 时,DDiT 相对当时最佳静态配置的尾延迟改进约 10%;高到达率和突发时资源事件更多,解耦与 promotion 的价值上升。不能拿突发负载的最大收益预测低利用率服务。

在分辨率比例变化的十种 workload 中,隔离策略的坏处取决于流量是否匹配预留组。某类请求占比高时,对应组排队而其他组闲置,尾延迟急剧上升。DDiT 全局共享卡,使比例预测错误不会变成永久资源边界。它仍使用先到先服务决定基本次序,starvation 只在 hungry 请求间分新增卡,因此没有通过任意重排请求来获取表面上的平均延迟优势。

14. 消融结果、方法边界与相关工作

DDiT 的贡献不止于 disaggregation。权重常驻、通信组生命周期和 denoising step 调度被放在同一个运行时里,DoP 才能在单个请求执行期间改变;starvation time 则用“资源不足损失了多少计算时间”来表达公平性。

局限:每张 GPU 常驻完整权重会消耗显存,大模型未必容得下;扩容仍需建通信组与传 latent,频繁变更可能反噬。offline profile 假设相同分辨率、steps 和模型配置下时间稳定;不同帧数、网络拓扑或 kernel 版本要重新测。论文主要基于 OpenSora,结论不自动覆盖所有视频扩散架构。目标函数重视延迟与占用成本,没有讨论输出质量变化,因为调度不改变算法 steps。

合集关系:DDiT 管的是连续扩散模型的 GPU DoP,DSB/DAWN 管的是 diffusion LLM token 解码;共同点只有“在迭代边界做动态决策”。它与 PromptTuner 都使用弹性 GPU,但 PromptTuner 的热池避免模型初始化,DDiT 的权重常驻和按需通信组服务于 step 级扩缩。

15. 从请求到完成的控制消息时序

请求进入 global scheduler 后先查请求信息库。若该分辨率从未画像,系统不能凭分辨率线性外推并行收益,需要先完成 profile 或使用保守配置;已有记录则取对应 B。Scheduler 向 resource allocator 请求最多 B 张拓扑合法的卡。分配结果为空,请求留在 waiting;结果少于 B,请求进入 running 同时登记到 promote table;结果等于 B,只进入 running。

Engine controller 收到开始消息后创建通信组、载入或定位文本条件与初始噪声,逐步调用 DiT。每一步结束,它向 monitor 上报当前 step 和实测耗时。若没有新资源事件,下一步沿用当前组;若其他请求释放卡,global scheduler 先更新 promote table 中所有 starvation,再按降序调用 TryBestAllocation。扩容成功后,旧组在边界停住,控制器把 latent 同步到新组,记录 last step,并用新画像时间更新后续牺牲估计。

最后一个去噪 step 完成,控制器发出 phase-change。Allocator 从组中留下 VAE 所需成员,其余卡触发 new-GPU event;这些卡可以先补 hungry,也可以启动 waiting。VAE 完成后,结果回到 scheduler 输出给用户,最后成员释放。这个时序解释了为什么释放事件可能同时引发 2 轮决策:先把正在受损的请求补到合理并行度,再尽量让新请求至少用 1 张卡启动。

控制面必须处理异步消息的版本。若 1 个请求刚完成却仍收到旧 promotion,不能重新建组;若 2 张卡先后释放,2 次 scheduler 决策不能把同一卡分给 2 个请求。论文架构用集中式资源分配器维护唯一 GPU 状态,降低并发竞态。复现时应给每次分配带请求标识、step 与组版本,只有与当前状态匹配才执行。

16. 手算 1 个离线分配与在线偏离

考虑 2 类请求,低分辨率比例为 \(x_1\),高分辨率比例为 \(x_2\),总数 \(S\),资源为 \(M\) 张卡。画像给出低分辨率在 1 张卡上的时间 \(d(1,1)\),高分辨率在 1、2、4 卡上的时间 \(d(1,2)\)、\(d(2,2)\)、\(d(4,2)\)。动态规划枚举给高分辨率 \(k\) 张卡且每实例并行度 \(p=4\) 时,先由拓扑函数算能组成 \(\alpha\) 个 4 卡组;其占用项是 \(k\) 乘以 \(\left\lceil Sx_2/\alpha\right\rceil\),再乘 \(d(4,2)\)。剩余 \(M-k\) 张卡服务低分辨率的最优项已存于前一状态。

若增加 4 卡组让高分辨率完成更快,却使 \(k\cdot\operatorname{Occupy}(\cdots)\) 上升,动态规划可能选择 2 个 2 卡组,因为它们同时处理 2 条请求;若高分辨率占比很小,也可能只留 1 个组,把更多卡给低分辨率并发。这里最优结果依赖整批比例,不等于每类独立选择最快 DoP。论文用该结果作为 theoretical optimum 正是为了包含跨类型竞争。

在线 greedy 只使用当前已经到达的请求。假设先来高分辨率而只有 2 卡,它立即启动;随后低分辨率到达并占 1 张;之后释放 2 张时,scheduler 可能把卡补给高分辨率。DDiT 用 B 限制 1 次请求最多拿多少,避免短期负载估计被无限放大;用 FCFS 保持请求顺序;用 starvation 在真实发生性能牺牲后补卡。这些规则解释了 1.39× 理论最优差距为何合理存在。

Queue model 与 batch model 的区别也在未来到达。Batch 假设有限集合处理完即结束,实例数只决定把 S 条均分多少轮;Queue 假设到达与完成形成稳定流,等待时间还受服务率和利用率影响。论文把详细排队推导放在附录,但在线算法没有依赖精确到达分布,因此对突发负载仍能运行,只是无法保证离线最优。

17. 适用边界、故障模式与改进空间

权重常驻是假设中最昂贵的一项。若 DiT 与 VAE 权重合计接近单卡容量,每张卡放完整副本会挤压 latent、通信 buffer 和并发空间;若模型必须张量并行才能装下,GPU 就不能作为自由单元,动态组只能在固定模型分片组之上进行。DDiT 对论文模型有效,不代表超大视频模型仍能同粒度弹性。

频繁建组并非免费。去噪 step 很短时,建组和 latent broadcast 可能大于扩容节省;跨节点扩容还会改变通信路径。合理实现应在画像中同时测 promotion 成本,只有剩余 step 足够多时才扩。论文 starvation 量衡量少卡损失,但公式没有显式减去迁移成本,部署可把预计净收益作为附加准入条件。

分辨率不是唯一 workload 特征。视频帧数、去噪步数、classifier-free guidance、模型版本、精度和缓存策略都会改变单步曲线。请求信息库若只按分辨率索引,混入其他配置会误估 B;可靠系统应把所有影响执行时间的离散配置加入键,或在观测到 profile 偏差时重新标定。新分辨率第 1 次请求还需要定义降级路径,不能让用户请求无限等待画像。

集中控制器简化一致性,却可能在更大集群成为瓶颈。每个 step 都上报会产生大量消息;实际上只有 phase 改变、GPU 释放和间隔统计需要触发全局调度,普通 step 可由本地 controller 推进。多控制器扩展则要解决 GPU 所有权和 promote table 的一致性,这是论文没有展开的方向。

质量方面,DDiT 不减少去噪步骤、不量化模型、不近似 attention,所以理论上输出算法不变;但浮点 collective 顺序随 DoP 改变,非确定性 kernel 可能产生微小数值差异。需要逐像素确定性的场景应固定随机种子并测不同扩缩路径的输出一致性。论文主要评价系统延迟,没有把这种数值重现性作为核心指标。

18. 复现清单与结论边界

复现首先要分别 profile T5、SDDiT 和 VAE,固定视频帧数、分辨率、去噪步数、精度与 kernel 版本,记录 1、2、4、8 卡的单步时间和建组成本。根据曲线计算各分辨率 B,再用同一画像驱动所有需要估时的基线,避免只让 DDiT 获得准确 profile。GPU 拓扑要写入分配器,跨节点低带宽组不能与机内组混作同一 DoP。

端到端 workload 应覆盖论文的多种低、中、高分辨率比例,以及到达率 0.25、0.5、0.75、一和同时突发。每次记录请求到达、开始、每个 step、扩缩容、DiT 结束、VAE 结束时间,由此计算平均与 99 分位延迟、累计 GPU 秒、promotion 次数和通信开销。单独关闭 phase 解耦、关闭 promotion、固定 DoP,才能把各组件收益分开。

实现核对重点是:权重只加载 1 次;通信组按请求使用独立句柄;扩容只在 step 边界;新成员先取得一致 latent;DiT 结束立即释放非 VAE master;hungry 优先级按额外时间而非简单年龄;waiting 请求从 B 向下尝试而不是非要凑齐最优卡。任一条件缺失都可能把系统退化成论文批评的固定部署。

画像验证不能只看平均 step。对每个分辨率和 DoP 应预热 kernel,记录稳定区间的多次执行,分别保存 DiT 与 VAE;再检查预测时间与在线实测的误差。如果在线 step 持续偏离画像,starvation 会被系统性高估或低估:高估会让某请求过度抢卡,低估会让它长期 hungry。可以让 monitor 维护滑动平均用于优先级,但 B 仍应由受控离线实验给出,避免短期拥塞把最优配置误改。

网络拓扑测试应故意制造碎片:整机 4 卡、同机不连续 4 卡、跨两机 4 卡分别建组,确认分配器拒绝带宽不满足的组合,并量出广播 latent 的差别。若只在整齐空闲集群上跑,BandwidthAwarePartition 形同虚设,无法验证真实多租户环境中的优势。组创建与销毁还要做长时间压力测试,检查通信句柄是否泄漏以及旧异步 collective 是否在组变更后残留。

端到端统计要按请求而非按 step 加权。高分辨率请求 step 慢、数量少时,简单平均所有 step 会让它们在指标中权重过大或过小;论文用每条请求从到达到完成的延迟计算平均和尾部,再另算 GPU 占用。成本曲线应同时报告总完成时间与累计 GPU 秒,因为某策略可能减少 GPU 秒却严重拉长 makespan,或用更多 GPU 秒换低尾延迟。

结果复核可从 3 个锚点开始。低负载 0.25 时,DDiT 相对该负载最佳静态 DoP 的尾延迟降低 12.88 个百分点,说明即使排队少,DiT/VAE 早释放也有效;高负载时平均延迟最多下降 29.5 个百分点,说明共享资源和 step promotion 开始主导;8 节点突发下相对 4 种基线至少降低 30.4 个百分点尾延迟,成本只到理论最优 1.39×。若复现趋势相反,应先检查到达过程、分辨率比例与静态基线是否为各负载单独选优。

DDiT 可以与质量优化技术叠加,但需要重新画像。蒸馏减少去噪步数,会缩短中途 promotion 还能获益的区间;缓存减少单步计算,会放大建组成本的比例;量化改变显存后,系统可能容纳更多实例。原模型测得的 B 不能原样用于优化后的模型。离线画像绑定具体执行栈,需要随实现变化更新。

复现报告还应保存每种请求分辨率的独立分位数。混合流量的总体平均可能掩盖偏置:调度器若总给高分辨率补卡,整体吞吐可能提高,但低分辨率的排队尾部变差;反过来,为了快速完成大量短请求而长期不给高分辨率 promotion,也会制造饥饿。Starvation 公式试图按实际额外时间纠正这种偏置,按类别报告才能验证它是否生效。若服务有不同租户优先级或截止时间,需在 starvation 之外增加明确权重,论文的先到先服务结果不能直接代表带优先级策略。

DDiT 的完整贡献是把文生视频服务拆成具有不同并行曲线的 phase,并把去噪 step 变成可安全调整资源的时间单位。离线画像给出并行上限,在线 starvation 衡量少卡牺牲,权重与通信组解耦使调整真正可执行。它改善的是相同模型与相同去噪步数下的资源利用和延迟,不改变生成算法,也不承诺视频质量提升。

把整套方法压成 1 个判断标准:只有当运行时能在 step 边界低成本重组通信、模型权重允许资源自由加入、不同 phase 的最优并行度确实不同,而且在线负载会持续产生资源释放事件时,动态弹性才比预先固定实例有价值。若请求很少、模型必须固定跨卡分片或建组成本接近单步时间,DDiT 的控制复杂度可能得不偿失。这个条件集合比记住某个最高加速比更能决定它能否迁移到新的文生视频服务。