KJNodes/experimentalgenerated

Ideogram4 优化 KJ(Ideogram4OptimizationsKJ)

实验性功能,可能会改变模型输出!!减少 Ideogram4 前向传播的峰值显存。chunk_ffn 沿 token 维度拆分 SwiGLU 激活;bf16_rope 以模型数据类型应用 RoPE,而非向上转换为 fp32。两者均针对块中最大的两个临时张量。

Ideogram4 Optimizations KJ

model
model
chunk_ffn
ffn_chunks
2
ffn_seq_threshold
1024
bf16_rope
KJNodes

此节点对 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)以模型的工作数据类型(通常为 bfloat16float16)应用,而非向上转换为 float32。这大致可将 RoPE 激活内存减半,并与 Hugging Face 参考实现中使用的精度匹配。输出质量可能与默认的 fp32 RoPE 路径略有不同。

输出

  • MODEL – 已打补丁并包含所选优化的同一模型。它旨在作为 ComfyUI 工作流中原始未补丁模型的直接替代品。

使用说明

  • 两项优化均为实验性。在部署到生产工作流之前,请始终测试输出质量并与未补丁模型进行比较。
  • chunk_ffnbf16_rope 优化相互独立;仅启用需要的项。为获得最大内存节省,请同时启用两者。
  • 使用 chunk_ffn 时,从默认的 ffn_chunks = 2 开始,仅在显存溢出持续存在时才增加,因为更多块会引入更大开销。
  • ffn_seq_threshold 在您的工作流同时处理非常短和非常长的序列(例如图像条件 vs 完整图像生成)时最为有用。调整它以避免在短提示词上产生开销。
  • 这些优化专门为 Ideogram4 设计;它们对其他模型架构无效,并且如果应用可能会引发错误。请确保输入模型为 Ideogram4 变体。

评论

使用 GitHub 登录后即可参与讨论。

评论加载中…
Ideogram4 优化 KJ (Ideogram4OptimizationsKJ) - ComfyUI-KJNodes | ComfyUI Wiki