某些情境下,您可能不需要GPU隔離模組參與共用GPU調度。例如,業務應用本身提供顯存限制能力,類似於Java應用啟動時,可以通過選項指定該應用能夠使用的最大記憶體值。此時,如果使用GPU隔離模組隔離業務可能會導致不可預知的問題。因此,共用GPU調度功能支援在某些節點不安裝GPU隔離模組。本文介紹如何不隔離模組配置共用GPU調度。
前提條件
已建立Kubernetes專有版GPU叢集。具體操作,請參見建立專有GPU叢集。
已安裝共用GPU調度基礎版組件。具體操作,請參見安裝共用GPU調度組件。
步驟一:建立節點池
按照以下步驟建立不安裝GPU隔離模組的節點池。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在節點池頁面,單擊建立節點池,在建立節點池對話方塊,設定相關配置項,然後單擊確認配置。
主要配置項說明如下。更多關於配置項的說明,請參見建立節點池。
期望節點數:設定節點池初始節點數量。如不需要建立節點,可以填寫為0。
節點標籤:為叢集節點添加共用GPU調度屬性標籤。關於標籤的詳細資料,請參見GPU節點調度屬性標籤說明。
單擊
表徵圖,設定鍵為gpushare,值為true。
步驟二:提交任務
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在任務頁面,單擊使用YAML建立資源,在建立頁面的代碼輸入框輸入以下範例程式碼,然後單擊建立。
apiVersion: batch/v1 kind: Job metadata: name: tensorflow-mnist-share spec: parallelism: 1 template: metadata: labels: app: tensorflow-mnist-share spec: containers: - name: tensorflow-mnist-share 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: 4 # 總共申請4 GiB顯存。 workingDir: /root restartPolicy: Never代碼解析如下。
該YAML定義一個使用TensorFlow minist範例的Job,Job中有一個Pod,該Pod申請4 GiB顯存。
申請的4 GiB顯存通過在Pod的
resources.limits欄位中定義aliyun.com/gpu-mem: 4實現。
步驟三:驗證僅共用不隔離能力
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在容器組頁面,單擊步驟二建立的容器右側操作列的,登入容器。
執行以下命令,查看應用的顯存情況。
nvidia-smi預期輸出:
Wed Jun 14 06:45:56 2023 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 515.105.01 Driver Version: 515.105.01 CUDA Version: 11.7 | |-------------------------------+----------------------+----------------------+ | 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 35C P0 59W / 300W | 334MiB / 16384MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| +-----------------------------------------------------------------------------+輸出表明,Pod內部整張GPU卡的總顯存為16384 MiB(本文樣本使用的GPU卡型為V100),而在有隔離模組參與的情境下,該值與Pod申請值4 GiB一致,說明配置生效。
業務應用需要從以下兩個環境變數中讀取該業務能夠使用的顯存值。
ALIYUN_COM_GPU_MEM_CONTAINER=4 # 該Pod能夠使用的顯存值。 ALIYUN_COM_GPU_MEM_DEV=16 # 每張GPU卡總共的顯存值。如果應用需要的是顯存的百分比,也就是該應用使用的顯存占GPU卡總顯存的百分比。可以使用上述兩個環境變數得出,具體計算公式如下。
percetange = ALIYUN_COM_GPU_MEM_CONTAINER / ALIYUN_COM_GPU_MEM_DEV = 4 / 16 = 0.25