上一篇给 RTX 4090 D 解锁了限制,在纯 GEMM 测试里,部分 Tensor 指令吞吐接近翻倍。发到 X 后,有朋友提醒:“这对跑 MoE 量化推理可能几乎没用。”
我在家里这张卡上主要跑 Strata + IQ3_S 量化的 Qwen3.8-Flash-Next。翻了源码再拉出运行日志对照,实际情况确实如此。
为什么“浮点翻倍”在量化 MoE 上使不上劲 #
浮点算力涨了,整数原地踏步 #
先看本机的基准测试(边长 8192 方阵乘法,425 W 功耗上限):
| GEMM 模式 | 原厂 TFLOPS | 解锁 TFLOPS | 吞吐提升 |
|---|---|---|---|
| FP16 → FP32 | 152.83 | 195.96 | +28.22% |
| BF16 → FP32 | 153.81 | 250.97 | +63.16% |
| TF32 | 76.49 | 145.55 | +90.28% |
| 普通 FP32 对照 | 54.27 | 54.71 | +0.80% |
乘法输入为 FP16/BF16、累加为 FP32 的路径确实涨幅明显。但 INT8、INT4 和 dp4a 指令吞吐完全没变。
Strata 专家内核走的是纯整数指令 #
MoE 模型参数量虽大,但以 IQ3_S 这种低比特格式加载后,GPU 实际在执行什么?
翻看 Strata 0.1.48 的量化专家预填充内核源码,关键 PTX 汇编就这一句:
mma.sync.aligned.m16n8k32.row.col.s32.s8.s8.s32这里的 s8 是有符号 INT8 输入,s32 是 INT32 累加。这条指令正是基准测试里完全没被加速的整数路径。虽然注意力或部分 cuBLAS 调用里夹杂着少量 BF16 计算,但关键耗时全在整数矩阵乘与权重反量化/解包上。
瓶颈在显存带宽与异构通信,而非算力 #
解锁没有给 4090 D 增加哪怕 1 Byte 的显存带宽或 PCIe 带宽。Strata 的架构是一部分专家放显存,其余专家放内存由 CPU 计算,两边重叠流水线。瓶颈一直卡在显存吞吐和跨总线数据搬运上。按 Amdahl 定律,加速一个耗时占比极小的浮点环节,整体吞吐不会有任何起色。
跑分验证:解锁到底快没快 #
社区实测:48GB 4090 受控对比(0.98x ~ 0.99x) #
社区已有研究者在改装 48 GB 的 4090 上,针对同款 Strata 引擎与 IQ3_S 模型做了严格的受控测试:
| 预填充场景 | 原厂 token/s | 解锁 token/s | 解锁 / 原厂加速比 |
|---|---|---|---|
| 8K 输入 | 3518.8 | 3457.8 | 0.983× |
| 32K 输入 | 3916.6 | 3890.3 | 0.993× |
长输入 Prefill 下解锁不仅没有提升,甚至还在测量噪声内微跌。Decode 阶段的速度同样在正常抖动范围内,测不出稳定正收益。
本机日常服务快照 #
本机 Strata 0.1.48 在真实请求下的统计也能印证:
| 指标 | 解锁窗口 (82 请求) | 原厂窗口 (39 请求) |
|---|---|---|
| 生成 token 总量 | 60,707 | 25,163 |
| 加权生成速度 (token/s) | 126.34 | 141.14 |
| 生成速度中位数 (token/s) | 130.6 | 142.2 |
| 加权预填充速度 (token/s) | 1775.79 | 2170.54 |
| 前缀复用比例 | 94.02% | 82.87% |
| MTP 草稿接受率 | 68.05% | 72.58% |
哪些场景才能吃满这部分算力 #
解锁既然对量化 MoE 推理不灵,那多出来的 Tensor 算力用在哪里才实在?
- 全精度 / 半精度微调与训练 (LoRA / SFT):大量矩阵乘法走 FP16/BF16 输入与 FP32 累加,算力利用率高,直接受益。
- 图像与视频扩散模型 (Stable Diffusion / Flux / CogVideoX):去噪网络纯跑高密度浮点 GEMM,且模型整卡常驻,加速立竿见影。
- 原生半精度(如 BF16)且 Batch 较大的 Dense 模型推理:算力受限(Compute-bound)而非访存受限(Memory-bound)的场景才能体现优势。
稳定性与数据归档 #
日常使用中曾遇到过一次 Xid 79: GPU has fallen off the bus 掉卡。切回原厂倍率后也复现了一次,确认掉卡跟解锁没有直接因果关系,多半由供电瞬变、驱动或自定义内核(7.3.0-ros2go-btf)引起。目前显卡已切回原厂倍率日常跑着。
后续我整理了一套固定 Prompt 脚本,用于同一前缀与缓存状态下的复测。原始脱敏数据与复算脚本在附件里: