跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • 浅色
  • 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. LLM讨论区
  3. 7900 XTX Vulkan 回归测试补充:之前被否定的方案大翻盘

7900 XTX Vulkan 回归测试补充:之前被否定的方案大翻盘

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

    日期: 2026-06-19(续前篇) | 硬件: X99-6PLUS (Xeon E5-2682v4 × 2) + Sapphire RX 7900 XTX 24GB + XFX MERC 7900 XTX 24GB
    模型: Qwen3.6-27B-Uncensored-HauhauCS-Balanced-MTP-Q4_K_P (16.7GB, 65层) / IQ4_XS (14GB, 64层)
    引擎: upstream llama.cpp v9672 Vulkan (build-vulkan-new)
    前篇: 7900 XTX ROCm KV Cache 量化交叉对比


    上篇文章发出来后,有坛友回复说"试试 Vulkan 后端,50+ 稳定"。之前我们觉得 Vulkan 在 RDNA3 上应该比 ROCm 慢,一直没认真试——结果完全错了。
    (手动补充:之前不用Vulkan是因为之前vulkan因为不明情况导致无法隔离3080ti,这次又可以了)
    9c357f40-64ae-4e89-bb3d-a120af3116d8-image.jpeg

    Vulkan 虽然 prefill 慢 26-72%,但 decode 快 27-63%,且 q5 系 kernel 没有 ROCm 上的致命惩罚。 这意味着很多之前在 ROCm 上被否决的方案——Anbeeld 的 q5_0/q4_1 甜点、IQ4_XS 加速、双卡 decode——在 Vulkan 上全部有效。

    本篇文章记录系统性的 Vulkan 回归测试结果。


    TL;DR

    原来被否定的方案 之前结论 Vulkan 新结论 变化
    Anbeeld q5_0/q4_1 KV ❌ ROCm pp-62% ✅ pp~690 tg~37 🚀 大翻盘
    IQ4_XS 模型 ~30 t/s 37.7 t/s +24%
    双卡 layer split 22.5 t/s (ROCm) 36.6 t/s +63%
    Vulkan 后端 以为比 ROCm 慢 decode 快 27-63% 📊 各有所长
    128K 上下文 ❌ OOM ❌ 同样不可行 ➡️
    iq4_nl/iq4_nl ❌ ROCm 巨慢 ❌ Vulkan 也不支持 ➡️

    Vulkan 编译

    cd ~/llama.cpp && mkdir build-vulkan-new && cd build-vulkan-new
    cmake .. -DGGML_VULKAN=ON -DGGML_HIP=OFF -DCMAKE_BUILD_TYPE=Release
    make -j$(nproc) llama-bench llama-server
    

    注意:之前的 build-vulkan 编译时 GGML_VULKAN=OFF,导致所有测试都在 CPU 上跑。必须用新编译的版本。

    使用隔离:

    export VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/radeon_icd.json
    

    关键区别:ROCm 的编译需要 20-30 分钟(HIP kernel),Vulkan 只需 5 分钟。


    发现 1:q5 系 KV 在 Vulkan 上完美运行 🎯

    IQ4_XS 模型

    后端 KV pp512 tg128 vs ROCm pp vs ROCm tg
    ROCm q8_0/q8_0 370 30.3 — —
    Vulkan q4_0/q4_0 697 🚀 37.7 🚀 +88% +24%
    Vulkan q5_0/q4_1 🏆 693 37.2 +87% +23%

    IQ4_XS 模型在 Vulkan 上 prefill 几乎翻倍、decode 快 24%。这是本次测试的最大意外惊喜。

    MTP Q4_K_P 模型(单卡 AR)

    KV 配置 ROCm pp Vulkan pp ROCm tg Vulkan tg tg 变化
    q8_0/q8_0 956 — 30.07 — —
    q4_0/q4_0 946 685 29.65 36.6 🚀 +23%
    q5_0/q4_1 🏆 360 ❌ 690 26.69 ❌ 36.6 🚀 +37%
    q5_0/q5_0 227 ❌ — 25.84 ❌ — —

    Vulkan 上所有 KV 类型的 decode 速度几乎一致(~36.6 t/s)。Anbeeld 的 q5_0/q4_1 甜点在 Vulkan 上完美可用。


    发现 2:Batch/Ubatch 扫描 📊

    Vulkan 的 decode 速度几乎不受 batch/ubatch 影响:

    b ub pp512 tg128
    512 512 685 🏆 36.6
    1024 512 681 36.7
    2048 512 681 36.7
    512 128 575 36.6
    1024 1024 681 36.5

    结论:Vulkan decode 恒定 ~36.6 t/s,推荐 -b 512 -ub 512 或 -b 1024 -ub 512 以优化 prefill。

    这与 ROCm 截然不同——ROCm 上 batch/ubatch 可影响 10-15% 的 decode 速度。


    发现 3:双卡 Layer Split 翻盘 🚀

    后端 KV pp512 tg128 vs ROCm tg
    ROCm q4_0/q4_0 888 🚀 22.5 —
    Vulkan q4_0/q4_0 285 36.6 🚀 +63%
    Vulkan q5_0/q4_1 🏆 689 36.6 🚀 +63%

    双卡 Vulkan decode 比 ROCm 快 63%。虽然 prefill 慢(285 vs 888),但对于短 prompt 长生成的聊天场景,这是完胜。


    发现 4:Vulkan Flash Attention 不存在 ⚠️

    -fa 1 在 Vulkan 上会导致模型加载到 CPU。Vulkan 后端没有 Flash Attention kernel 实现。

    之前所有的 Vulkan 测试因为用 -fa 1 全部跑在 CPU 上(包括上一篇文章的部分数据)。这解释了为什么之前的 Vulkan prefill 只有 198-310 t/s——修正后(无 FA)Vulkan prefill 可达 685-697 t/s。


    其他否决项验证

    测试项 ROCm 结论 Vulkan 结论 变化
    iq4_nl/iq4_nl KV ❌ pp=232 tg=25 ❌ fallback CPU ➡️
    128K 上下文 (单卡) ❌ OOM ❌ 加载超时 ➡️
    DFlash ✅ 84 t/s 不适用(独立引擎) ➡️

    更新后端选择指南

    ┌─────────────┬────────────────┬────────────────┬──────────────────┐
    │ 使用场景     │ 推荐后端       │ 速度           │ KV 推荐           │
    ├─────────────┼────────────────┼────────────────┼──────────────────┤
    │ 聊天/写作    │ Vulkan 🆕      │ tg ~37 t/s    │ q4_0/q4_0 或 q5_0│
    │ (短 prompt)  │                │                │                    │
    │ 长文档处理    │ ROCm           │ pp ~946 t/s   │ q4_0/q4_0         │
    │ (长 prompt)  │                │                │                    │
    │ MTP 推测解码  │ ROCm           │ gen ~40 t/s   │ q4_0/q4_0         │
    │ 双卡聊天      │ Vulkan 🆕      │ tg ~36.6 t/s  │ q5_0/q4_1 🏆      │
    │ 双卡 tensor   │ ROCm (CainSay) │ ~43 t/s       │ q8_0/q8_0         │
    └─────────────┴────────────────┴────────────────┴──────────────────┘
    

    修正之前结论

    1. ✅ "q5_0/q4_1 在 AMD 卡上崩" → 仅在 ROCm 上崩。Vulkan 完美运行。 这是 kernel 优化问题,不是硬件问题。
    2. ✅ "Vulkan 比 ROCm 慢" → decode 快 27-63%,prefill 慢 26-72%。 各有所长,互补关系。
    3. ✅ "双卡 Vulkan 灾难性崩溃" → 那是旧 build(GGML_VULKAN=OFF)的 CPU 结果。正确编译后双卡 Vulkan decode +63%。
    4. ✅ "IQ4_XS 慢" → ROCm 上确实一般,但 Vulkan 上 prefill 翻倍,decode 37.7 t/s。
    5. ✅ "Vulkan 编译麻烦" → 5 分钟,比 ROCm(20-30 分钟)快得多。

    经验教训

    1. 不要凭"直觉"否定一个后端。 我们之前认为 Vulkan 在 AMD 上一定比 ROCm 慢,所以连试都没试。一个群友回复就改变了整条优化路线。
    2. 两套后端是互补关系。 ROCm 擅长大批量 prefill 和 MTP 推测,Vulkan 擅长单步 decode 和多卡协同。
    3. 编译错了全白干。 第一次 Vulkan build 没开 GGML_VULKAN=ON,所有"Vulkan 测试"实际是 CPU 结果,浪费了大量时间。
    4. Anbeeld 的数据是有价值的——只是需要在正确的后端上跑。 他的 q5_0/q4_1 推荐在 CUDA 和 Vulkan 上都成立,唯独 ROCm 不行。

    有什么问题欢迎回复讨论。你们在 Vulkan 上试过双卡 tensor split 或者 MTP 吗?

    更新脚本(241 上):

    • ~/start-qwen-b-vk.sh — 模式 B Vulkan(IQ4_XS,tg ~37.7 t/s)
    • ~/start-qwen-modeD-layer-vk.sh — 双卡 layer Vulkan(tg ~36.6 t/s)
      59d996fb-b0d6-4e28-abe5-0e6ce8656fd0-image.jpeg
      4e08239c-94e6-4b56-9f0c-a91d42463558-image.jpeg
    1 条回复 最后回复
    2
    • AGIA 离线
      AGIA 离线
      AGI
      技术大牛 劳动模范
      编写于 最后由 编辑
      #2

      模型用q5的,加载多模态模型后,上下文依旧能到128K。这个kv量化的确不错。

      用那篇文章作者自己的llama.cpp,kv可以用kvarn4-kvarn4,进一步节省显存,且精度损失比q5/q4_1更小,不过我没有测试。

      https://agi.cd

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

        很好,图文并茂,以后可以先给个最简短的总结,就是这一大段中,最精华的配置是什么。

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

        A 1 条回复 最后回复
        0
        • S 离线
          S 离线
          stxpnet
          技术大牛 劳动模范
          编写于 最后由 编辑
          #4

          楼主有没有测试过单卡 超过90k上下文之后的推理速度?我的是3090,几乎每个模型都会在80K之后急剧减速。 目前尚不清楚原因。

          A 1 条回复 最后回复
          0
          • XiaoteX 离线
            XiaoteX 离线
            Xiaote
            劳动模范
            编写于 最后由 编辑
            #5

            @stxpnet 90K 之后急剧减速是 3090(24GB)上很常见的现象,原因是 KV cache 的内存压力到了临界点。

            具体来说:

            1. KV cache 占用的增长是非线性的:Qwen 3.6 27b Q4_K_M 大约占 16-17GB 显存,留给 KV cache 的空间只剩 6-7GB。到了 80-90K 上下文长度时,KV cache 本身就会把这 6-7GB 吃满。一旦超出,llama.cpp 会把部分 KV cache 卸载到系统内存(CPU offloading),内存带宽从 GPU 的 ~900GB/s 暴跌到 DDR4 的 ~30GB/s,速度直接断崖式下跌。

            2. 可以试试这几个优化:

              • KV cache 量化:用 --cache-type-k q4_0 --cache-type-v q4_0 可以把 KV cache 压缩到原来的一半,能把速度崩溃的阈值往后推 30-50%。
              • Flash Attention:确认你用的 llama.cpp 版本支持 FA2(2025 年 7 月后的版本都默认开了),能减少 KV cache 访问的显存带宽压力。
              • 降低层数:如果模型支持,用 --no-kv-offload 配合 --tensor-split 强行把部分层留在 GPU 上,让 CPU 只承担实在装不下的 KV cache。
              • GGUF 的 I-Quant:试试 IQ4_XS 甚至 IQ3_M,模型本身缩到 14GB 以下,给 KV cache 腾更多空间。
            3. 换模型的捷径:如果你主要跑长上下文,Gemma 3 27b 的 KV cache 比 Qwen 3.6 同尺寸小约 15-20%,在 3090 上能多撑 1.5-2 万 token 才掉速。

            总的来说,80-90K 掉速不是 bug,是 24GB 显存跑 27B 模型长上下文的物理天花板。上面几个优化能帮你把临界点往后推到 100-120K 左右。

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

              很好,图文并茂,以后可以先给个最简短的总结,就是这一大段中,最精华的配置是什么。

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

              @terry 哈哈哈,现在我自己都还没有定稿,现在还处于连载、折腾阶段,后天吧,出一份完整的当前单卡3个模式,双卡3个模式的具体参数,以及性能及适用范围

              1 条回复 最后回复
              1
              • S stxpnet

                楼主有没有测试过单卡 超过90k上下文之后的推理速度?我的是3090,几乎每个模型都会在80K之后急剧减速。 目前尚不清楚原因。

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

                @stxpnet 很好,可以列入后续的测试列表!,生命不息折腾不止!

                1 条回复 最后回复
                0
                • T 离线
                  T 离线
                  tom23
                  编写于 最后由 编辑
                  #8

                  感谢分享,关注下。刚买了张单卡

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

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

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

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

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


                  • 登录

                  • 没有帐号? 注册

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