跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • 浅色
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • 深色
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
品牌标识

抡锤者

  1. 主页
  2. AI音视频画图
  3. 【A卡/ROCm】7900 XTX 跑 ComfyUI 启用 SageAttention 出黑图 (NaN) 修复指南

【A卡/ROCm】7900 XTX 跑 ComfyUI 启用 SageAttention 出黑图 (NaN) 修复指南

已定时 已固定 已锁定 已移动 AI音视频画图
9 帖子 5 发布者 267 浏览 1 关注中
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • A 离线
    A 离线
    abaalei
    技术大牛 劳动模范
    编写于 最后由 编辑
    #1

    【A卡/ROCm】7900 XTX 跑 ComfyUI 启用 SageAttention 出黑图 (NaN) 修复指南

    本篇指南记录了在 AMD Radeon RX 7900 XTX (RDNA3 / gfx1100) 显卡、Ubuntu/Linux (ROCm 7.x + PyTorch 2.x) 环境下,运行 ComfyUI 启用 SageAttention (v1.0.6) 导致生成图片“全黑(无报错静默失败)”的硬核排障过程与解决方案。

    如果你也遇到了开加速器必黑图、关掉就正常的灵异事件,本篇笔记能帮你彻底解决。


    💻 我们的软硬件测试环境

    为便于对比排查,以下是本案所处的真实软硬件基础环境:

    • GPU: AMD Radeon RX 7900 XTX (24GB GDDR6 / RDNA3 / gfx1100)
    • CPU: 双路 Intel Xeon E5-2682 v4
    • 内存: 64GB DDR4 REG ECC (全插满)
    • 操作系统: Ubuntu (Kernel 5.15.0-181-generic)
    • ROCm 运行环境: torch 2.12.0+rocm7.2
    • SageAttention 库版本: 1.0.6(纯 Triton JIT 动态编译版)
    • ComfyUI 版本: v0.24.0 (机智罗 A 卡专用整合版)

    📺 背景与受影响工作流

    在运行以下针对 AMD 优化的 ComfyUI 整合包(如机智罗 A 卡专用包)工作流时极易触发此问题:

    • 机智罗 44号工作流(基于 Qwen-Image / Flux 架构的 GGUF 混合多模态工作流)
    • 机智罗 14号工作流(Wan2.2 视频生成工作流,大分辨率开启 SageAttention 加速时)

    🚨 故障现象

    • 表现:当且仅当在工作流中接入 XB_SageAttentionAccelerator(SageAttention 算子加速器) 节点时,最终输出的图片(或视频帧)100% 是一片漆黑。
    • 控制台警告:生图结束、准备输出图像的瞬间,终端会静默弹出一行 RuntimeWarning,没有其他任何 CUDA/ROCm 崩溃堆栈:
      /home/peter/ComfyUI/nodes.py:1657: RuntimeWarning: invalid value encountered in cast
        img = Image.fromarray(np.clip(i, 0, 255).astype(np.uint8))
      

    🔍 硬核根因分析

    通过拉取并审计 SageAttention (v1.0.6) 在 Linux AMD 环境下的底层源码,揪出了以下两个核心冲突:

    1. 累加精度不足导致数值溢出(NaN)

    目前 pip 直接安装的 SageAttention 1.0.6 是纯 Triton JIT 编译版本(无预编译 .so),它在 GPU 运行时动态编译 attention kernel。
    在其 attn_qk_int8_per_block.py 源码中,矩阵乘法累加计算硬编码为:

    acc += tl.dot(p, v, out_dtype=tl.float16)  # 默认使用半精度累加
    

    在 AMD RDNA3 (7900 XTX) 的 Triton 编译器后端上,半精度累加在长序列或特定激活值下极易发生数值精度溢出,产生大量 NaN(非数)。
    NaN 顺着 KSampler 扩散到整个 latent,最终 VAE 解码时把 NaN 全部强制截断为 0,导致最终渲染出来的图片全黑。

    2. Shared Memory 硬件超限

    原版 SageAttention 的 block 大小硬编码为 BLOCK_M=128, BLOCK_N=64,这在编译时需要约 106KB 的 Shared Memory(共享内存)。
    而 AMD RDNA3 显卡(7900 XTX)的物理 Shared Memory 单个 Workgroup 上限只有 65KB,这会导致 Triton 编译器在分配寄存器和共享内存时崩溃,或发生隐式内存回滚,进一步拉低速度并加剧精度混乱。


    🛠️ 终极解决方案(手动打补丁)

    既然知道了是因为 “Shared Memory 超限” 和 “Triton 浮点累加溢出”,解决办法就是给 SageAttention 的 python 库手动替换补丁文件。

    第一步:定位 SageAttention 库路径

    在你的 ComfyUI 运行虚拟环境(venv)下,找到 sageattention 包的实际安装路径:

    source /home/peter/ComfyUI/venv/bin/activate
    SA_DIR=$(python3 -c 'import sageattention, os; print(os.path.dirname(sageattention.__file__))')
    echo "你的包路径在: $SA_DIR"
    

    第二步:备份原始文件(安全第一)

    cp $SA_DIR/attn_qk_int8_per_block.py $SA_DIR/attn_qk_int8_per_block.py.bak
    cp $SA_DIR/attn_qk_int8_per_block_causal.py $SA_DIR/attn_qk_int8_per_block_causal.py.bak
    cp $SA_DIR/quant_per_block.py $SA_DIR/quant_per_block.py.bak
    

    第三步:下载并覆盖 Zluda-AMD 优化版补丁

    使用社区(来自 patientx/ComfyUI-Zluda)针对 AMD 显卡优化过的 Triton 参数补丁,直接覆盖本地文件:

    BASE_URL='https://raw.githubusercontent.com/patientx/ComfyUI-Zluda/refs/heads/master/comfy/customzluda/sa'
    
    curl -fsSL $BASE_URL/attn_qk_int8_per_block.py -o $SA_DIR/attn_qk_int8_per_block.py
    curl -fsSL $BASE_URL/attn_qk_int8_per_block_causal.py -o $SA_DIR/attn_qk_int8_per_block_causal.py
    curl -fsSL $BASE_URL/quant_per_block.py -o $SA_DIR/quant_per_block.py
    

    第四步:清空 Triton 缓存(核心步骤)

    为了让刚刚覆盖的补丁生效,必须清空 Triton 之前的旧编译缓存,强迫它在下次启动时重新编译 kernel:

    rm -rf ~/.triton/cache
    

    💡 补丁到底改了什么?

    1. out_dtype: tl.float16 ➔ tl.float32:累加矩阵全部改用 Float32 全精度。这一步彻底消灭了 A 卡上的精度溢出,是解决黑图(NaN)的核心!
    2. BLOCK_M=128, BLOCK_N=64 ➔ BLOCK_M=32, BLOCK_N=16:将 Block 大小缩到极小。这使得单个 Workgroup 占用的 Shared Memory 从 106KB 暴降到 ~8KB,完美躲开 gfx1100 显卡的 65KB 硬件上限。
    3. 引入 Autotune(自动寻优):新增了对 qo_len、kv_len、h_qo 的 Triton 动态 autotune 查找,网卡会根据你的生成分辨率自动寻找效率最高的线程分配方案,不再死板硬编码。

    🧪 验证与收尾

    1. 导入冒烟测试:
      在命令行运行以下测试代码,确认没有 NaN 且有数据输出:

      python3 -c "
      import torch, sageattention
      from sageattention import sageattn
      q = torch.randn(1, 16, 256, 128, dtype=torch.float16, device='cuda')
      k = torch.randn(1, 16, 256, 128, dtype=torch.float16, device='cuda')
      v = torch.randn(1, 16, 256, 128, dtype=torch.float16, device='cuda')
      out = sageattn(q, k, v, tensor_layout='HND')
      print('是否有NaN:', torch.isnan(out).any().item())
      print('是否全为零:', (out == 0).all().item())
      "
      # 输出:是否有NaN: False,是否全为零: False  ➔  ✅ 算法通路畅通!
      
    2. 重新运行 ComfyUI:
      重启你的 ComfyUI 进程,在网页上接回并点亮 XB_SageAttentionAccelerator 节点,重新点击“Queue Prompt”。

      生图不仅完全恢复了色彩,而且由于 Triton 自动寻优,7900 XTX 终于能满血享受 SageAttention 带来的显存带宽减半与推理无痛加速了!🚀
      6d20ca31-3b0a-4d02-8470-5e946adcae8a-image.jpeg
      一开始agent建议我直接bypass掉
      8e141ecd-792b-43d5-aea6-dc475614d912-image.jpeg
      828333ab-690c-4bcb-87b7-baae77858953-image.jpeg
      终于判断出来问题所在
      8016daed-366f-4103-8078-718e6f6fa15a-image.jpeg
      解决方案出来了
      f0fc47cf-058f-47c6-8935-6112dfe78d0e-image.jpeg
      测试成功
      b5725ae2-1b40-4b6b-90a0-2c0e5e90094c-image.jpeg

    1 条回复 最后回复
    4
    • ye9okY 离线
      ye9okY 离线
      ye9ok
      编写于 最后由 编辑
      #2

      程序员就是专业!一般淫不可能找到

      A 1 条回复 最后回复
      0
      • ye9okY ye9ok

        程序员就是专业!一般淫不可能找到

        A 离线
        A 离线
        abaalei
        技术大牛 劳动模范
        编写于 最后由 编辑
        #3

        @ye9ok 😬 谢谢支持,然而我只是工程狗,只是一个从小学开始就喜欢折腾电脑的大叔而已拉

        1 条回复 最后回复
        0
        • J 离线
          J 离线
          joe1900
          编写于 最后由 编辑
          #4

          听过AMD就是坑,填坑就靠大叔这样的人了

          A 1 条回复 最后回复
          0
          • ,terryT terry 固定了此主题
          • terryT 离线
            terryT 离线
            terry
            超级版主
            编写于 最后由 编辑
            #5

            很实用,也很牛逼

            油管:https://www.youtube.com/@抡锤者

            A 1 条回复 最后回复
            0
            • J joe1900

              听过AMD就是坑,填坑就靠大叔这样的人了

              A 离线
              A 离线
              abaalei
              技术大牛 劳动模范
              编写于 最后由 编辑
              #6

              @joe1900 谢谢 我都是白嫖gemini的token来解决的而已,我自己是一窍不通😧 😧

              1 条回复 最后回复
              0
              • terryT terry

                很实用,也很牛逼

                A 离线
                A 离线
                abaalei
                技术大牛 劳动模范
                编写于 最后由 编辑
                #7

                @terry 😊 谢谢站长~
                970640e3-22e4-4006-9671-f300dfe402e2-image.jpeg
                e367e19d-7668-4e46-a1ac-1100d1f80e47-image.jpeg
                今天加了第二张7900xtx,正在瞎折腾中 🤒
                这个电暖器可太好玩了
                就是两张卡背靠背太热了,还是得上延长线
                5b9a4411-6f9c-4f4d-a2ad-d7a2e4b5509a-image.jpeg
                4fc683bd-388d-430e-aaf0-935395953122-image.jpeg

                1 条回复 最后回复
                1
                • 5 在线
                  5 在线
                  566656661
                  超凡大师
                  编写于 最后由 编辑
                  #8

                  這溫度快燒烤了 😂 多加幾把風扇吧

                  A 1 条回复 最后回复
                  0
                  • 5 566656661

                    這溫度快燒烤了 😂 多加幾把風扇吧

                    A 离线
                    A 离线
                    abaalei
                    技术大牛 劳动模范
                    编写于 最后由 编辑
                    #9

                    @566656661 哈哈 现在是背靠背的锅,买了个8卡矿架还有延长线还没收到货,不背靠背就不用互相加热了

                    1 条回复 最后回复
                    1
                    • ,系统 取消固定了此主题

                    你好!看起来您对这段对话很感兴趣,但您还没有一个账号。

                    厌倦了每次访问都刷到同样的帖子?您注册账号后,您每次返回时都能精准定位到您上次浏览的位置,并可选择接收新回复通知(通过邮件或推送通知)。您还能收藏书签、为帖子顶,向社区成员表达您的欣赏。

                    有了你的建议,这篇帖子会更精彩哦 💗

                    注册 登录
                    回复
                    • 在新帖中回复
                    登录后回复
                    • 从旧到新
                    • 从新到旧
                    • 最多赞同


                    • 登录

                    • 没有帐号? 注册

                    • 第一个帖子
                      最后一个帖子
                    0
                    • 版块
                    • 最新
                    • 标签
                    • 热门
                    • 用户
                    • 群组