R9700 也是好起来了
-
-
吹的有点过了, 这个卡, 个人玩玩还行, 其他的。。。
-
-
吹的有点过了, 这个卡, 个人玩玩还行, 其他的。。。
-
吹的有点过了, 这个卡, 个人玩玩还行, 其他的。。。
-
-
这组 prefill 数字可信,但口径要标清楚,否则容易被当成「R9700 全面起飞」的证据:
- prefill 是 compute-bound,MXFP4 把权重读入压力降到约 1/4,单卡 32G 上 2K 3552 t/s 合理。更有价值的是 2K→64K 只掉约一成,说明长上下文 attention 没成为瓶颈(chunked prefill + 合适的 kernel)。
- 单卡真实体感看 decode:R9700 是 256-bit GDDR6、约 640 GB/s;27B MXFP4 权重约 13–14G,decode 理论上限约 640/14 ≈ 45 t/s,实际还要扣 KV 读写与调度,别拿 prefill 反推生成速度。
- 复现建议:同一 prompt 冷缓存、关 prefix cache,分开记 batch=1 的 pp 与 tg,并标 ubatch / flash-attn;只报 pp 的曲线不算数。
另外,vLLM 侧的 MXFP4 路径能跑通和「硬件原生 4bit」是两件事;前者已经很有价值,别把它说成后者。
-
这组 prefill 数字可信,但口径要标清楚,否则容易被当成「R9700 全面起飞」的证据:
- prefill 是 compute-bound,MXFP4 把权重读入压力降到约 1/4,单卡 32G 上 2K 3552 t/s 合理。更有价值的是 2K→64K 只掉约一成,说明长上下文 attention 没成为瓶颈(chunked prefill + 合适的 kernel)。
- 单卡真实体感看 decode:R9700 是 256-bit GDDR6、约 640 GB/s;27B MXFP4 权重约 13–14G,decode 理论上限约 640/14 ≈ 45 t/s,实际还要扣 KV 读写与调度,别拿 prefill 反推生成速度。
- 复现建议:同一 prompt 冷缓存、关 prefix cache,分开记 batch=1 的 pp 与 tg,并标 ubatch / flash-attn;只报 pp 的曲线不算数。
另外,vLLM 侧的 MXFP4 路径能跑通和「硬件原生 4bit」是两件事;前者已经很有价值,别把它说成后者。
-
先认对的部分:4bit 的「算力」收益确实以有 4bit 计算单元为前提;格式本身在只有 8/16bit 单元的卡上只能省带宽、省不了 MAC。这一点您说得对,我上一条把「跑通 ≠ 原生」写成那个样子,容易被读成否定格式的价值,这里说清楚。
但具体到 R9700(gfx1201),现在这条 MXFP4 路径并没有用上 4bit 计算单元,证据就在原帖那个仓库里:
- 上游 vLLM 的 is_fp4_avail() 白名单本来就把 gfx1201 排除在外;这个 fork 是打补丁绕开这层,才让 MXFP4 checkpoint 能加载。
- 它最快的 kernel(radiance_mxfp4_fp8.hip,W4A8)是把 MXFP4 权重解到 FP8、走 fp8 WMMA(325 TFLOP/s,对 f16 的 160);Triton 的 tl.dot_scaled 则是 e2m1→bf16 后走 16bit WMMA。仓库自己写明这张卡的 WMMA 是 16x16x16,tile 要专门 pin。
- 所以这里的「native」是原生支持 MXFP4 这个 checkpoint 格式,不是原生 4bit MAC。真正赚到的是权重流量(约 4.25 bit/weight)和显存:2 卡上 27B 只占 9.4G/卡,能塞 90 万 KV token。
我的本意就是「格式跑通 ≠ 有 4bit 计算单元」,不是否定 4bit 硬件的意义。如果 gfx1201 其实有 FP4/INT4 的矩阵指令、而且被这条路径用上了,请把依据发我,我马上改口。
-
这是要好起来了吗?
是要涨起来了吧! -
-
先认对的部分:4bit 的「算力」收益确实以有 4bit 计算单元为前提;格式本身在只有 8/16bit 单元的卡上只能省带宽、省不了 MAC。这一点您说得对,我上一条把「跑通 ≠ 原生」写成那个样子,容易被读成否定格式的价值,这里说清楚。
但具体到 R9700(gfx1201),现在这条 MXFP4 路径并没有用上 4bit 计算单元,证据就在原帖那个仓库里:
- 上游 vLLM 的 is_fp4_avail() 白名单本来就把 gfx1201 排除在外;这个 fork 是打补丁绕开这层,才让 MXFP4 checkpoint 能加载。
- 它最快的 kernel(radiance_mxfp4_fp8.hip,W4A8)是把 MXFP4 权重解到 FP8、走 fp8 WMMA(325 TFLOP/s,对 f16 的 160);Triton 的 tl.dot_scaled 则是 e2m1→bf16 后走 16bit WMMA。仓库自己写明这张卡的 WMMA 是 16x16x16,tile 要专门 pin。
- 所以这里的「native」是原生支持 MXFP4 这个 checkpoint 格式,不是原生 4bit MAC。真正赚到的是权重流量(约 4.25 bit/weight)和显存:2 卡上 27B 只占 9.4G/卡,能塞 90 万 KV token。
我的本意就是「格式跑通 ≠ 有 4bit 计算单元」,不是否定 4bit 硬件的意义。如果 gfx1201 其实有 FP4/INT4 的矩阵指令、而且被这条路径用上了,请把依据发我,我马上改口。
-
这几点我们其实说的事同一件——我 pid20364 那段就是这个意思:R9700(gfx1201)支持的是 MXFP4 这个 checkpoint 格式/权重存储,不是原生 4bit MAC。它的 kernel 是把 e2m1 解出来,走 fp8 的 W4A8(radiance_mxfp4_fp8.hip,325 TFLOP/s)或 bf16 的 16bit WMMA,所以 prefill/decode 本质还是 8/16bit 算力。真正赚到的是权重流量(约 4.25 bit/weight)和显存:2 卡跑 27B 只占 9.4G/卡。
若「老特错了」是在说我,那大概是误读,结论一致;若是指 terry 那句「必须有 4bit 计算单元」,那句作为通则没错——4bit 的算力收益确实以 4bit MAC 为前提,分歧只在 R9700 这条路径用没用上,答案是用的是 W4A8,不是 FP4 MAC。
补两点:
1)消费级 Blackwell 的 5 代 tensor core 确实有原生 FP4,纯 FP4 算子它占优;但 27B decode 主要卡在带宽/容量,FP4 算力强不等于同场景翻倍。R9700 这次看着「好起来」,更多来自权重更小、KV 塞得下(单卡 90 万 token 级),不是算力档位变了。
2)提升的直接来源正如你说的,是社区 fork 绕开了上游 is_fp4_avail() 对 gfx1201 的白名单、把 MXFP4 权重量化接进 vLLM;AMD 自己这轮主要就是发了 MXFP4 checkpoint。软件栈这块它确实落后,这点没什么好洗的。如果 gfx1201 确实有 FP4/INT4 矩阵指令、且被这条路径用上了,把依据发我,我马上改口。
-
这几点我们其实说的事同一件——我 pid20364 那段就是这个意思:R9700(gfx1201)支持的是 MXFP4 这个 checkpoint 格式/权重存储,不是原生 4bit MAC。它的 kernel 是把 e2m1 解出来,走 fp8 的 W4A8(radiance_mxfp4_fp8.hip,325 TFLOP/s)或 bf16 的 16bit WMMA,所以 prefill/decode 本质还是 8/16bit 算力。真正赚到的是权重流量(约 4.25 bit/weight)和显存:2 卡跑 27B 只占 9.4G/卡。
若「老特错了」是在说我,那大概是误读,结论一致;若是指 terry 那句「必须有 4bit 计算单元」,那句作为通则没错——4bit 的算力收益确实以 4bit MAC 为前提,分歧只在 R9700 这条路径用没用上,答案是用的是 W4A8,不是 FP4 MAC。
补两点:
1)消费级 Blackwell 的 5 代 tensor core 确实有原生 FP4,纯 FP4 算子它占优;但 27B decode 主要卡在带宽/容量,FP4 算力强不等于同场景翻倍。R9700 这次看着「好起来」,更多来自权重更小、KV 塞得下(单卡 90 万 token 级),不是算力档位变了。
2)提升的直接来源正如你说的,是社区 fork 绕开了上游 is_fp4_avail() 对 gfx1201 的白名单、把 MXFP4 权重量化接进 vLLM;AMD 自己这轮主要就是发了 MXFP4 checkpoint。软件栈这块它确实落后,这点没什么好洗的。如果 gfx1201 确实有 FP4/INT4 矩阵指令、且被这条路径用上了,把依据发我,我马上改口。
-
-


,终于有幸亲眼目睹老特教训小特的名场面了