AI-LECTURER 速報課|2026-10-10|約 25 分鐘

GPU 不夠用怎麼分?Ai2 把「搶位置」改成「記帳預算」

取材:Impactful scheduling for GPU clusters(Hugging Face Blog)
📍 真實場景
雅婷,一間 AI 研究機構的基礎設施工程師,負責管理一座有上千張 GPU 的叢集

週五晚上,她正要處理一台待維修主機,卻發現上面跑著好幾個「不可被打斷」的訓練工作

😖 卡住的地方:研究團隊每個人都把自己的工作標成最高優先權,沒人肯讓位。她只能一個個傳訊息去求人關掉,整晚的工單都花在協調上,卻說不清楚誰的工作才真正重要
💡 這課帶你看 Ai2 如何把這種天天吵架的流程,變成一套透明的「預算+公平分配」制度,並親手模擬兩種制度的差別

🧭 這到底是什麼(白話版)

Ai2(艾倫人工智慧研究所)內部有一支 AI 基礎設施團隊,要管理數千張 NVIDIA 的 H100、B200、B300 GPU顯示卡晶片,原本畫圖用,現在是訓練 AI 的主力運算硬體,分成 88 到 1024 張不等的多個叢集,服務約 150 位研究員。這些叢集主要跑大型的 分散式訓練把一個超大的訓練工作切開,同時交給很多張 GPU 一起算。

問題在於需求遠大於供給:任何時刻,大家提出的需求量都是現有 GPU 的 2 到 3 倍。換句話說,每一個 GPU 小時,都有 2 到 3 個研究工作在搶。

他們原本用「優先權排程給每個工作標上高、中、低等級,等級高的先拿到資源」,還允許工作選擇「不可被搶佔」。結果出現兩種怪現象:有人佔著 GPU 不放(squatting),掛一個什麼都不做的工作,等需要時再接手;還有「優先權通膨」,最後 100% 的工作都標成 HIGH,低優先權的工作完全分不到 GPU。

於是他們換成新系統:GPU 時間預算每個專案每段時間可以使用多少 GPU 小時,像零用錢一樣先分配好、階層式公平分配資源不夠時,依事先約定的比例分,而不是誰喊得大聲誰拿走,再加上一份時間切片契約。結果是,「每個專案該拿多少 GPU 時間」從一件件臨時處理的維運工單,變成透明的行政預算流程。

🎯 為什麼值得你花時間

把吵架搬到對的地方以前爭議出現在維運現場:值班工程師要一個個協調誰先關機。現在爭議變成預算會議,在分配預算時一次講清楚誰重要,而不是每天用優先權標籤暗中角力。
讓標籤不再通膨優先權是免費的,所以人人都會標到最高。預算是有限的,用掉就沒有,所以大家會自己權衡哪個工作值得花。這種「有成本的信號」才不會被濫用。
先看對指標Ai2 把 GPU 管理分成四層:可用度(硬體是否健康)、佔用率(可用時間有多少被分配給工作)、影響力(最有價值的工作是否被選中)、使用率(工作期間實際用了多少算力)。這篇文章專攻第三層:影響力。

⚙️ 它是怎麼運作的

1
量出供需落差先承認事實:需求是供給的 2 到 3 倍,所以一定有人要等,問題只在於「誰等、為什麼」。
▼
2
診斷舊制度的病徵舊制允許工作選擇不被搶佔,且優先權不用付代價。於是出現佔位、優先權通膨,值班工程師的時間又被協調關機吃掉。
▼
3
給每個專案一份 GPU 時間預算用「GPU 時間」這個共同貨幣,把研究專案值得多少資源,變成可以討論、可以審核的數字。
▼
4
階層式公平分配預算依組織階層往下分。有人暫時沒用到的額度,不會白白閒置,而是依比例讓給其他有需求的人。
▼
5
時間切片契約工作使用 GPU 時要遵守約定的切片規則,使系統能預期何時可以收回資源。從舊制的痛點反推,這是為了不再靠人工協調「不可搶佔」的工作。
優先權排程 vs. 預算+公平分配
面向舊:優先權排程新:預算+公平分配
資源怎麼決定工作自己標優先權事先分配 GPU 時間預算
標籤成本免費,所以會通膨有限額,用掉就沒有
爭議發生處每天的維運工單預算編列的行政流程
可預期性低,要靠人協調關機較高,依契約切片

🔍 程式碼漫遊(點有 ● 的行看白話講解)

這是「加權公平分配」的概念版:每隊依預算比例分 GPU,吃不完的額度會讓給還有需求的隊伍。這是用來理解原理的簡化版本,不是 Ai2 的實際程式。

●def fair_share(budgets, demand, supply):
💬 輸入三樣東西:各隊預算、各隊需求、叢集總 GPU 數
● got = {t: 0 for t in budgets}
💬 一開始每隊都拿到 0 張
● left, active = supply, set(budgets)
💬 left 是還沒分出去的 GPU;active 是需求還沒滿足的隊伍
● while left > 0.01 and active:
💬 只要還有 GPU 剩、還有隊伍想要,就繼續分
● total = sum(budgets[t] for t in active)
💬 只計算還想要的隊伍的預算總和,當作分母
● if total == 0: break
💬 防呆:預算全為 0 就停止,避免除以零
● used = 0
💬 記錄這一輪實際發出多少
● for t in list(active):
💬 逐隊發放
● give = min(demand[t] - got[t], left * budgets[t] / total)
💬 重點行:取「還缺多少」與「依預算比例該得多少」的較小值,所以不會多給,也不會超發
● got[t] += give; used += give
💬 更新該隊已拿到的量與本輪發放量
● if demand[t] - got[t] < 0.01: active.discard(t)
💬 重點行:需求滿足的隊伍退出,下一輪它沒用到的份額自動流向別人,這就是「不浪費閒置」
● left -= used
💬 扣掉本輪發出的量
● if used < 0.01: break
💬 如果這輪幾乎沒發出任何東西就收工,避免無窮迴圈
● return got
💬 回傳每隊最終分到的 GPU

🛠️ 動手做:親手模擬:優先權通膨 vs. 預算分配

  1. 點「模式 A」:4 個團隊各要 60 張 GPU,叢集只有 100 張。觀察每一輪大家如何把等級往上調,最後所有團隊都變成「高」,優先權失去意義。
  2. 接著在模式 B 調整四隊的預算(例如 40/30/20/10),按「套用預算」,看看每隊分到多少。
  3. 試著把某隊預算設成 0,或把四隊都設成相同值,觀察閒置的 GPU 與分配結果如何改變。
  4. 想一想:在模式 B 裡,誰來決定預算數字?這個決定發生在哪個場合?
👇 下面是活的,直接操作

🧠 工程思維透鏡(資深工程師看到的是什麼)

🔭 為什麼「免費的優先權」一定會通膨?
當一個信號不需要付出代價,每個人的最佳策略都是把它用到最大。個人看似理性,整體卻讓信號失去資訊量,最後 100% 都是 HIGH。工程上的解法不是呼籲大家自律,而是改設計:讓信號變成有限額的資源,把成本內建進機制。
🔭 把爭議從「維運」搬到「行政預算」,換到了什麼?
維運層的決策是在壓力下、逐案、由值班工程師臨場處理,既不透明也容易被人情左右。預算層則是週期性、集中、有明確責任人的決策。取捨是你得多設一道行政流程,但換來的是可追溯與可預期。這是用「事前慢」換「事後不混亂」。
🔭 為什麼要先分清楚可用度、佔用率、影響力、使用率四層指標?
如果不分層,看到「GPU 都在忙」就以為管理得好。但忙的可能是佔位的空工作。這四層像金字塔,下層是基礎、上層才是價值。文章聚焦影響力,意思是:資源都被用了還不夠,要確保被用在最有價值的工作上。指標若選錯,優化再努力也是朝錯的方向。

📝 隨堂考(點選答案,立即回饋)

Q1. Ai2 觀察到舊的優先權排程出現了什麼現象?
✅ 這就是「優先權通膨」:標籤不用付代價,最後人人都標最高,低優先權工作被餓死。
Q2. 所謂 GPU「squatting」指的是什麼?
✅ 研究員為了能即時除錯,會先停著空工作佔位,這是舊制度逼出來的行為。
Q3. 新系統相較於舊系統,最核心的轉變是什麼?
✅ 文章明講,這讓「每個專案該拿多少」從臨時維運工作,變成透明的行政預算流程。
Q4. 在文中的四層指標金字塔裡,這篇文章主要討論哪一層?
✅ 文章明說「This post is about improving the impact of our scheduling decisions」,也就是最有價值的工作是否被選中。

🃏 翻牌記憶卡(先想答案,再點開對答)

Ai2 的四層指標金字塔由下到上是?點我翻面
可用度 → 佔用率 → 影響力 → 使用率。
什麼是優先權通膨?點我翻面
優先權標籤沒有成本,使用者都標成最高,最後 100% 的工作都是 HIGH,低優先權被餓死,排程失去區分力。
舊制度還造成了什麼維運負擔?點我翻面
工作可選擇不被搶佔,使值班工程師把多數工單時間花在協調關掉有維護問題主機上的不可搶佔工作。
新系統由哪三個部分組成?點我翻面
GPU 時間預算、階層式公平分配、時間切片契約。
為什麼預算比優先權更能抑制濫用?點我翻面
預算有限、用掉就沒有,把成本內建進信號;優先權免費,理性的人會用到最大。

✅ 離開前自測(全勾=這課真的學會了)

0%