执行摘要
自动选择 VAE 的 channels_last_3d 布局并添加环境变量控制
PR #25985 修复了 Wan VAE 在 Conv3d weights 使用 channels_last_3d 时的正确性问题。此后续 PR 旨在将默认行为保持为 CUDA/ROCm 开启,同时为其他平台提供安全 fallback,并保留显式环境变量用于试验和回滚。
值得精读,特别适合学习如何设计平台感知的默认策略和相应的质量保障测试。
本 PR 无有效 review 讨论,创作者自行合并。
PR #25985 修复了 Wan VAE 在 Conv3d weights 使用 channels_last_3d 时的正确性问题。此后续 PR 旨在将默认行为保持为 CUDA/ROCm 开启,同时为其他平台提供安全 fallback,并保留显式环境变量用于试验和回滚。
值得精读,特别适合学习如何设计平台感知的默认策略和相应的质量保障测试。
本 PR 无有效 review 讨论,创作者自行合并。
wan_common_utils.py 中添加 _channels_last_3d_supported_by_platform(),仅当 CUDA/ROCm 且 torch 支持 channels_last_3d 时返回 True。vae_loader.py 中添加 _should_use_channels_last_3d(),根据环境变量和平台决定是否启用;同时修改 load_customized 方法中的两处条件,替换原来直接检查 torch.cuda.is_available() 和 envs.SGLANG_DIFFUSION_VAE_CHANNELS_LAST_3D 的代码。component_accuracy.py 中添加 Conv3dLayoutStats 数据类和 _record_conv3d_layouts 上下文管理器,用于监控 Conv3d 调用的布局;添加 run_vae_channels_last_3d_parity 静态方法,分别以禁用和启用 channels_last_3d 加载 VAE,比较输出是否匹配。test_component_accuracy_1_gpu.py 和 test_component_accuracy_2_gpu.py 中添加对应的参数化测试类,指定特定 case(wan2_1_t2v_1.3b 和 wan2_2_i2v_a14b_2gpu)运行 parity 检查。test_vae_loader.py 中添加两个测试,验证 match_conv3d_input_format 在非 CUDA 平台跳过转换,在 CUDA 上执行转换。| 文件 | 模块 | 状态 | 重要度 |
|---|---|---|---|
python/sglang/multimodal_gen/test/server/component_accuracy.py |
准确性测试 | modified | 7.65 |
python/sglang/multimodal_gen/runtime/loader/component_loaders/vae_loader.py |
VAE 加载 | modified | 6.95 |
python/sglang/multimodal_gen/test/unit/test_vae_loader.py |
单元测试 | modified | 6.27 |
python/sglang/multimodal_gen/runtime/models/vaes/parallel/wan_common_utils.py |
Wan 工具 | modified | 6.16 |
python/sglang/multimodal_gen/test/server/test_component_accuracy_1_gpu.py |
1GPU 测试 | modified | 5.87 |
python/sglang/multimodal_gen/test/server/test_component_accuracy_2_gpu.py |
2GPU 测试 | modified | 5.87 |
python/sglang/multimodal_gen/test/server/accuracy_hooks.py |
准确性钩子 | modified | 5.39 |
python/sglang/multimodal_gen/test/server/accuracy_utils.py |
准确性工具 | modified | 4.27 |
分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。
当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。
主要风险是非 CUDA/ROCm 平台如果环境变量设置不当可能仍会尝试使用 channels_last_3d,但代码已通过平台检测 gate,风险较低。Parity 测试可能因浮点误差而失败,但设置了阈值 0.999,且有临时环境变量隔离。
用户:默认行为不变,但其他平台(NPU、CPU 等)自动关闭 channels_last_3d,避免之前的损坏问题。开发者:可以通过环境变量 SGLANG_DIFFUSION_VAE_CHANNELS_LAST_3D 灵活控制。测试团队:新增的 parity 测试可在 CI 中防止回归。
当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。
参与讨论