在 NVIDIA,我們以精準和創新解決復雜的基礎設施挑戰為豪。當 Volcano 在其 NVIDIA DGX 云調配的 Kubernetes 集群中面臨 GPU 利用率不足時,我們介入提供了一個不僅達到而且超過預期的解決方案。
通過將先進的調度技術與對分布式工作負載的深入理解相結合,我們實現了約 90% 的 GPU 占用率,遠高于 80% 的合同目標。下面詳細介紹了問題、我們的方法和結果。
問題:GPU 碎片化和調度效率低下
DGX 云 Kubernetes 集群由數千個 GPU 組成,每個 GPU 均配備多個 NVIDIA L40S GPU。該集群支持多種工作負載:
- 多節點、多 GPU 分布式訓練作業
- 高吞吐量 AI 模型的批量推理(Batch Inferencing)
- GPU-backed 數據處理工作流
- 用于開發和分析的交互式 Notebook
盡管有可靠的硬件,但該集群仍存在 GPU 碎片化問題,導致節點被部分占用,無法用于大型作業。這種效率低下的情況又因 Volcano 調度程序 它使用了一個分組調度算法。
如果不進行干預,我們可能會違反合同協議,維持至少 80% 的 GPU 占用率。這將導致集群容量降低,因為未使用的資源被其他團隊回收。
主要挑戰
實施此解決方案需要克服兩個主要障礙:
- 分組調度的“全無”方法:需要跨節點使用多個 GPU 的分布式作業會無限排隊,除非同時提供所有必要資源。這導致了瓶頸和任務執行延遲。
- 隨機放置導致的碎片化 :根據簡單的啟發式或隨機選擇將工作負載分配給節點,通常會使 GPU 以碎片化狀態分散在節點上(圖 1)。
解決方案:將 bin-packing 與 gang 調度集成
為了應對這些挑戰,我們通過將 Bin-packing 算法集成到 Volcano Scheduler 中,實施了增強型調度策略。這種方法專注于整合工作負載,以更大限度地提高節點利用率,同時讓其他節點完全自由地用于更大的作業。
技術實施
我們解決 GPU 碎片問題的方法涉及三個關鍵組成部分:
- 工作負載優先級 :資源按重要性降序排列:GPU、CPU 和內存。適合傳入工作負載的節點根據資源需求 (例如選擇器和親和性規則) 入圍名單。
- 通過 bin-packing 優化放置 :部分占用的節點根據其當前的利用率水平(從低到高)進行排序。工作負載首先放置在空閑資源最少的節點上,確保節點得到充分利用,然后再轉移到其他節點。
- 群組調度集成:增強型調度程序保留了 gang scheduling 的“全有或全無”原則,但增加了智能,可根據資源整合優先安排工作負載放置。
這些點使用以下 Volcano Scheduler 配置啟用,從而實現高效的工作負載放置并優先考慮節點利用率。
volcano - scheduler.conf: | actions: "enqueue, allocate, backfill" tiers: - plugins: - name: priority - name: gang enablePreemptable: false - name: conformance - plugins: - name: drf - name: predicates - name: proportion - name: nodeorder - name: binpack arguments: binpack.weight: 10 binpack.cpu: 2 binpack.memory: 2 binpack.resources: "nvidia.com/gpu" binpack.resources.nvidia.com / gpu: 8 binpack.score.gpu.weight: 10 - plugins: - name: overcommit - name: rescheduling |
示例場景
為說明解決方案的有效性,我們考慮以下場景:
初始狀態
兩個節點—Node A 占用兩個 GPU 和空閑的 Node B—接收到需要兩個 GPU 的新工作負載。
默認群組調度
例如,工作負載隨機放置在 Node B 上,使兩個節點都被部分占用。
因此,集群包含的部分占用節點比完全空閑的節點多。圖 3 顯示,只有 18 個節點 (全部 4 個 GPUs) 可以訪問,但大約有 115 個節點 (全部 3 個 GPUs) 無法用于每個節點需要 4 個 GPUs 的訓練作業。
當我們檢查部分占用節點的分布時,這種碎片化的影響變得更加明顯。
解決方案
工作負載放置在 Node A 上,完全使用其四個 GPU,同時讓 Node B 完全空閑以用于未來的大規模作業。
圖 5 顯示 GPU 部分占用的節點 A 和 B 接收到需要兩個 GPU 的新工作負載,并使用默認的 gang scheduling 機制將其放置在節點 B 上,從而降低了兩個節點的容量。
因此,集群的可用節點數超過已占用的節點數。圖 6 顯示有 214 個節點,所有 4 個 GPU 可用,需要 4 個 GPU 的訓練作業可以輕松使用。
圖 7 顯示大約有 9 個節點和 3 個空閑的 GPU。
這種戰略性布局顯著減少了分散性,并提高了大型培訓工作的資源可用性,尤其是對于使用 GPU、DPU 和其他專用硬件的培訓工作。
取得的成果
將 Bin-packing 集成到 Volcano Scheduler 后,GPU 集群的性能發生了變化:
- 提高資源可用性 :完全免費節點 (全部四個 GPU 均可用) 的數量有所增加,從而實現大規模訓練作業的無縫調度。
- 提高 GPU 占用率 :GPU 平均利用率上升至行業領先的 90%,遠遠超過 80% 的合同要求。
- 提高成本效益 :通過優化資源利用率,我們避免了容量縮減,并保持了對分配的集群資源的完全訪問權限,而不會產生額外的間接費用。
- 跨工作負載的可擴展性:事實證明,該解決方案不僅適用于分布式訓練作業,而且還適用于批量推理和 GPU 支持的數據處理任務。
最后,整個集群的平均占用率約為 90%,遠遠超出了資源治理團隊 80% 的標準。
對分布式系統的更廣泛影響
本文重點介紹了深思熟慮的調度策略如何解決多節點多 GPU 集群中的普遍挑戰。
- 主動式資源管理可防止瓶頸 :通過預測碎片化問題并通過優化的放置算法解決這些問題,組織可以避免代價高昂的延遲和利用率不足。
- 成本感知工程可提升投資回報率 (ROI) : 高效使用現有基礎架構可減少額外硬件投資需求,同時更大限度地提高性能。
- 靈活調度可適應不同的工作負載 :Bin-packing 算法的集成展示了 Volcano 等調度器如何在不徹底檢查現有系統的情況下適應特定的工作負載需求。
相關資源
- 技術博客:使用 NVIDIA NeMo Customizer 輕松微調和對齊 LLMs
- 技術博客:在 NVIDIA GPU 上加速 Apache Spark ML,無需更改代碼
- 技術博客:掌握 LLM 技術: LLMOps
- 論壇:在我們的 GPU Cloud 論壇中深入了解與加速計算和優化方法相關的主題。
?