Prhub

#21407 [FIX] Flux2-Klein prompt tokenization length to 512 and add regression coverage

sgl-project/sglang · 作者 adityavaid · 合并时间 2026-03-28 17:28

分析状态 已生成
文件变更 1提交数 5 · 评论 14
代码增减 +14 / -1
bugfix diffusion test

执行摘要

修复 Flux2-Klein 模型提示词标记化长度从 77 改为 512,并添加回归测试。

Issue #21372 报告了 Flux2-Klein 模型使用错误的 max_length=77 进行提示词标记化,而 Hugging Face 参考实现使用 512。这导致长提示被截断,影响生成质量。根因是 Flux2-Klein 继承了 Flux1 的 text_encoder_extra_args 配置。

推荐精读以了解如何修复配置继承导致的 bug。关注 tokenize_prompt 方法中硬编码 max_length 的决策,以及如何通过添加 text_encoder_extra_args 字段避免类似问题,对扩散模型开发有参考价值。

讨论亮点

gemini-code-assist[bot] 指出测试文件名拼写错误 'klien' 应为 'klein',作者 adityavaid 迅速修正。mickqian 建议移除 'tok_kwargs.pop("max_length", None)' 行,但 adityavaid 解释该操作是必要的,以防止向 tokenizer 传递多个 max_length 值导致错误。

实现拆解

在文件 python/sglang/multimodal_gen/configs/pipeline_configs/flux.py 中,为 Flux2PipelineConfig 类新增 text_encoder_extra_args 字段,设置 max_length=512 等参数。同时,在 Flux2KleinPipelineConfig 的 tokenize_prompt 方法中,移除 tok_kwargs 中的 max_length,并硬编码为 512,确保使用正确长度。

文件 模块 状态 重要度
python/sglang/multimodal_gen/configs/pipeline_configs/flux.py diffusion pipelines modified 7.0

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

关键符号

Flux2PipelineConfig.text_encoder_extra_args Flux2KleinPipelineConfig.tokenize_prompt

评论区精华

测试文件名拼写错误 style

gemini-code-assist[bot] 指出文件名 'klien' 拼写错误,应为 'klein'。

结论:作者 adityavaid 承认并修复了文件名。 · 已解决

移除 max_length 参数处理 正确性

mickqian 建议移除 'tok_kwargs.pop("max_length", None)' 行,但 adityavaid 解释需要移除以避免向 tokenizer 传递多个 max_length 值错误。

结论:保留代码行移除,确保 tokenizer 调用正确。 · 已解决

风险与影响

风险较低,因为变更仅针对特定模型的 bug 修复,主要风险是改变 max_length 可能影响 Flux2-Klein 模型的标记化行为,但这是预期的修复。添加回归测试减少了回归风险,无安全或性能问题。

对使用 Flux2-Klein 模型的用户,修复了长提示截断问题,提高生成质量。系统层面,更新了扩散模型管道的配置逻辑,影响范围限于 Flux2-Klein 相关部分。团队通过添加测试覆盖增强了代码健壮性。

配置调整影响标记化

关联 Issue

#21372 [Bug] Flux2 Klein uses incorrect max_length=77 instead of 512 for prompt tokenization

完整报告

执行摘要
本次 PR 修复了 Flux2-Klein 扩散模型中提示词标记化长度错误的问题,将 max_length 从 77 改为 512,防止长提示被截断,并添加回归测试确保未来不会回归。

功能与动机
Issue #21372 报告了 Flux2-Klein 模型使用错误的 max_length=77 进行提示词标记化,而非 Hugging Face 参考实现中的 512。这导致长文本输入被不当截断,降低生成质量。根因是 Flux2-Klein 继承了 Flux1 的 text_encoder_extra_args 配置。

实现拆解
变更集中在文件 python/sglang/multimodal_gen/configs/pipeline_configs/flux.py

  • Flux2PipelineConfig 类中新增 text_encoder_extra_args 字段,设置 max_length=512 等参数。
  • Flux2KleinPipelineConfigtokenize_prompt 方法中,移除 tok_kwargs 中的 max_length,并硬编码为 512,确保使用正确长度。

评论区精华

  • 测试文件名拼写错误:gemini-code-assist[bot] 指出新测试文件名 "klien" 拼写错误,应为 "klein",作者 adityavaid 迅速修正。
  • 代码行必要性讨论:mickqian 建议移除 tok_kwargs.pop("max_length", None) 行,但 adityavaid 解释该操作是必要的,以防止向 tokenizer 传递多个 max_length 值导致错误。

风险与影响
风险较低:变更仅影响 Flux2-Klein 模型的标记化逻辑,修复了已知 bug。添加的回归测试减少了未来回归风险。影响范围限于使用该模型的用户,提升长提示处理准确性。

关联脉络
本 PR 与 Issue #21372 直接相关,解决了扩散模型配置继承问题。历史 PR 如 #20633 和 #20706 也涉及扩散模型管道配置的优化,显示团队在持续改进该模块的健壮性和一致性。

参与讨论