7900 XTX 的可能性探索|单卡篇(四):魔法打败魔法 - 7900XTX Strata 引擎跑Qwen3.8 Flash-Next 快得让我怀疑人生
-
7900 XTX 的可能性探索|单卡篇(四):魔法打败魔法
Qwen3.8 Flash-Next:Strata 引擎快得让我怀疑人生
️ 本文全部为我自己机器上的实测。硬件:RX 7900 XTX 24GB + Ryzen 5 9600X + 64GB DDR5
系统:Ubuntu 24.04.4 / ROCm 7.2.3本文后半部分会同时列出 llama.cpp、MoE4All infr 和 Strata 三套结果,但三套使用的量化不同,不能把绝对数字当成严格 apples-to-apples 比较。
0. 这次有点离谱
AI界有句名言 - 学得慢,就不用学了。
这两周一直在琢磨7900XTX跑Flash-Next甚至DeekSeek Flash本地大模型。结果忽然发现我测的速度实在是赶不上新技术冒出来的速度
。请看我这两周都经历了什么 ->路线 引擎 量化 / 模型 GPU 结果概况 1 llama.cpp + Vulkan GSQ-RCO Q2_0 单 7900 XTX Prefill ~29.3,Decode ~13.2 t/s 2 MoE4All / infr UD-Q2_K_XL 单 7900 XTX Prefill ~248.9,Decode 16.57 t/s 3 llama.cpp + Vulkan IQ4_XS 单 7900 XTX 最优 Prefill 150.8,Decode 17.88 t/s;长期服务约 8–14 4 MoE4All / infr 0.8/0.9 AD-4.27bpw Q4_K_M-M64 单 7900 XTX 131K:Prefill 672,Decode 32.2–35.3 5 Strata 0.1.27 + HIP Orca / orcarouter IQ3_XXS 单 7900 XTX Prefill 841–1271,Decode 50.9–59.2,254K 仍 841.5 / 52.1 


之前的感觉一直是:
这种超大 MoE 能在单张 7900 XTX 上跑起来已经不错了。不求快,能用就行。
直到这两天我试了 Strata。结果: Decode 50~59 t/s。 更离谱的是 Prefill:最高 1270 t/s。 单卡,呀兄弟们,这是7900XTX单卡!
而且不是只有短 Context 跑得快。
上下文一直拉到: 254K Context 稳定得一匹

还能做到:
- Prefill:841.5 t/s
- Decode:52.1 t/s

我第一反应就是:
这是125B!这不是当年弱不禁风的Qwen3.6 35B A3B。
我第二反应就是:
TNND, 测得慢,就不用测了。。。 就好比起得晚,就不用起了。。。咳咳

1. 测试环境
项目 配置 GPU AMD RX 7900 XTX 24GB GPU 数量 单卡 GPU0 CPU Ryzen 5 9600X,6C/12T RAM 64GB DDR5 (除了显卡外的最大瓶颈) OS Ubuntu 24.04.4 ROCm 7.2.3 Strata v0.1.27 Backend HIP / gfx1100 Model Qwen3.8-Flash-Next Uncensored Quant IQ3_XXS GGUF 总大小 85.2 GB Max Context 262144 模型:
orcarouter/Qwen3.8-Flash-Next-Uncensored-GGUF实际使用:
Qwen3.8-Flash-Next-Uncensored-IQ3_XXS-00001-of-00002.ggufQwen3.8-Flash-Next-Uncensored-IQ3_XXS-00002-of-00002.ggufQwen3.8-Flash-Next-Uncensored-MTP-draft.gguf
Strata 官方 ORCA 文档指定的也是:
IQ3_XXS
2. Strata 编译方法
仓库:
https://github.com/Niko1221/Strata版本:
v0.1.27git clone https://github.com/Niko1221/Strata.git cd Strata git checkout v0.1.27我的 HIP 编译参数:
cmake -S <worktree> -B <worktree>/build-hip-mmq \ -DCMAKE_BUILD_TYPE=Release \ -DSTRATA_ENABLE_HIP=ON \ -DSTRATA_ENABLE_CUDA=OFF \ -DSTRATA_HIP_ARCH=gfx1100 \ -DSTRATA_NATIVE_EXPERTS=ON \ -DSTRATA_PREFILL_MMQ=ON \ -DSTRATA_GGML_DIR=<repo>/third_party/llama.cpp \ -DCMAKE_PREFIX_PATH=/opt/rocm-7.2.3 \ -Dhip_DIR=/opt/rocm-7.2.3/lib/cmake/hip \ -DHIP_ROOT_DIR=/opt/rocm-7.2.3 cmake --build <worktree>/build-hip-mmq -j$(nproc)这里要注意:
Strata pinned llama.cpp 的 CUDA/MMQ 源码位置是:
third_party/llama.cpp/ggml/src/ggml-cuda/不是:
third_party/llama.cpp/ggml-cuda/路径搞错,configure 阶段就会报错。
3. IQ3_XXS 需要先做 Strata Pack
我先用官方工具把模型转换成 Strata 原生 pack:
python tools/iq_pack.py \ --gguf <model>-00001-of-00002.gguf \ --out <pack-dir>/iq3_xxs \ --compat-bf16生成内容包括:
experts.binnative_experts.txtindex.txtdense.binextra.bintokenizer/
其中:
experts.bin≈ 53.5 GB核心目的就是:
把专家权重整理成 Strata 自己适合高速访问的格式。
4. AMD 上还有一个关键步骤:hipBLASLt 本地校准
官方有 gfx1100 的 hipBLASLt tuning table。
但我这里:
- ROCm:7.2.3
- hipBLASLt runtime:100202
官方的:
- 100100
- 100200
都会因为版本不匹配被拒绝。
所以我在本机重新校准了一张:
gfx1100-hipblaslt-100202-local.txt最终:
27 rows,全部校验 PASS。
启动前确认日志里出现:
hipBLASLt tuning enabled否则不能算完整性能配置。
5. 我的最终运行参数
环境变量:
export LD_LIBRARY_PATH=/opt/rocm-7.2.3/lib:/opt/rocm-7.2.3/lib64 export ROCR_VISIBLE_DEVICES=0 export HIP_VISIBLE_DEVICES=0 export STRATA_PREFILL_MMQ=1 export STRATA_HIPBLASLT_TUNING=<本地校准表> export STRATA_PREFILL_RING=96 export STRATA_IO_THREADS=32关键 Strata 参数:
参数 我的配置 --packIQ3_XXS Strata pack --nativeOrca IQ3_XXS GGUF --ple-ggufOrca IQ3_XXS GGUF --expert-profile官方 expert profile --expert-cacheauto --mmap-experts开 --resident-cpu-experts开 --prefill8192 --spec4 --spec-min-p0.5 --mtpMTP runtime --max-context262144 --kvint8 --kv-resident32768 --pool-workers5 --adapt-every0 --pcie-frac0 --vram-reserve-mib1024 这里最关键的参数:
--resident-cpu-experts它让专家真正常驻系统内存。
6. Strata 最终成绩
先看短 Prompt:
Prompt Prefill Decode 4210 tok 555.3 t/s 56.8 t/s 8830 tok 865.5 t/s 55.0 t/s 4210 tok 919.7 t/s 54.0 t/s 8830 tok 1017.2 t/s 57.9 t/s 真正让我觉得离谱的是长 Context 曲线。
实际 Context Prefill Decode 1,557 526.4 t/s 57.8 t/s 6,076 1131.9 t/s 57.3 t/s 12,100 1109.3 t/s 58.3 t/s 24,153 1270.7 t/s 51.7 t/s 48,254 1211.5 t/s 58.3 t/s 96,456 1164.2 t/s 59.2 t/s 190,516 1112.8 t/s 54.6 t/s 222,312 880.5 t/s 50.9 t/s 254,105 841.5 t/s 52.1 t/s 几个重点:
- 24K Prefill:1270.7 t/s
- 96K Prefill:1164.2 t/s
- 190K Prefill:1112.8 t/s
- 254K Prefill:841.5 t/s
Decode 从 1.5K 到 254K:
50.9~59.2 t/s
也就是说:
Context 拉到 25 万 token,Decode 仍然保持在 50 t/s 以上。
哦,你问我这个Flash-Next效果怎么样? 下面两张图,一摸一样的数据,一摸一样的要求,左边的图是本次测试的Flash-Next Orca IQ3_XXS生成的,右边是我用27B Q4_K_M生成的,你更喜欢哪个?

7. 资源占用
Resident 模式:
项目 实测 CPU 常驻专家 31.95 GiB 专家数量 8812 Prefill 临时借用 3.92 GiB GPU 显存 25.19 / 25.75 GiB 系统可用内存要求 约 49.8 GiB 所以这套配置虽然是:
单张 RX 7900 XTX
但真正工作的组合是:
24GB VRAM + 大约 32GB Resident Expert RAM
系统最好有:
64GB RAM
如果 resident 模式退化回 mmap / 磁盘读取,速度会明显下降。
8. 一个需要说明的小补丁
我的 Orca IQ3_XXS 是普通 GGUF quant。
Strata v0.1.27 对:
blk.1.ple_key.weight的类型判断会误判。
因此我在独立 worktree 里做了一个很小的兼容修正:
- return include_ple_key && (tensor.type == 42 || tensor.type == 18 || tensor.type == 23); + return include_ple_key && tensor.type == 42;生产 tree 没动。
这个补丁只用于:
让普通 IQ3_XXS GGUF 的 BF16 fallback 正确加载。
以后如果官方已经修正,就不需要再打。
9. 另外两套引擎成绩
为了知道 Strata 大概处于什么水平,我还测试过另外两条 Flash-Next 路线。
再次强调:
三套使用的量化不同,下面只是我自己机器上的实际结果汇总,不是严格公平跑分。
llama.cpp + Vulkan
模型:
IQ4_XS,97.5 GB
最优 bench:
指标 成绩 Prefill 150.80 t/s Decode 17.88 t/s 实际长期服务:
8~14 t/s Decode
MoE4All infr 0.8 / 0.9 + Vulkan
模型:
AD-4.27bpw-Q4_K_M-M64,89 GB
131K Context:
指标 成绩 Prefill 672.0 t/s Decode 32.2~35.3 t/s TTFT 约 194 s
10. 三套放在一起
引擎 量化 Prefill Decode Context llama.cpp + Vulkan IQ4_XS 150.8 17.9 短 Context MoE4All infr 4.27bpw Q4 672.0 32~35 131K Strata 0.1.27 IQ3_XXS 841~1271 50.9~59.2 254K 还是那句话:
不同量化,不做严格横评。
但从我自己实际跑下来的结果看:
Strata 确实快得有点不讲道理。
11. 总结
本来以为我的单卡DanielMTP 27B已经够快的了。魔法打败魔法,Strata 横空出世,用Flash-Next 在7900XTX上跑出了真正生产力。
-
-
-
-
-
-
补充更新(10 月 1 日):Strata 升级 + RDNA3 WMMA,Prefill提升约 18%
上一篇测试使用的是:
Strata v0.1.27
搜到了一个好东西RDNA3 WMMA 优化。又肝了一晚,把测试环境升级到了:
Strata v0.1.31 + PR #313
原来的生产 tree 没动,另外开了独立 worktree 编译测试。
结果相当直接:
单卡 RX 7900 XTX,192K Context
Prefill:1081.3 → 1268.5 t/s
Decode:58.2 → 58.7 t/s
也就是说:
Prefill +17.3%,Decode 基本不变。
而且这不是某一个短 Context 的偶然高点。
我按统一口径重新跑了:
8K / 32K / 64K / 128K / 192K
每档:
- 2 次 warmup
- 3 次正式测试
- 使用引擎自报纯 Prefill
- Context 按整数档重新构造
- 其它运行参数保持一致
结果如下:
Context 实际 Prompt 原版 Prefill WMMA Prefill 提升 8K 8,095 1209.2 1413.6 +16.9% 32K 32,416 1211.8 1438.9 +18.7% 64K 64,836 1206.8 1417.8 +17.5% 128K 129,677 1143.8 1351.6 +18.2% 192K 194,517 1081.3 1268.5 +17.3% 五档平均提升大约:
+17.7%
这次优化是什么?
这次用的是 Strata 的:
RDNA3 WMMA PR #313
它的前身是 PR #260,后来重新整理并以新的方式实现。
核心目的很直接:
把 RX 7900 XTX / gfx1100 上的 RDNA3
v_wmma_*矩阵指令真正用起来。主要包括两条路径:
- Dense WMMA GEMM
- WMMA Prompt Attention
也就是说,这次不是单纯改几个参数,也不是换一个更激进的 benchmark 配置。
而是:
让 gfx1100 原本没有充分利用的矩阵计算能力真正参与 Prefill。
特别感谢这条优化的作者和 Strata 维护者

相关项目和 PR:
-
RDNA3 WMMA 原始 PR #260
https://github.com/Niko1221/Strata/pull/260 -
后续重做版 PR #313
https://github.com/Niko1221/Strata/pull/313
特别感谢提交和维护这条 RDNA3 WMMA 优化路线的贡献者。
这种优化我很喜欢:
不是“调几个参数跑分快一点”,而是真正把 gfx1100 上原本没有吃满的硬件能力用起来。
为什么这次 +18% 我觉得很有价值?
因为我的 baseline 本身已经不是一个没有调过的 Strata。
上一篇那套已经包括:
- gfx1100 HIP 编译
- MMQ
- Resident CPU Experts
- 本地 hipBLASLt 100202 tuning table
- 27 rows 全部校验 PASS
- Prefill chunk 8192
- 5 个 CPU worker
- int8 KV
- 32K KV resident budget
也就是说:
这不是拿一个慢 fallback 去和 WMMA 比。
而是在我上一篇已经优化过、已经跑到 1000+ Prefill 的配置上:
再稳定叠加约 18%。
这个结果比单点高分对我更有意义。
怎么开启?
PR #313 的 WMMA 默认关闭。
需要手动开启:
export STRATA_WMMA_GEMM=1 export STRATA_PA_WMMA=1我最终使用的是:
STRATA_WMMA_GEMM=1 STRATA_PA_WMMA=1
在我这套配置上,两个开关必须一起开
我专门测试过:
只开:
STRATA_WMMA_GEMM=1但不开:
STRATA_PA_WMMA32K 反而变慢:
原版:1211.8 t/s
只开 GEMM:916 t/s
所以至少在我当前这套:
RX 7900 XTX
Orca IQ3_XXS
Strata v0.1.31 + PR #313上,我最终采用的是:
WMMA GEMM + WMMA Prompt Attention 两个一起开。
不要根据“GEMM 是主要优化项”就想当然地只开一个。
编译
编译参数和上一篇第 2 节基本一致:
- HIP
- gfx1100
- MMQ
- ROCm 7.2.3
区别只是:
上一篇:Strata v0.1.27
本次补测:Strata v0.1.31 + PR #313
我是在独立 worktree 上重新编译测试的。
原来的生产 tree完全没动。
-
-
@Prio 我个人觉得decode 有50+ 就够了
希望prefill 能上3000,至少有2000 才舒服
-
-
-
-
-
-
@kenshin 我也是64G内存,我这边在 7900 XTX + Strata 跑 Flash-Next 也踩过这个坑, 一开始测试的时候也是报内存不够,调整了几次就好了。
Strata 的 --resident-cpu-experts 模式启动时对 系统 RAM 可用量要求很高,不是看你“装了多少 RAM”,而是看启动瞬间还有多少 available memory。
我这边 Orca IQ3_XXS 的实测大概是:- expert resident RAM:约 31.95 GiB
- prefill borrow:约 3.92 GiB
- 再加模型运行、page cache、Strata 本身以及安全余量
实际建议启动前至少留出 约 50 GiB 可用 RAM。
我这台机器只有 64GB RAM,所以如果另一张卡上的 27B 服务、Hermes 或其他进程也在吃内存,Strata 就很容易在加载阶段失败,或者退回 mmap 路径,性能会明显掉。
我最后的办法不是乱调参数,而是:
- 先看 MemAvailable,不要只看总内存。
- 启动 Strata 前先卸载/停掉占系统 RAM 很多的其他模型。
- 确保 swap 不在疯狂工作;能启动但一直 swap,速度也会很难看。
- 如果要跑我们那套高性能配置,尽量保留:
--resident-cpu-experts - 实在内存不够,可以不用 resident CPU experts、改走 mmap/streaming,但这是“能跑”的方案,不是我们测到 1000+ Prefill 的那套性能方案。
其实都是我的本地Agent在搞,我就是一直给它鼓励和压力,它就自己搞出来了,哈哈
-
@xiaopbro 这个看起来不像是 R9700 跑不了 Strata。我问了下 AI,更可能是 gfx1201 这边的编译 / ROCm 环境有问题。
Strata 现在已经正式支持 R9700 / gfx1201,官方也有 R9700 实机跑通的记录。现在比较靠谱的路线,一个是 system ROCm 7.14,另一个就是直接走 Strata setup 自带的 TheRock 7.10 gfx120X。
你现在这套是 ROCm 7.2.1 + clang 22,而且 stall report 已经显示 GPU kernel 基本没正常跑起来。要不要考虑先换到 Strata 官方推荐的 TheRock / gfx120X 环境再重新编一次试试?
对了,我的 7900 XTX 那套手工 ROCm / hipBLASLt / WMMA 参数别原样照搬过去,那套是针对 gfx1100 调的,gfx1201 不是一回事。
-
@xiaopbro 这个看起来不像是 R9700 跑不了 Strata。我问了下 AI,更可能是 gfx1201 这边的编译 / ROCm 环境有问题。
Strata 现在已经正式支持 R9700 / gfx1201,官方也有 R9700 实机跑通的记录。现在比较靠谱的路线,一个是 system ROCm 7.14,另一个就是直接走 Strata setup 自带的 TheRock 7.10 gfx120X。
你现在这套是 ROCm 7.2.1 + clang 22,而且 stall report 已经显示 GPU kernel 基本没正常跑起来。要不要考虑先换到 Strata 官方推荐的 TheRock / gfx120X 环境再重新编一次试试?
对了,我的 7900 XTX 那套手工 ROCm / hipBLASLt / WMMA 参数别原样照搬过去,那套是针对 gfx1100 调的,gfx1201 不是一回事。
-
-
@xiaopbro 哦太好了,恭喜恭喜!我最近注意到,R9700 这条 RDNA4 / gfx1201 线的优化进展,感觉明显比 RDNA3 / gfx1100 快不少。很多新 kernel、WMMA、ROCm 适配好像都是先照顾 RDNA4。你这边如果把编译环境理顺,后面应该还有不少性能可以挖。
-
