Qwen3.8 FlashNext運算組成 A卡與N卡在Strata對應的運算單元
-
Flash-Next 在 GPU 上到底在算什麼
基本概念
Qwen3.8-Flash-Next 是一個 125B 的 MoE(混合專家)模型。可以把它想像成一位超顧問:每處理一個字,都要走一趟「工廠」,廠內有五個工位。GPU 的硬體則分成兩種設備:矩陣專算機(tensor core / matrix core,只認 FP16/BF16/FP8 這幾種格式的整塊矩陣乘)和萬用計算台(CUDA core / wave ALU,什麼都能算,包括解壓縮)。
五個工位
① 專家 FFN——主事件,佔 60-70%
MoE 的本體:模型沒有一個巨大的前饋網路,而是有幾百間專家工作室(code 專精、中文專精、數學專精……)。每個字進來,只點燃其中少數幾間(比如 128 間開 8 間)。每間工作室做的都是標準動作:輸入 × 權重矩陣 A → 激活 → × 權重矩陣 B,兩次大矩陣乘。
關鍵:這 125B 參數絕大多數是這些專家的權重,而且為了塞進顯存都壓縮(量化)成 4/8-bit 存著。壓縮格式矩陣專算機不認,必須先在萬用計算台上解壓回 16-bit 再算——所以整個主事件全走萬用計算台,NVIDIA 的 CUDA core、AMD 的 wave ALU 都一样,tensor core 完全幫不上。
② 密集 16-bit 層——固定小站,佔 10-15%
每個字都必經的「小工位」:router(總機,決定點燃哪些專家)、hyper-connection(層間資訊高速公路的切換)、PLE(位置查表)。它們體積小,所以不壓縮、保留完整 16-bit 精度——這正好是矩陣專算機吃的格式,所以這一站現代 GPU 都丟給 tensor core(NVIDIA)或調優 FP16 kernel(AMD)算。
③ QSA 評分——先看目錄,佔 15-30% 的一部分
模型讀到新的字,要回頭參考前文——但前文可能長達十幾萬字,逐字看太慢。QSA(稀疏注意力)=「先看目錄,再讀相關章節」:把前文切成一段段,快速給每段打個相關分數,只挑分數高的段落進入下一步精讀。這個「打分管」本身是小型矩陣乘:NVIDIA 用 TF32 tensor core(Ampere 起),AMD 在 RDNA4 用 matrix core(WMMA,快 7 倍),其他卡都用萬用計算台硬算。
④ Attention QK/PV + softmax——精讀相關段落,佔 15-30% 其餘
對挑出來的段落做三件事:QK=拿當前字的「問題」和每段落的「標籤」比對,算出每段多相關;softmax=把相關分數轉成加權比例(加總=1,像機率分布)——這步是純逐元素運算(max/exp/除),任何矩陣硬體都幫不上;PV=按比例把各段落的「內容」混合成當前字的記憶摘要。整段用 flash-attention 做法:段落切塊處理、中間結果放暫存器,顯存裡永遠不需要那張巨大的 T×T 比對表。
⑤ KV 讀寫 + 專家串流——物流,不佔算力但佔時間
KV cache=模型對已讀文字寫的「筆記」(每個字的 K/V 向量),存在顯存裡;專家權重太大裝不下顯存,要從記憶體/SSD 持續搬進搬出(串流)。這些是「搬東西」不是「算東西」,不花 FLOPs,但吃真實時間——decode 速度的瓶頸就是它(每生成一字都要翻一遍筆記、取一遍專家書)。
兩種工作模式
- Prefill(讀題):整段 prompt 一批處理,大矩陣乘火力全開→比的是算力(所以 tensor core 世代差在這裡顯現)
- Decode(寫答案):一次一字,每字都要把筆記和權重讀一遍→比的是頻寬(所以同級卡 decode 差距小,VRAM 容量和記憶體頻寬才決定生死)
一句話總結
這個模型的計算大頭(專家 FFN)是壓縮格式的,兩家 GPU 都只能用萬用計算台硬算;tensor core / matrix core 只服務小頭(密集層 + 稀疏注意力評分)。所以同價位的卡,prefill 差距看算力規格,decode 差距看頻寬和 VRAM 容量——規格表上的 tensor core TFLOPS 對這種 MoE 模型,沒有它看起來那麼決定性。
Strata最近爆火,最讓人興奮的是老卡也能跑頂級大模型
但老卡優化的進度怎樣呢?
以下是拆解原代碼比對各運算層對應的運算單元,以及github開源社群提出的PR待合併我標註#NVIDIA
組成 佔每 token 計算量 Volta(V100) Turing(RTX 20) Ampere(RTX 30) Ada(RTX 40) Blackwell(RTX 50) Expert FFN(量化 GEMM,O(T)) ~60-70% 純 CUDA core(dequant→FMAC) 同左 同左 同左 同左 密集 16-bit 層(hc/router/PLE,O(T)) ~10-15% FP16 Tensor Core(無 BF16,#655/#741 轉 FP16 救) 同左 原生 BF16 Tensor Core 原生 BF16/FP8 TensorCore 原生 BF16/FP8/FP4 Tensor Core QSA 評分(O(T²)) 剩餘15-30% 的一部分 FP32 SIMT warp kernel 同左(#742 加 FP32 tiled GEMM 救) TF32 Tensor Core scorer 同左 同左 Attention QK/PV + softmax(O(T²)) 15-30% 其餘 自訂 flash kernel,主要 CUDA core 同左 同左 同左 同左 KV 讀寫 + expert 串流 佔壁鐘時間 HBM / PCIe GDDR6 / PCIe GDDR6 / PCIe GDDR6(X) / PCIe GDDR7 / PCIe AMD
組成 佔每 token 計算量 RDNA1(RX 5000) RDNA2(RX 6000) RDNA3(RX 7000) RDNA4(RX 9000) Expert FFN(量化 GEMM,O(T)) ~60-70% wave ALU(dequant→FMAC) 同左+int8 片段走 dp4a 同左(WMMA 有 int8/int4 能力但 Strata 没用) 同左 密集 16-bit 層(O(T)) ~10-15% rocBLAS FP16 kernel(無 WMMA 硬體) #835 前 generic fallback;#835 後 rocBLAS 調優 FP16 kernel rocBLAS/hipBLASLt 調優 kernel 同左 QSA 評分(O(T²)) 剩餘15-30% 的一部分 FP32 default kernel FP32 default kernel(#849 pre75+DPP,bit-exact) WMMA 硬體閒置、pre75 可手動開(STRATA_ATTN_PRE75=1)但沒人驗證過 WMMA(opt-in,7.2-7.5x) Attention QK/PV + softmax(O(T²)) 15-30% 其餘 自訂 flash kernel,wave ALU 同左(shuffle/reduction 綁 LDS,#849 實測) 同左 同左 KV 讀寫 + expert 串流 佔壁鐘時間 GDDR6 / PCIe 同左 GDDR6 / PCIe GDDR6 / PCIe 看起來接下來github上PR更新的重點
查完了——沒變,兩張表不用更新:現況(剛查的)
- 最新版還是 v0.1.39(10/04 發布),沒有 v0.1.40
- 關鍵 PR 全部還是 open、未合併:
PR 內容 狀態 #835 RDNA2 FP16 in/out GEMM(prefill ~2x) open,可合併(clean) #849 RDNA2 pre75+DPP attention(bit-exact) open,可合併(clean) #741 Volta/Turing BF16→FP16 tensor core(2080 Ti +8-17%) open,有衝突(dirty)——落後 main,最難生 #742 Turing FP32 tiled QSA(2080 Ti +22-33%) open,可合併(clean) #854 雙卡 helper PCIe share 修復(6900 XT decode 40→66) open 看來近期更新優化會是在RDNA2與Turing等老卡,尤其是RDNA2會讓prefill翻倍(原本低到可憐)
維持觀察,等 v0.1.40 出來再更新表。 -