本課講 2018 年穀歌的一篇文章。Yanping Huang 和同事發明瞭 GPipe:把一個超大的模型切成幾段,分給幾塊顯卡,再讓它們像流水線一樣同時幹活。
學校洗衣房有 1 臺洗衣機、1 臺烘乾機和 1 張疊衣服的桌子。每一步都要 30 分鐘。
第 2 題裡,洗衣機洗完第 1 筐,要空等 1 個小時。答案在第 4 節揭曉。科學家訓練超大的 AI,用的正是這個洗衣房的辦法。
第 22 課我們發現:網絡越大,練得越多,本領就越強。可是網絡要放在顯卡裡練(第 8 課)。每塊顯卡有一塊內存,就像它的書桌。書桌上要擺下整個網絡,還要擺下練習時的草稿。網絡太大,書桌就擺不下。
第 8 課的 AlexNet 有大約 6000 萬個「旋鈕」,就已經要劈成兩半,交給 2 塊顯卡。本課 GPipe 練出的翻譯模型有 60 億個旋鈕,是 AlexNet 的 100 倍。
網絡是一層一層疊起來的,像一座積木塔。題目從第 1 層進去,一層一層往上算出答案。對完答案,電腦再從最後一層往回調旋鈕(第 1 課的訓練)。所以練習分兩趟:先往前算,再往回改。
最直接的辦法是:按層把網絡切成幾段,每段放一塊顯卡。比如一個 40 層的網絡,顯卡 1 管第 1–10 層,顯卡 2 管第 11–20 層,以此類推。
這很像接力賽:顯卡 1 算完一大批練習題,才能交給顯卡 2。下面是 4 塊顯卡的時間表。一行是一塊顯卡,一格是一段時間。塗色的格子在幹活,空格就是閒著。
| 時間 → | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 顯卡 1 | 一大批 | |||||||||||||||
| 顯卡 2 | 一大批 | |||||||||||||||
| 顯卡 3 | 一大批 | |||||||||||||||
| 顯卡 4 | 一大批 | |||||||||||||||
示意圖:只畫了「往前算」這一趟。「往回改」也一樣排隊,只是方向倒過來。
數一數空格:這張表一共 64 格,幹活的只有 16 格,閒著的有格。任何時候都只有 1 塊顯卡在幹活。買了 4 塊顯卡,卻只用上了大約 1 塊的力氣。
熱身題答案:90 分鐘,360 分鐘,180 分鐘。GPipe 用的就是洗衣房的辦法。它把一大批練習題切成很多小份,叫微批次(「微」就是很小)。顯卡 1 算完第 1 小份,馬上交給顯卡 2,自己接著算第 2 小份。這就像工廠的流水線:每個工位同時做不同的東西。
| 時間 → | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 顯卡 1 | 1 | 2 | 3 | 4 | 全部做完! 比不切的時候少用 9 格時間 | |||||||||||
| 顯卡 2 | 1 | 2 | 3 | 4 | ||||||||||||
| 顯卡 3 | 1 | 2 | 3 | 4 | ||||||||||||
| 顯卡 4 | 1 | 2 | 3 | 4 | ||||||||||||
示意圖:同樣 4 塊顯卡,同樣多的練習題,切成 4 小份。格子裡的數字是第幾小份。
原來要 16 格時間,現在只要 7 格。開頭時,後面的顯卡在等第 1 小份;結尾時,前面的顯卡沒活了。這些空格叫氣泡,像水管裡沒裝滿水的地方。
| 切成幾份 | 不切 | 4 份 | 8 份 | 16 份 |
|---|---|---|---|---|
| 4 塊顯卡閒著的時間約佔 | 75% | 43% | 27% | 16% |
論文發現:小份數量達到顯卡數量的 4 倍,氣泡就小到幾乎可以不管。不過不能切得太碎。每份太小,顯卡里大部分「同學」沒事幹,反而浪費。
最後一起改。每一小份對完答案,先記下要改的地方。所有小份做完,再一起改一次旋鈕。就像老師把 4 個小組的錯題合起來,統一講一遍。所以切不切小份,練出來的結果都一樣。
每段要差不多重。流水線跑多快,看最慢的那一段。所以切的時候,每塊顯卡的活兒要差不多一樣多。
往前算時,每一層都會算出中間結果。往回改時要用到它們,所以通常全部記在書桌上,就像草稿紙。網絡越大,草稿紙越多,書桌很快就堆滿了。GPipe 的辦法是:每一段只留下開頭那一份結果,段裡面的草稿都擦掉。往回改到這一段時,再從段開頭重新算一遍。
示意圖:綠色圓是每段開頭留下的結果,虛線圓是擦掉的草稿。往回改到第 3 段時,從 6 號重新算出 7 號和 8 號。
這樣大約要多算一遍「往前算」。可是書桌上省出一大塊地方,能放下更大的網絡。這叫用時間換內存。
靠流水線和「擦掉重算」,谷歌練出了兩個當時非常大的模型。
| 做什麼 | 有多大 | 考得怎麼樣 |
|---|---|---|
| 看圖認東西 | 5.57 億個旋鈕,名叫 AmoebaNet | 在第 8 課的 ImageNet 認圖考試裡,第一次就猜對的有 84.4%。 |
| 翻譯 | 60 億個旋鈕,128 層,是一個 Transformer(第 13 課) | 一個模型就能翻譯 100 多種語言。在大多數語言上,它比只練一種語言的翻譯模型翻得更好。 |
今天訓練聊天 AI,科學家會同時用好幾種分工辦法。按層切段、排成流水線就是其中一種。GPipe 是最早把這一招用好的論文之一。
流水線的排法後來改進了。比如「算完一份就馬上往回改一份」,草稿更少。2024 年 DeepSeek-V3 的 DualPipe 幾乎把氣泡擠沒了。「擦掉重算」成了訓練大模型的常用辦法,「最後一起改」也保留了下來。
誠實地說:GPipe 自己的排法已經不是最新的。可是想看懂新排法,得先看懂它。
12 張小卡片當作 12 道練習題。3 個人坐成一排:A「洗」,畫一個圓;B「烘」,在圓裡打勾;C「疊」,對摺放進盒子。用 3 種做法各玩一輪:① 一大批:12 張全做完,整疊交給下一個人。② 切成 3 小份:每做完 4 張就交出去,自己接著做下 4 張。③ 一張一張:每做完 1 張就交出去。
計時員喊「開始」,記下 C 等了幾秒才拿到第一張,和一共用了幾秒:
做完第 ② 種,在時間表裡填上第幾小份(1、2、3)。第 1 格已經填好。
| 時間 → | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| A 洗 | 1 | ||||
| B 烘 | |||||
| C 疊 |
你會發現:切得越碎,C 等得越短,總時間也越短。可是交接也花時間。有一個人特別慢,別人都得等他。顯卡也是這樣。
2 → ①加 4 → ②乘 3 → ③減 8 → ④乘 2 → ⑤加 5
→ ⑥除以 5 → ⑦乘 4 → ⑧減 11 → ⑨乘 3
A 從 2 開始算到第 9 步。B 再從後往前問:「第 8 步是幾?第 7 步呢?」一直問到第 1 步,就像「往回改」。A 每算一次,B 在旁邊畫一筆,最後數出一共算了幾次。草稿紙格子每輪不同:9 格,每步都能寫下;3 格,2 格只寫第 3、6 步,1 格臨時用;0 格,每問一次都從頭心算。
你會發現:格子越少,重算越多。只留每段開頭的答案,多算得不多,草稿紙卻省了一大半。這就是「用時間換內存」。
給家長和老師:本課講的是 Yanping Huang、Youlong Cheng、Ankur Bapna 等人(谷歌)2018 年的論文 GPipe: Efficient Training of Giant Neural Networks using Pipeline Parallelism(arXiv 2018,NeurIPS 2019)。論文把 L 層網絡按層切成 K 段放到 K 個加速器上,把小批次切成 M 個微批次依次流過各段,梯度同步累加後統一更新;並用重計算只保存段邊界激活。論文實驗主要用谷歌 TPU,講義統稱「顯卡」。
洗衣房時間、40 層切 4 段、兩張時間表、10 步草稿圖和「小組錯題」比喻都是示意。時間表只畫前向。「閒著的時間」按氣泡佔比 (K−1)/(M+K−1) 估算,K = 4。草稿紙遊戲是重計算的簡化類比,參考次數:9 格 9 次,3 格 15 次,0 格 45 次。「結果一樣」未計批歸一化(訓練時只用微批次統計量)。
想深入可看本站的 第 24 天中文導讀,代碼見開源項目 30u30 第 24 天目錄(英文)。
極客教育 jikejiao.com 原創講義 · 2026-10