全部產品
Search
文件中心

Container Service for Kubernetes:使用MPS實現GPU共用調度和顯存隔離

更新時間:Aug 31, 2024

在多核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裝置上,從而實現了用戶端之間的並發性。

前提條件

使用限制

  • 當一個節點開啟MPS顯存隔離能力後,某個應用被調度到該節點上時,Control Daemon Process進程會使用Exclusive GPU模式獨佔整個節點上的GPU。在MPS的Client-Server架構下,用戶端會統一向MPS Server申請所需的GPU資源。

  • MPS模式的共用GPU調度僅支援使用共用顯存模式,不支援共用算力模式。

操作步驟

您可以在控制台建立節點池,為節點池中的節點配置ack.node.gpu.schedule:mps標籤,開啟MPS模式的共用GPU調度和顯存隔離能力。此配置針對該節點池中的全量節點生效。

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇節點管理 > 節點池

  3. 單擊建立節點池配置節點標籤,並按需配置其他配置項,然後單擊確認配置

    以下為重要配置項說明。關於全量配置項的說明,請參見建立節點池

    配置項

    說明

    期望節點數

    節點池的初始節點數量。如無需建立節點,可以填寫為0。

    節點標籤

    設定為ack.node.gpu.schedule,為mps。

    配置完成後,您可以參見運行共用GPU調度樣本在應用Pod中聲明所需的顯存資源(aliyun.com/gpu-mem)。

相關文檔

關於如何配置GPU共用容器的YAML檔案,使用顯存隔離能力,請參見運行共用GPU調度樣本