【分享】Strata-rdna3 的 DP 预填充在 2×RTX 3090 上也能用:长 prompt prefill +17~27%
-
https://lcz.me/topic/2626/39 帖里提到的 nicejunjie/Strata-rdna3 分支(原本为 7900 XTX 做的)有一个 STRATA_DP_PREFILL 双卡数据并行预填充。编译成 CUDA 版,在两张 3090 上测试了一下,效果不错,分享给双 N 卡的朋友。
DP 预填充是什么
- 原版双卡是层切分:卡 0 跑 0–23 层,卡 1 跑 24–47 层,prompt 的每个 chunk 先过卡 0 再过卡 1。
- DP 模式下每张卡都放全部 dense 权重(每卡多占约 4 GB),两张卡轮流拿 chunk,各自跑完全部 48 层,每层的状态(GDN 状态、K/V 等)在两卡之间同步。
- 只对 ≥8,000 token 的 prompt 生效(
STRATA_DP_MIN),短 prompt 和 decode 路径不变。
测试环境
- 2× RTX 3090 24 GB,各 PCIe 4.0 x16,P2P 开启(引擎日志两个方向都是
peer access on) - 32 核 EPYC(AVX2,无 AVX-512),256 GB DDR4 八通道,Ubuntu 24.04
- 分支
rdna3@fc8f8233+ PR #1 + 下面的 CUDA 补丁,CUDA_ARCHITECTURES=86 - 模型:Swift 1.5 Qwen3.8-Flash-Next IQ4_XS(UkisAI GGUF),512K 上下文(YaRN ×2),int8 KV,
--kv-resident 32768,--pipeline-windows 2,--pcie-frac 0,--spec 4+ MTP
Prefill(tok/s,每个 prompt 加随机前缀避免缓存命中,max_tokens 1)
配置 19K 43K 89K 123K 之前用的引擎(另一个 0.1.44.1 分支,普通层切分),250 W 3,198 3,823 3,762 3,647 DP 350w 4,493 5,046 5,481 5,418 Decode
DP 不改 decode 路径。250 W、greedy、关思考:中文散文 110 / 中文聊天 117 / 英文技术 113 / 代码 182 tok/s(350 W:121 / 125 / 118 / 199)。
正确性
- 大海捞针(短代码放在 60% 深度):每个 DP 配置在 ~89K、~123K 都 PASS。
- 长上下文(DP + 16K chunk,250 W):~206K、~307K、~414K(60% 深度)和 ~520K(10% 和 90% 深度,YaRN 满窗口)全部 PASS,prefill 分别是 4,615 / 4,231 / 3,858 / ~3,700 tok/s。
- 同一对话的下一轮只重读 34–50 个 token(对话缓存),decode 81–90 tok/s。
- 工具调用和图片请求:PASS。
注意
- 只支持正好两张卡的层切分。不能和
--batch、--peer-device、--trim-stage-weights一起用。只能单对话(我现在的用法也只有单对话所以对我没影响) - 需要 KV streaming(配置里有
--kv-resident)。setup 在CONTEXT≥ 65536 且内存够时会自动打开;WSL 下 KV streaming 是关的,所以 DP 也开不了。 - P2P:我的卡开了 P2P。GeForce 的官方驱动一般没有 P2P,DP 照样能跑,只是卡间同步要经过内存中转,速度我没测。
-
-
-
-
@gao-Gao 是的 少部分的专家
decode 牺牲一点点 但是可能是我的epyc cpu 所以牺牲比较少
不同平台需要测试已经有第2版了 https://lcz.me/topic/2691
但是你的问题, 其实就是跟 https://lcz.me/topic/2671/8?_=1793281386554 用同一个方法
-
-
版主审定:本帖设为优秀,作者 +3 积分奖励,继续加油!