全部產品
Search
文件中心

Container Service for Kubernetes:通過共用GPU調度實現多卡共用

更新時間:Apr 19, 2025

ACK託管叢集Pro版支援共用GPU,共用GPU能夠在Kubernetes上實現共用GPU調度和顯存隔離。本文介紹如何配置共用GPU調度的多卡共用策略。

前提條件

多卡共用資訊介紹

重要

目前多卡共用僅支援顯存隔離且算力共用的情境,不支援顯存隔離且算力分配的情境。

在模型開發階段,可能需要多張GPU卡但無需大量資源。如果將多張GPU卡全部分配給開發平台,有可能造成資源浪費。GPU調度的多卡共用可以解決這一問題。

多卡共用策略指的是某個應用申請N GiB顯存,由M塊GPU卡分配,每塊分配N/M GiB(N/M必須為整數,且M塊GPU卡在同一Kubernetes節點上)。如下圖,申請8 GiB顯存並指定2塊GPU卡,每塊分配4 GiB。

  • 單卡共用:一個Pod僅申請一張GPU卡,佔用該GPU部分資源。

  • 多卡共用:一個Pod申請多張GPU卡,每張GPU提供部分資源,且每張GPU提供的資源量相同。

設定多卡共用策略

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

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 任務

  3. 任務頁面,單擊使用YAML建立資源。將以下內容拷貝至模板地區,然後單擊建立

    展開查看YAML詳細資料

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: tensorflow-mnist-multigpu
    spec:
      parallelism: 1
      template:
        metadata:
          labels:
            app: tensorflow-mnist-multigpu
            # 在Pod label中申明8 GiB顯存,由2塊GPU卡提供,每塊提供4 GiB顯存。
            aliyun.com/gpu-count: "2"
        spec:
          containers:
          - name: tensorflow-mnist-multigpu
            image: registry.cn-beijing.aliyuncs.com/ai-samples/gpushare-sample:tensorflow-1.5
            command:
            - python
            - tensorflow-sample-code/tfjob/docker/mnist/main.py
            - --max_steps=100000
            - --data_dir=tensorflow-sample-code/data
            resources:
              limits:
                aliyun.com/gpu-mem: 8 # 總共申請8 GiB顯存。
            workingDir: /root
          restartPolicy: Never

    YAML檔案說明如下:

    • 該YAML定義一個使用TensorFlow mnist範例的Job,任務申請8 GiB顯存,並申請2張GPU卡,每張GPU卡將提供4 GiB顯存。

    • 申請2張GPU卡通過在Pod Label定義標籤aliyun.com/gpu-count: 2實現

    • 申請8 GiB顯存通過在Pod resources.limits定義aliyun.com/gpu-mem: 8實現

驗證多卡共用策略

  1. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 容器組

  2. 在建立的容器所在行,例如tensorflow-mnist-multigpu-***,單擊操作列的終端,進入容器,執行如下命令。

    nvidia-smi

    預期輸出:

    Wed Jun 14 03:24:14 2023
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 470.161.03   Driver Version: 470.161.03   CUDA Version: 11.4     |
    |-------------------------------+----------------------+----------------------+
    | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
    |                               |                      |               MIG M. |
    |===============================+======================+======================|
    |   0  Tesla V100-SXM2...  On   | 00000000:00:09.0 Off |                    0 |
    | N/A   38C    P0    61W / 300W |    569MiB /  4309MiB |      2%      Default |
    |                               |                      |                  N/A |
    +-------------------------------+----------------------+----------------------+
    |   1  Tesla V100-SXM2...  On   | 00000000:00:0A.0 Off |                    0 |
    | N/A   36C    P0    61W / 300W |    381MiB /  4309MiB |      0%      Default |
    |                               |                      |                  N/A |
    +-------------------------------+----------------------+----------------------+
    
    +-----------------------------------------------------------------------------+
    | Processes:                                                                  |
    |  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
    |        ID   ID                                                   Usage      |
    |=============================================================================|
    +-----------------------------------------------------------------------------+

    預期輸出表明,容器內部僅能夠使用2張GPU卡,每張卡的總顯存均為4309 MiB(也就是申請的4 GiB顯存,而每張卡真實顯存為16160 MiB)。

  3. 在建立的容器所在行,例如tensorflow-mnist-multigpu-***,單擊操作列的日誌,查看容器日誌,可以看到如下關鍵資訊。

    totalMemory: 4.21GiB freeMemory: 3.91GiB
    totalMemory: 4.21GiB freeMemory: 3.91GiB

    關鍵資訊表明,應用查詢到的裝置資訊中,每張卡的總顯存為4 GiB左右,而不是每張卡真實顯存16160 MiB,也就是應用使用的顯存已被隔離。