继两月进展更新后,我们兴奋地分享SGLang-Diffusion作为生产级视频生成框架的深度优化。这些改进强调可扩展性、效率和稳定性,是大规模部署扩散模型的关键。
概述
随着视频生成模型复杂度不断提升,我们识别并解决了整个推理管道的关键瓶颈:
- 智能并行:Token级序列分片和并行折叠,实现最优资源利用
- 分布式VAE:并行编码/解码,消除高分辨率视频内存瓶颈
- 生产级服务:修复Fixed Cache-DiT集成bug,确保稳定多请求服务
- 优化I/O:加速视频保存,消除不必要序列化
- 融合内核:自定义JIT内核针对LayerNorm变体,减少GPU空泡
下面深入技术细节。
关键改进
1. SP-Sharding改进:从帧级到Token级
Video DiT模型输入张量形状通常为B, T, H, W, C,常见配置num_frames=81时为1, 21, 90, 160, 3。
在8×H100配置下,使用Ulysses Sequence Parallel (N=8),框架需在非注意力操作中沿序列维度分片,然后all-to-all通信切换到注意力头的维度分片。
以往方法:帧级分片
初始实现直接沿T(时间)维度分片。但21帧无法被8 GPU均匀划分,导致两种次优方案:
- 调整帧数:预处理时修改
num_frames使其可被N整除 - Token填充:将时间维度填充到N的倍数(21 → 24)
帧级填充引入巨大开销:每个填充Token需额外计算H × W × C。
新方法:Token级分片
为最小化填充开销,现将T × H × W展平为单一序列维度后再分片。主要益处:
- 减少或零填充:常见分辨率和VAE配置下,
H × W常可被8整除,完全消除填充 - 更低通信量:需填充时,开销远低于帧级
比较:形状与通信量分析
| 方案 | 填充开销 | 每Rank输入形状 | All-to-All通信量 |
|---|---|---|---|
| 帧分片 | 3帧 (14.3%) | 3, 90, 160, C (24/8) | 1.0 × feature_map |
| Token分片 | 0帧 | 2.625, 90, 160, C (21/8) | 0.875 × feature_map |
此优化带来更快通信和更小内存占用,尤其适用于视频模型。详见相关PR。
2. Parallel Folding:解耦文本编码器与DiT并行
原实现中,Text Encoder与DiT共享相同Tensor Parallel (TP)组。当DiT仅用Sequence Parallel (SP)时,Text Encoder以TP=1运行,每GPU持完整模型副本,浪费内存与计算。
鉴于两者计算完全解耦,我们引入Parallel Folding:Text Encoder使用DiT的SP组作为其TP组。
实际效果:
- 文本编码器:跨SP组应用TP,最大化速度并减少内存
- 去噪器:应用SP优化序列处理吞吐与内存
确保两者互不干扰,使用最优并行策略,提升整体效率。详见相关PR。
3. Parallel VAE:分布式编码/解码
VAE编码/解码涉及密集3D卷积。高分辨率视频下,单GPU实现缓慢且易OOM。
常见缓解方法:
- 分块:顺序处理特征图块,降低峰值内存但增加延迟
- 并行:跨GPU并发处理块,降低内存与延迟
我们为Wan-VAE实现Parallel VAE:
- 高度分片:沿高度维度跨Rank分片特征图
- Conv操作:使用
halo_exchange(P2P)共享边界像素,确保数学等价 - 注意力操作:必要时
all_gather获取全局上下文 - 结果聚合:编码/解码末尾
all_gather重建全高度
消除VAE瓶颈,支持更高分辨率与更长序列无OOM。
本文由 赢政天下 独家编译 - 转载请注明来源。
4. Cache-DiT服务:修复多请求稳定性
Cache-DiT通过缓存残差跳过冗余计算加速推理,但依赖正确num_inference_steps配置SCM。
问题:Wan2.2双Transformer架构,transformer与transformer_2分别执行num_high_noise_steps与num_low_noise_steps。初始实现两bug:
- 两者均错用总
num_inference_steps配置缓存上下文 - 服务模式下,缓存跨请求持久,不同
num_inference_steps导致形状不匹配崩溃服务器
解决方案:
- 分别用
num_high_noise_steps与num_low_noise_steps配置独立上下文 - 每新请求重算时间步分割,利用Cache-DiT API刷新上下文,完全隔离
确保稳定生产级Cache-DiT加速服务。
5. 优化视频保存:消除序列化开销
服务架构中,scheduler_client与gpu_worker经ZMQ通信。
以往:gpu_worker推理后序列化张量、ZMQ发送、scheduler_client反序列化并保存,引入序列化/反序列化与内存拷贝开销。
新方案:gpu_worker直接处理输出张量保存视频,仅返回文件路径给scheduler_client。
消除序列化开销,避免重复拷贝。
6. WanVideo LayerNorm融合:CuTeDSL JIT内核
WanVideo引入两种LayerNorm模式:
- LayerNormScaleShift:
y = LN(x) * (1 + scale) + shift - ScaleResidualLayerNormScaleShift:
residual_out = residual + gate * x;y = LN(residual_out) * (1 + scale) + shift
单独内核实现导致多启动与中间内存流量,产生GPU空泡。
解决方案:使用CuTeDSL实现融合JIT内核(位于sglang/jit_kernel/diffusion/cutedsl),单内核融合操作。
益处:
- 减少内核启动开销
- 降低内存流量
- 提升GPU利用率与吞吐
微优化在多层WanVideo中累积显著。
性能结果
SGLang-Diffusion与LightX2V在Wan2.2 T2V不同设置下的比较。
未来展望
我们持续推动扩散模型服务边界。详见SGLang-Diffusion 2026Q1路线图。
敬请期待更多生产部署优化更新。
致谢
- 感谢贡献者:Skywork.ai、Song Rui、SGLang-Diffusion团队
- 特别感谢计算合作伙伴的支持
试用SGLang-Diffusion驱动的扩散生成:APIFree
了解更多
- Slack频道:#diffusion(加入:slack.sglang.io)
- SGLang-Diffusion Cookbook
- SGLang-Diffusion文档
- 前次更新:两月进展
© 2026 Winzheng.com 赢政天下 | 本文由赢政天下编译整理,转载请注明来源。原文版权归原作者所有。