全部產品
Search
文件中心

Container Service for Kubernetes:GPU節點調度屬性標籤說明及標籤值的切換方法

更新時間:Jun 19, 2024

安裝雲原生AI套件的調度組件ack-ai-installer之後,您可以為GPU節點打上調度屬性標籤,協助GPU節點啟用共用GPU調度、GPU拓撲感知調度等能力。本文介紹GPU節點調度屬性標籤及如何切換標籤的值。

GPU節點調度屬性標籤說明

標籤ack.node.gpu.schedule

分類

標籤值

是否可以切換到其他標籤值

說明

獨佔GPU調度

default

可切換至:

  • 共用GPU調度標籤值。

  • GPU拓撲感知調度標籤值。

  • 節點開啟獨佔GPU調度能力,表示該節點以單個GPU卡為最小劃分單元,為Pod分配GPU資源。

  • 該標籤與節點中未打ack.node.gpu.schedule:default標籤行為一致(添加到ACK叢集的GPU節點預設開啟獨佔GPU調度)。

  • 如果某個節點已經擁有標籤ack.node.gpu.schedule(比如開啟共用GPU調度能力),且需要該節點恢複獨佔GPU調度能力,只能通過為節點打上標籤ack.node.gpu.schedule:default實現。刪除節點標籤ack.node.gpu.schedule並不能恢複節點獨佔GPU調度能力。

共用GPU調度

cgpu

可切換至:

  • 獨佔GPU調度標籤值。

  • GPU拓撲感知調度標籤值。

core_mem

可切換至:

  • 獨佔GPU調度標籤值。

  • GPU拓撲感知調度標籤值。

share

可切換至:

  • 獨佔GPU調度標籤值。

  • GPU拓撲感知調度標籤值。

  • cgpu。

  • core_mem。

  • 節點開啟共用GPU調度能力。

  • 節點不安裝cGPU隔離模組。

  • Pod僅申請GPU顯存資源,一張卡上多個Pod實行算力共用策略。

GPU拓撲感知調度

topology

可切換至:

  • 獨佔GPU調度標籤值。

  • GPU拓撲感知調度標籤值。

  • 節點開啟GPU拓撲感知調度能力。

  • 節點仍以單個GPU卡為最小劃分單元,為Pod分配GPU資源。每個Pod分配到的GPU卡的數量考慮了GPU卡之間的通訊頻寬。

動態劃分MIG

mig

不可切換。

  • 節點開啟MIG能力。

  • 節點按最大支援MIG執行個體數上報MIG資源,每個Pod的Container最多僅能夠申請1個MIG資源。

  • 開啟節點MIG能力涉及修改節點硬體屬性,只能通過移除MIG節點池,再加入其他節點池方式完成。不能使用kubectl label切換節點標籤值到其他GPU調度策略。

標籤ack.node.gpu.placement

分類

標籤值

是否可以切換到其他標籤值

說明

共用GPU調度

spread

可切換至:binpack

  • 該標籤僅在節點開啟共用GPU調度能力的情況才有效。

  • 當節點上存在多張GPU卡時,該策略能夠允許申請GPU資源的Pod打散在各GPU上。

binpack

可切換至:spread

  • 該標籤僅在節點開啟共用GPU調度能力的情況才有效。

  • 當節點上存在多張GPU卡時,該策略能夠允許申請GPU資源的Pod先佔滿一張GPU卡,再佔用另一張GPU卡,避免資源出現片段。

  • 在開啟共用GPU調度情況下,GPU節點上如果沒有ack.node.gpu.placement標籤,那麼調度器將使用binpack策略為Pod尋找節點上的GPU卡資源。

標籤值切換

使用kubectl label nodes或通過控制台節點標籤管理功能切換標籤值存在的問題

當一個GPU節點從一種GPU資源調度能力A切換到另一種GPU資源調度能力B時,直接使用kubectl label nodes命令切換節點GPU調度屬性標籤值,或在Container Service管理主控台節點頁面使用標籤管理功能切換節點標籤,會引發以下問題。

  • 該GPU節點上可能還存在使用GPU資源的應用,這些應用是以A方式在申請GPU資源。節點的能力由A切換到B以後,調度器維護該節點GPU資源的賬本也會發生變化,導致節點上已經申請GPU資源的應用被遺漏。此時,調度器對該節點上的GPU資源賬本與節點上實際分配GPU資源的情況不一致,導致GPU應用之間相互影響。

  • 某些能力是需要在節點上設定一些配置,當使用kubectl label nodes或通過控制台節點標籤管理功能切換節點標籤值時,系統並不會重設節點上先前的配置,可能造成GPU節點啟用的新的GPU資源調度能力失敗。

基於以上問題,強烈建議您使用節點池劃分GPU資源調度能力

基於節點池劃分GPU資源調度能力

假設現在您的一個叢集需要同時使用GPU資源調度能力中的“共用GPU調度(僅顯存隔離)”和“共用GPU調度(顯存隔離和算力限制)”。那麼可以在這個叢集中建立兩個節點池:

  • 節點池A:用於管理僅支援顯存隔離的節點。

  • 節點池B:用於管理支援顯存隔離和算力限制的節點。

2.png

同時如果一個GPU節點需要從一種GPU資源調度能力(例如上面的A)切換到另一種GPU資源調度能力(例如上面的B),需要將該節點從一個節點池(節點池A)中移除,然後再將該節點添加到另一個節點池(節點池B)中。詳細操作,請參見移除節點添加已有節點

手動切換節點GPU資源調度能力

除了基於節點池劃分GPU資源調度能力以外,您也可以手動切換。手動切換步驟比較複雜,下面是節點狀態流轉及操作,包括:

  1. 節點下線:先將節點置為不可調度,不讓節點接收新的Pod。

  2. 排空節點:排空節點上的已有運行Pod。

  3. 登入節點進行重設操作:登入到節點,進行重設操作。重設操作因不同的標籤值而有所不同。詳細資料,請參見標籤配置重設

  4. 切換節點標籤:進行重設操作以後,可以使用kubectl label給節點打上對應標籤。

  5. 節點上線:標籤打完後,上線節點。

3.png

標籤配置重設

分類

標籤

切換到其他標籤之前需要的節點重設操作

共用GPU調度

ack.node.gpu.schedule=cgpu

bash /usr/local/cgpu-installer/uninstall.sh

ack.node.gpu.schedule=core_mem

bash /usr/local/cgpu-installer/uninstall.sh

相關文檔

GPU節點卡型屬性標籤基本資料以及如何使業務運行或不運行在指定卡型上。詳細資料,請參見GPU節點卡型屬性標籤