Prhub

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

原始 PR 作者 adityavaid 合并时间 2026-03-28 17:28 文件变更 1 提交数 5 评论 14 代码增减 +14 / -1

执行摘要

修复 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

关键符号

Flux2PipelineConfig.text_encoder_extra_args Flux2KleinPipelineConfig.tokenize_prompt

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

评论区精华

测试文件名拼写错误 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

完整报告

参与讨论