在多核CPU的機器上,MPI(Message Passing Interface)進程通常會分配到不同的CPU核心,以實現CPU層面的平行處理,即CPU核並行化。但當這些MPI進程都嘗試使用CUDA核心來加速計算時,它們都會試圖獨佔GPU,繼而導致GPU資源的分配不均或低效使用。為此,您可以使用MPS(Multi-Process Service)管理來自多個NVIDIA GPU上啟動並執行CUDA應用或MPI進程的請求,實現GPU資源的共用。您可以在ACK控制台為節點池配置對應標籤,基於MPS模式實現GPU的共用調度和AI應用的顯存隔離。
功能介紹
基於MPI實現CPU核並行化,可以平衡CPU密集型任務之間的資源分派,確保多個計算任務能夠同時進行,從而加速整體的計算過程。但當使用CUDA核心加速MPI進程時,每個MPI進程所分配到的工作量可能無法充分利用GPU,導致雖然每個MPI進程運行速度有所提高,但整體GPU的使用效率很低。當單個應用程式發送給GPU的任務量不足,GPU存在閑置資源時,推薦您使用MPS,一種用於在NVIDIA GPU上運行多個CUDA應用程式的技術。
MPS允許不同的應用程式在同一個GPU裝置上並發執行,以提高叢集GPU資源的利用率。MPS通過Client-Server架構來實現了這種功能,確保了二進位相容性,即您無需對現有的CUDA應用程式進行重大改造。MPS的構成組件如下。
Control Daemon Process:負責啟動和停止MPS Server,並協調用戶端(Client)和MPS Server之間的串連,確保用戶端能夠順利接入到MPS服務中進行GPU資源的請求和使用。
Client Runtime:整合於CUDA驅動程式庫內部。開發人員無需對CUDA應用程式代碼進行重大改造即可使用MPS。當應用程式使用CUDA驅動進行GPU操作時,Client Runtime會自動處理與MPS Server的互動,從而使得多個應用程式能夠高效、安全地共用GPU。
Server Process:接收來自不同用戶端的請求,通過高效的調度策略將請求運行在一個GPU裝置上,從而實現了用戶端之間的並發性。
前提條件
已安裝共用GPU組件,且版本為1.9.13及其以上。具體操作,請參見安裝共用GPU調度組件。
使用限制
當一個節點開啟MPS顯存隔離能力後,某個應用被調度到該節點上時,Control Daemon Process進程會使用Exclusive GPU模式獨佔整個節點上的GPU。在MPS的Client-Server架構下,用戶端會統一向MPS Server申請所需的GPU資源。
MPS模式的共用GPU調度僅支援使用共用顯存模式,不支援共用算力模式。
操作步驟
您可以在控制台建立節點池,為節點池中的節點配置ack.node.gpu.schedule:mps
標籤,開啟MPS模式的共用GPU調度和顯存隔離能力。此配置針對該節點池中的全量節點生效。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
單擊建立節點池,配置節點標籤,並按需配置其他配置項,然後單擊確認配置。
以下為重要配置項說明。關於全量配置項的說明,請參見建立節點池。
配置項
說明
期望節點數
節點池的初始節點數量。如無需建立節點,可以填寫為0。
節點標籤
設定鍵為ack.node.gpu.schedule,值為mps。
配置完成後,您可以參見運行共用GPU調度樣本在應用Pod中聲明所需的顯存資源(
aliyun.com/gpu-mem
)。
相關文檔
關於如何配置GPU共用容器的YAML檔案,使用顯存隔離能力,請參見運行共用GPU調度樣本。