Prhub

#27065 [diffusion] bug: remove boolean arithmetic guard to fix compiling

原始 PR 作者 avjves 合并时间 2026-06-10 13:55 文件变更 1 提交数 2 评论 2 代码增减 +3 / -9

执行摘要

修复 FLUX.2 compile 模式的布尔运算兼容性 bug

FLUX.2 模型启用 compile 后,USPAttention.forward 中校验 num_replicated_prefix / suffix / kv_prefix 的布尔加法导致 AttributeError: 'BooleanFalse' object has no attribute 'as_coeff_Mul',需要修改为 compile 兼容的写法以恢复编译模式。

值得合并:小改动无风险,但修复了重要模型的 compile 兼容问题,建议参与审核的工程师确认语义等价后合并。

讨论亮点

无 Review 评论,仅 Maintainer mickqian 直接批准。

实现拆解

修改 python/sglang/multimodal_gen/runtime/layers/attention/layer.py 中 USPAttention 的 forward 方法,将内部的 replicated-token 模式互斥校验从 sum(bool(n) for n in ...) > 1 改为三组显式的 and 条件组合,移除 boolsum 调用,确保与 torch.compile 的符号追踪兼容。

文件 模块 状态 重要度
python/sglang/multimodal_gen/runtime/layers/attention/layer.py 注意力层 modified 6.21

关键源码片段

python/sglang/multimodal_gen/runtime/layers/attention/layer.py core-logic

核心文件:USPAttention 的 replicated-token 互斥校验由布尔算术改为显式比较,以兼容 torch.compile。

# 原始代码:使用 sum(bool(n) ...) > 1 来检查至少两个 replicated-token 模式被同时启用
# 这在 torch.compile 的符号追踪下会触发 BooleanFalse.as_coeff_Mul 错误
# 
# 修改后:显式列举三个两两组合的条件,用 or 连接,避免布尔值算术运算
sp_size = get_ulysses_parallel_world_size()# 确保最多只有一个 replicated-token 模式是激活的 -> 正确性校验
if (
    (num_replicated_prefix > 0 and num_replicated_suffix > 0)
    or (num_replicated_prefix > 0 and num_replicated_kv_prefix > 0)
    or (num_replicated_suffix > 0 and num_replicated_kv_prefix > 0)
):
    raise ValueError(
        "USPAttention supports at most one replicated-token mode per call."
    )

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

变更极小(+3/-9),仅修改校验表达式,语义不变,逻辑等价。回归风险极低。

用户:修复 FLUX.2 在 compile 模式下崩溃的问题,提升用户体验。系统:无其他影响。兼容性:参数和接口均未改变,向后兼容。

核心路径变更 低风险

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论