此节点对 Ideogram4 模型的前向传播应用两项实验性的显存优化。它属于“KJNodes/实验性”类别,可能会改变模型输出——仅在峰值显存成为限制因素且验证输出质量后使用。
描述
Ideogram4 优化 KJ 节点通过针对每个 Transformer 块中最大的两个临时张量(SwiGLU 激活和 RoPE 计算)来补丁 Ideogram4 模型,从而降低推理期间的峰值 GPU 内存。两个优化均由离散的布尔和整数输入控制,允许在内存节省与计算开销之间进行精细调整。
输入
-
model(MODEL,必填)– 将应用优化的 Ideogram4 基础模型。
-
chunk_ffn(BOOLEAN,默认
True)– 启用后,前馈(SwiGLU)激活会沿 token 序列维度拆分,将中间张量大小限制为(B, chunk_size, hidden)而不是(B, L, hidden)。这会以轻微计算开销为代价降低峰值内存。 -
ffn_chunks(INT,默认
2,范围 1–64,步长 1)– 将前馈拆分的序列块数。值越高,峰值内存越低,但开销越大(更多内核启动)。值为1时相当于禁用分块。从2开始,如果显存仍然不足则增加。 -
ffn_seq_threshold(INT,默认
1024,范围 256–65536,步长 256)– 仅当输入 token 序列长度超过此值时应用分块。对于短序列(例如低于 1024 token),基线内存已经足够小,分块会带来不必要的开销。根据您的典型生成长度设置此阈值。 -
bf16_rope(BOOLEAN,默认
True)– 启用后,旋转位置嵌入(RoPE)以模型的工作数据类型(通常为bfloat16或float16)应用,而非向上转换为float32。这大致可将 RoPE 激活内存减半,并与 Hugging Face 参考实现中使用的精度匹配。输出质量可能与默认的fp32RoPE 路径略有不同。
输出
- MODEL – 已打补丁并包含所选优化的同一模型。它旨在作为 ComfyUI 工作流中原始未补丁模型的直接替代品。
使用说明
- 两项优化均为实验性。在部署到生产工作流之前,请始终测试输出质量并与未补丁模型进行比较。
chunk_ffn和bf16_rope优化相互独立;仅启用需要的项。为获得最大内存节省,请同时启用两者。- 使用
chunk_ffn时,从默认的ffn_chunks = 2开始,仅在显存溢出持续存在时才增加,因为更多块会引入更大开销。 ffn_seq_threshold在您的工作流同时处理非常短和非常长的序列(例如图像条件 vs 完整图像生成)时最为有用。调整它以避免在短提示词上产生开销。- 这些优化专门为 Ideogram4 设计;它们对其他模型架构无效,并且如果应用可能会引发错误。请确保输入模型为 Ideogram4 变体。
评论
使用 GitHub 登录后即可参与讨论。