世界太吵,來原聲聽播客

umarjamilai

大模型推理卡頓的真兇不是算力不足,而是GPU一直在等數據

H100算力是內存帶寬的600倍,解碼階段每步只產一個token卻要搬完整KV緩存,GPU大部分時間不在算數據,而在等數據搬運完成。

分布式訓練GPU並行MoE注意力機制顯存優化大模型工程
這是一堂從零手寫分布式訓練框架的硬核工程課,面向想真正搞懂GPU通信和並行機制數學原理的人,不是泛泛的AI科普。

核心論點 · 點時間戳可跳到原聲

3:06

AI時代該學的不是技能,而是解題力

當coding agent幾乎能做所有具體任務時,作者認為還值得學的不是某個框架或模型細節,而是「如何面對模糊、困難、答案不確定的問題並把它解決掉」。這種能力建立的是self-trust——下次遇到更大的難題時敢於動手。這也是整個視頻的設計邏輯:不是教DeepSeek的架構本身,而是通過拆解一個極難的問題來訓練解決問題的能力,這比記住任何具體API都更持久。

19:22

可變長度的token遷移,得靠兩輪通信

專家並行下,各GPU間要互相發送多少token是動態的、事先不知道。標準all-to-all要求預先分配好固定大小的接收緩衝區,沒法直接用。解決辦法是拆成兩步:第一輪all-to-all只交換元信息——「我要發給你多少個token」「我要收你多少個」;確定好大小之後,第二輪才真正搬運token本身。多出來的這一輪通信,是為了讓一個為固定長度設計的通信原語,能夠處理分布式MoE裡天然不固定的流量。

1:31:34

RoPE的設計漏洞被模型反向利用

RoPE本意是只編碼token間的相對距離,讓完成多次旋轉的高頻維度幫助區分鄰近token。但那些轉不完一整圈的低頻維度,其旋轉角度會隨位置單調遞增、永不重複,模型發現這個規律後,會主動學會用它來推斷自己在序列中的絕對位置——儘管設計者根本不想讓它這麼用。作者的結論是:深度學習的通病是,只要存在可利用的偏差,模型一定會不擇手段地去利用它來降低損失。

2:34:44

算力是帶寬的600倍,解碼被晾著等數據

H100的計算吞吐量是2,000 teraflops,但內存帶寬只有3.35 TB/s,兩者比值約600:1,意味著GPU每加載一個字節就要配上約600次運算才能讓算力不被浪費。自迴歸解碼時每一步只產出一個token,卻要把整份KV緩存搬運一遍,實際運算量遠低於這個閾值,結果是GPU的計算單元大量空閒、真正卡脖子的是數據搬運而非算力——這正是MLA、KV壓縮等一整套優化方法要解決的問題。

6:52:30

零氣泡流水線:權重梯度不卡關鍵路徑

反向傳播裡,計算輸入的梯度必須傳給上一層,是「關鍵路徑」上的硬需求;但計算權重梯度不影響後續設備的反向傳播,完全可以往後拖。零氣泡流水線正是利用這一點:把這兩種梯度計算拆開,優先處理關鍵路徑上的部分,再用權重梯度去填滿GPU原本空閒的時間。DeepSeek的dual pipe方案把這個思路做成對稱設計,用兩份模型副本從兩端注入microbatch,把流水線氣泡壓到最小。

8:54:55

物理網絡速度反向決定並行策略怎麼擺

流水線並行只需要相鄰GPU之間傳一層的激活值,數據量通常遠小於模型總參數,所以可以放心跑在跨節點的慢速以太網上;但數據並行要同步整個梯度向量,體量等於全部參數,必須放在節點內NVLink這種快速鏈路上。這個物理約束反過來決定了設備網格(device mesh)裡各維度該怎麼排:通信需求最高的放在stride最小的內層,需求最低的放外層——不是先設計好並行策略再找硬件遷就,而是硬件拓撲在倒逼算法設計。

10:16:21

FSDP:用通信量換顯存,撐起萬億參數

DDP要求完整模型能塞進單個GPU,這對萬億參數模型行不通。FSDP的做法是把每層參數均勻分片到所有GPU上:前向進入某層前,先用all-gather把完整參數臨時拼回來算完就丟掉;反向同理,算完梯度只用reduce-scatter留下自己那一片。連優化器狀態也只存本地分片這一份。代價是通信量顯著上升,換來的是單卡顯存需求大幅下降——這是一筆「用通信換內存」的明確交易,而非免費午餐。

17:07:51

專家選擇路由會偷看未來,推理時露餡

如果讓expert去挑token(expert choice)而不是讓token去挑expert,訓練時每個expert能看到同一批次裡所有token,從而學到「有D後面常跟cat」這類序列關聯——但這類信息來自同批次裡排在後面的token,等於讓模型在訓練時偷看了不該看的未來信息。真到推理階段,這種跨token的全局視野不存在了,模型表現會明顯跳水。這是作者點名的致命設計缺陷,也是為什麼主流系統寧可用更樸素的token choice路由。

原話 · 已逐字校驗

the only thing that is worth learning in life is how to take a hard problem and overcome it

人生唯一值得學的,就是如何面對難問題、克服它

the average of the average is not the average value

平均值的平均值不是平均值

講者12:01

you are still moving a large quantity of memory to produce this one single embedding and that's why we are underutilizing the GPU and this is why we say it's IO bound

你仍然在加載大量內存來生成這一個embedding,這就是為什麼我們沒有充分利用GPU,這就是為什麼我們說這是IO bound

But this one is not necessary to go back in the backward pass because it no other gradients depends on this one

但這個不是必需的,在反向傳播中沒有其他梯度依賴於它

these two GPU they only need to share the output of one layer and and send it to the next one. But the output of one layer is just the activation of one layer and that may be much smaller than the total parameter of the model.

兩個GPU只需要共享一層的輸出,並把它發送給下一個。而一層的輸出只是一層的激活值,這可能比模型的總參數小得多。

主講人8:54:55

we can run the optimizer step only on the shard or the piece of parameters that we have locally in this current rank

優化器步驟只在本地參數分片上執行

it's a kind of leaking future information inside of previous tokens which should never happen in an autogressive language model

這等於在前面的token內部洩露未來信息,在自迴歸語言模型裡不應該發生

數字與實體

H100計算吞吐量2,000 teraflops2:34:44
算力與帶寬比值約600倍2:34:44
MLA壓縮後的KV維度5123:37:55
RoPE的theta_base10,0001:07:05
預訓練最大序列長度4,0001:15:17
為攤銷開銷而避免的通信啟動次數100萬次11:29
MFU優秀水平50%以上15:48:34

術語

RoPE旋轉位置編碼
用複數旋轉編碼token間相對距離,使模型能外推到更長序列
MLA多頭潛在注意力
把KV向量壓縮後再存緩存,推理時投影回原維度,省顯存不砍頭數
FSDP全分片數據並行
把參數、梯度、優化器狀態都分片到各GPU,用通信換顯存
KV cache鍵值緩存
解碼時緩存已算出的key/value,避免重複計算,但佔用顯存且需加載
MFU模型算力利用率
實際有效算力佔硬件峰值算力的比例,衡量訓練效率的通用指標
device mesh設備網格
把GPU組織成多維座標系統,自動決定誰和誰通信、用什麼方式通信

收聽指南

誰該聽

正在從零搭建分布式訓練框架的ML infra工程師,想搞懂RoPE、MLA、FSDP、流水線並行背後數學原理的人。

可跳過

開篇關於學習方法論的發刊詞(00:04-09:13)偏勵志,只想看技術細節的可以直接跳到架構部分。