Prhub

#21664 [diffusion] Fix Flux.2

原始 PR 作者 yhyang201 合并时间 2026-03-31 14:14 文件变更 1 提交数 1 评论 2 代码增减 +24 / -1

执行摘要

修复 Flux.2 在 TP>1 时权重加载错误导致空白图像的问题。

Bug 引入于 commit 281fe10b5(来自 PR #20137),该提交将 Flux2ParallelSelfAttention 中的 to_out 层改为 RowParallelLinear(input_is_parallel=True),同时将 to_qkv_mlp_proj 改为 MergedColumnParallelLinear(gather_output=False)。这导致输入为 [attn_shard | mlp_shard] 的非连续布局,而 RowParallelLinear 默认 weight_loader 假设连续布局,造成权重与特征不匹配,在 TP>1 时产生空白图像。

该 PR 值得精读,特别是 _patch_to_out_weight_loader 方法的设计,展示了如何适配并行线性层的非标准输入布局。工程师可以学习权重加载器的自定义技巧和 Tensor Parallelism 下的错误排查思路。

讨论亮点

Review 中没有评论,表明 PR 可能通过其他渠道审核或直接合并,无争议或设计权衡讨论。

实现拆解

修改文件 flux_2.py 中的 Flux2ParallelSelfAttention 类:

  1. init 方法中添加条件检查 tp_size > 1 时调用 _patch_to_out_weight_loader;
  2. 新增 _patch_to_out_weight_loader 方法,定义自定义权重加载器,从完整权重中选取对应 attention 和 MLP 的列并拼接,确保与非连续输入匹配;
  3. 更新注释以说明输入布局。
文件 模块 状态 重要度
python/sglang/multimodal_gen/runtime/models/dits/flux_2.py multimodal_gen/diffusion modified 7.0

关键符号

__init__ _patch_to_out_weight_loader

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

无 Review 讨论 other

Review 评论为空,无技术讨论或争议记录。

结论:PR 被合并,表明通过审核或直接接受。 · 已解决

风险与影响

风险包括:自定义 weight_loader 逻辑错误可能导致模型输出不正确(如权重选择或拼接错误);仅当 TP>1 时生效,可能遗漏其他并行配置或边缘情况;修改核心扩散模型文件可能引入回归,影响其他依赖该模块的功能。但修复针对特定 bug,影响范围有限,且通过条件检查降低了单 GPU 场景的风险。

对用户:修复了扩散模型在 TP>1 下产生空白图像的问题,提升了推理正确性和用户体验。对系统:确保并行线性层权重加载与输入布局一致,维护了模型推理的稳定性。对团队:提供了处理非连续输入权重加载的示例,增强了代码库中并行处理的一致性。

核心路径变更 权重加载逻辑复杂 TP 依赖

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论