GPU 資源排程:讓訓練與推論共用叢集
訓練與推論搶卡是常見痛點。這是可運作的分時與優先權設計。
多數團隊的 GPU 都不夠用,訓練任務與線上推論會互相搶。放任不管的結果通常是:某次訓練把卡吃光,線上服務跟著掛掉。
解法有三個層次:物理隔離、時間分割、以及優先權搶佔。
層次一:物理隔離(最簡單也最可靠)
把卡分成兩池:線上池與訓練池。線上池的卡絕不給訓練用。缺點是離峰時線上池閒置,但換來的穩定性通常值得。
層次二:時間分割
# 用排程把訓練限制在離峰時段
# 0 2 * * * 只在凌晨 2 點到 6 點跑訓練
0 2 * * * /usr/local/bin/train.sh --deadline 06:00
層次三:優先權與搶佔
- 線上推論的優先權最高,永遠不被搶佔。
- 訓練任務可被搶佔,但必須支援檢查點續跑。
- 批次推論介於兩者之間。
# 訓練腳本必須能優雅地被中斷
import signal
class Preemptible:
def __init__(self): self.stop = False
def handle(self, *_): self.stop = True
p = Preemptible()
signal.signal(signal.SIGTERM, p.handle)
for step, batch in enumerate(loader):
train_step(batch)
if step % 50 == 0 or p.stop:
save_checkpoint(step)
if p.stop:
sys.exit(0) # 下次從檢查點續跑監控使用率
排程的前提是知道實際使用率。多數團隊會發現訓練池的利用率其實只有三成——問題不是卡不夠,是排程沒做好。
# 每分鐘取樣,區分「配置給誰」與「實際使用率」
nvidia-smi --query-gpu=index,utilization.gpu,memory.used,memory.total \
--format=csv,noheader,nounits -l 60配額與公平性
- 每個團隊或專案有 GPU 時數配額,用完要申請。
- 長時間佔用不釋放的互動式工作階段要自動回收(例如閒置兩小時)。
- 排隊要透明:讓大家看得到目前佇列與預估等待時間。
互動式開發用的 Jupyter 工作階段是最大的浪費來源。人下班了、卡還佔著。務必設定閒置自動回收,並事先公告規則。
訂閱後繼續閱讀全文
本篇為訂閱者專屬內容。訂閱後可取得下列權限:
- 解鎖全部內容權限
- 閱讀不限篇數
- 全站移除廣告
月卡
NT$240
開通 30 天
一次付清,開通 30 天
季卡
NT$620
開通 90 天
一次付清,開通 90 天,每天約 NT$7
年卡
NT$2,160
開通 365 天
一次付清,開通 365 天,每天約 NT$6
一次性付款,付款成功後立即開通,到期自動結束,不會再次扣款,也不需要取消訂閱。
立即訂閱
金額均為新臺幣(TWD),即實際扣款金額,不另收手續費
支援信用卡 · Apple Pay · Google Pay · WebATM · ATM 轉帳
購買須知與退款政策