
Krea2: text sequence is not truncated/padded to the reference 512-token layout — long prompts correlate with probabilistic NaN latents
快速结论:该报错通常出现在使用 ComfyUI 运行 Krea2 模型进行文本到图像生成时,使用了超长提示词(导致 token 数超过 512)。优先排查 ComfyUI 中 Krea2 的文本编码器是否对提示词进行了正确的截断或填充至固定 512 token 长度。
问题场景
用户在 ComfyUI 中使用 Krea2 模型进行批量推理,特别是使用 RTX 4090 (sm89)、torch 2.6.0+cu124、xformers 0.0.29.post3 栈时。当输入提示词超过一定长度(例如超过 5000 字符,对应约 1100+ tokens),生成结果概率性地出现全 NaN 潜变量,导致输出黑图或损坏图像。
报错原文
text sequence is not truncated/padded to the reference 512-token layout — long prompts correlate with probabilistic NaN latents
此报错为用户根据观测现象总结的描述性报错。在 ComfyUI 日志中,具体现象为采样器输出全为非有限浮点数(NaN),在无内部 NaN 检测的默认情况下,最终输出为黑图或损坏图像。
原因分析
可能原因:官方 Krea2 实现(krea-ai/krea-2 及 Diffusers Pipeline)在编码文本时,明确使用 truncation=True, padding='max_length',将文本序列固定为 512 tokens。ComfyUI 的 Krea2Tokenizer 继承了 Qwen3-VL 的分词器设置,其中 max_length=99999999 且 pad_to_max_length=False,导致模型接收到的文本序列长度可变(实测可达 1096 tokens)。Krea2 的 txtfusion/attention 模块可能从未在训练时见过超过 512 token 的序列长度,因此超长序列处于分布外(out-of-distribution),可能在某些条件下导致数值不稳定,产生 NaN。
此外,该问题的出现是概率性的,与算力后端的架构相关:RTX 5090 (sm120) + SDPA 路径未见此问题。
环境排查
- 确认 ComfyUI 版本及加载的 Krea2 节点(Issue 基于 #14589 后的版本)
- 确认 Python 版本
- 确认 PyTorch 版本(问题环境为 torch 2.6.0+cu124)
- 确认 CUDA 版本
- 确认显卡架构(如 sm89 vs sm120)
- 确认注意力后端:xformers 0.0.29.post3 vs SDPA
- 检查 Krea2 使用的文本编码器:是否使用了
qwen3vl_4b_fp8_scaled且计算精度为 bf16 - 确认输入提示词长度(字符数),特别是是否显著长于约 4000-5000 字符
解决步骤
- 文本编码器对齐官方实现(根据 Issue 分析,可优先尝试):修改 ComfyUI 中
comfy/text_encoders/krea2.py的Krea2Tokenizer,在 tokenize 时固定序列长度为 512,并对超长序列进行截断,对短序列进行填充。 - 排查注意力后端:如第一步无法解决,可尝试切换到 SDPA 后端(不使用 xformers),因为 Issue 报告 RTX 5090 + SDPA 路径未复现此问题。
- 排除因自定义 embedding 导致的分词器崩溃:参考相关 PR #14713,确认环境中是否存在自定义 embedding 导致的分词器异常。
- 检查是否存在重复 Issue:Issue 评论中标记了 #14782 为可能重复的 Issue,可以进行交叉参考。
验证方法
使用原本触发 NaN 的超长提示词(建议 4000-5000 字符以上),在修改文本编码器后,多次重复运行(10 次以上),确认不再出现全 NaN 潜变量或黑图输出。同时可对比修改前后文本编码器实际传给模型的 token 数量,确认每次都为固定的 512 tokens。



