機器學習系統與基礎設施
GPU 叢集排程(cluster scheduling)
共享的 GPU 叢集是一項昂貴資源,眾多團隊與作業在搶它,而分散式訓練作業有個怪脾氣:它要嘛一次拿到很多 GPU,要嘛這些 GPU 一張都沒用。排程器的工作就是決定哪些作業在何時拿到哪些 GPU,把它們塞好以維持整支機隊都忙,同時尊重每個作業「全有或全無」的需求。
最關鍵的要求是群組排程(gang scheduling)——一個多 GPU 作業的工作者必須一起被排上,否則先啟動的那些就會閒著等其餘的,所以排程器要原子性地一次配置整個群組。在此之上,它把作業裝箱(bin-pack)到各節點以最小化碎片,理想上還要拓樸感知地擺放一個作業的工作者,把它們緊靠在同一座 NVLink 島或同一條網路脊上,以最大化集合通訊頻寬。它必須在利用率、跨使用者的公平、優先權與搶佔、以及排隊之間取得平衡。搭配群組外掛的 Kubernetes、Slurm、以及各種自製的深度學習排程器都實作這些策略,有些還支援能放大或縮小 GPU 數的彈性作業。
排程不良會直接表現為閒置的 GPU——這是浪費資料中心最昂貴的方式。拓樸感知的擺放也會改變作業速度,因為散落在網路各處的群組,通訊遠慢於塞在單一高頻寬島上的群組。
又称
另见