全部產品
Search
文件中心

Container Service for Kubernetes:通過OSS URL自訂節點GPU驅動

更新時間:Jun 19, 2024

不同類型和版本的ACK叢集預設安裝不同版本的NVIDIA驅動。如果您使用的CUDA庫需要匹配更高版本的NVIDIA驅動,需要自訂安裝節點的NVIDIA驅動。本文介紹如何基於節點池標籤通過OSS URL自訂GPU節點的NVIDIA驅動版本。

注意事項

  • 對於GPU驅動版本與您業務應用的相容性(GPU驅動版本與CDUA庫版本的相容性),ACK不保證兩者之間相容性,請您自行驗證。

  • 對於已經安裝GPU驅動、NVIDIA Container Runtime等GPU組件的自訂動作系統鏡像,ACK無法保證其提供的GPU驅動與ACK其他GPU組件相容(例如監控組件等),請您自行驗證。

  • 通過節點池標籤指定節點池中GPU節點的驅動版本時,由於安裝驅動的過程是在添加節點時被觸發,因此僅對新擴容或新添加的節點有效,對節點池中已經存在的節點無效。如果希望對已有節點有效,需要將該節點從節點池移除,再加入原節點池。具體操作,請參見移除節點添加已有節點

  • 如果您上傳自己的GPU驅動到OSS中,使用自訂的GPU節點驅動方式,可能引發GPU驅動與作業系統版本、ECS執行個體類型、Container Runtime等不相容,繼而導致添加GPU節點失敗。ACK無法保證節點添加的成功率,請您自行驗證。

  • 機型ecs.gn7.xxxxx和ecs.ebmgn7.xxxx對510.xxx和515.xxx版本驅動存在相容性問題,建議使用關閉GSP的510以下的驅動版本(例如:470.xxx.x1PINSGHEN xxx)或525.125.06及其以上的驅動版本。

  • NVIDIA各卡型(P100、T4、V100、A10等)對驅動版本的更詳細的要求,請參見NVIDIA官方文檔

步驟一:下載目標驅動

如果ACK支援的NVIDIA驅動版本列表未包含您的業務所需的驅動版本,您可以從NVIDIA官方網站下載目標驅動版本,本文以驅動版本515.86.01為例進行介紹。如下圖所示,單擊Search跳轉至下載頁面,將驅動檔案NVIDIA-Linux-x86_64-515.86.01.run下載到本地。

image.png

步驟二:下載nvidia fabric manager

NVIDIA YUM官方倉庫下載nvidia fabric manager,nvidia fabric manager的版本需和驅動版本一致。

wget https://developer.download.nvidia.cn/compute/cuda/repos/rhel7/x86_64/nvidia-fabric-manager-515.86.01-1.x86_64.rpm

步驟三:建立OSS Bucket

登入Object Storage Service控制台,建立OSS Bucket。具體操作,請參見建立儲存空間

說明

建議OSS Bucket所在地區與目標ACK叢集所在地區相同,為ACK節點安裝GPU驅動時,可以通過內網OSS Bucket拉取驅動。

步驟四:上傳驅動和nvidia-fabric-manager檔案到OSS Bucket

  1. 登入Object Storage Service控制台,在左側導覽列,單擊Bucket列表,找到目標Bucket,上傳NVIDIA-Linux-x86_64-515.86.01.run和nvidia-fabric-manager-515.86.01-1.x86_64.rpm至目標Bucket的根目錄。

    具體操作,請參見上傳檔案

    重要

    請確保上傳檔案至OSS Bucket的根目錄,不要上傳至子目錄。

  2. 在目標Bucket頁面的左側導覽列,單擊檔案管理 > 檔案清單,單擊已上傳檔案右側操作列的詳情,查看驅動檔案的詳情。

  3. 詳情面板,關閉使用 HTTPS開關,取消使用HTTPS的配置。

    重要

    ACK建立叢集時會通過URL拉取驅動檔案,URL使用的協議為HTTP協議。但OSS預設使用HTTPS協議。因此,請關閉使用 HTTPS開關。

  4. 在目標Bucket詳情頁,單擊左側導覽列的概覽,在頁面下方擷取內網訪問地址。

    重要

    公網網域名稱拉取驅動檔案速度較慢,容易造成叢集添加GPU節點失敗,因此建議通過內網網域名稱(帶有-internal欄位)或加速網域名稱(帶有oss-accelerate欄位)拉取驅動檔案。

步驟五:配置節點池標籤

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

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

  3. 單擊右上方的建立節點池,然後在建立節點池對話方塊配置相關參數。

    部分配置項說明如下。有關配置項的詳細說明,請參見建立Kubernetes託管版叢集

    1. 單擊顯示進階選項

    2. 節點標籤參數欄添加標籤,單擊1表徵圖。

      1. 輸入第一個標籤的ack.aliyun.com/nvidia-driver-oss-endpoint步驟四擷取的OSS Bucket內網訪問地址,本文樣本為my-nvidia-driver.oss-cn-beijing-internal.aliyuncs.com

      2. 輸入第二個標籤的ack.aliyun.com/nvidia-driver-runfile步驟一下載的NVIDIA驅動的名稱,本文樣本為NVIDIA-Linux-x86_64-515.86.01.run

      3. 輸入第三個標籤的ack.aliyun.com/nvidia-fabricmanager-rpm步驟二下載的nvidia fabric manager的名稱,本文樣本為nvidia-fabric-manager-515.86.01-1.x86_64.rpm

    3. 參數配置完成後,單擊確認配置

步驟六:驗證節點池自訂安裝NVIDIA驅動是否成功

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

  2. 在目的地組群右側的操作列,選擇更多 > 通過CloudShell管理叢集

  3. 執行以下命令,查看帶有component: nvidia-device-plugin標籤的Pod。

    kubectl get po -n kube-system -l component=nvidia-device-plugin -o wide

    預期輸出:

    NAME                                            READY   STATUS    RESTARTS   AGE   IP              NODE                       NOMINATED NODE   READINESS GATES
    nvidia-device-plugin-cn-beijing.192.168.1.127   1/1     Running   0          6d    192.168.1.127   cn-beijing.192.168.1.127   <none>           <none>
    nvidia-device-plugin-cn-beijing.192.168.1.128   1/1     Running   0          17m   192.168.1.128   cn-beijing.192.168.1.128   <none>           <none>
    nvidia-device-plugin-cn-beijing.192.168.8.12    1/1     Running   0          9d    192.168.8.12    cn-beijing.192.168.8.12    <none>           <none>
    nvidia-device-plugin-cn-beijing.192.168.8.13    1/1     Running   0          9d    192.168.8.13    cn-beijing.192.168.8.13    <none>           <none>
    nvidia-device-plugin-cn-beijing.192.168.8.14    1/1     Running   0          9d   

    預期輸出表示,NODE列的叢集中剛添加的節點對應的Pod名稱為nvidia-device-plugin-cn-beijing.192.168.1.128

  4. 執行以下命令查看節點的驅動版本是否符合預期。

    kubectl exec -ti nvidia-device-plugin-cn-beijing.192.168.1.128 -n kube-system -- nvidia-smi

    預期輸出:

    image.png

    預期輸出表明,驅動版本為515.86.01,即通過節點池自訂安裝NVIDIA驅動成功。

其他方式

使用OpenAPI方式建立或者擴容叢集時,可在目標節點池的配置中設定自訂驅動的OSS URL。範例程式碼如下:

{
  // 其他部分省略
  ......
    "tags": [
      {
              "key": "ack.aliyun.com/nvidia-driver-oss-endpoint",
              "value": "xxxx"
      },
      {
        "key": "ack.aliyun.com/nvidia-driver-runfile",
        "value": "xxxx"
      },
      {
        "key": "ack.aliyun.com/nvidia-fabricmanager-rpm",
        "value": "xxxx"
      }
    ],
  // 其他部分省略
  ......
}