GPU
Kubernetes 支持容器請求 GPU 資源(目前僅支持 NVIDIA GPU),在深度學習等場景中有大量應用。
使用方法
Kubernetes v1.8 及更新版本
從 Kubernetes v1.8 開始,GPU 開始以 DevicePlugin 的形式實現。在使用之前需要配置
kubelet/kube-apiserver/kube-controller-manager:
--feature-gates="DevicePlugins=true"在所有的 Node 上安裝 Nvidia 驅動,包括 NVIDIA Cuda Toolkit 和 cuDNN 等
Kubelet 配置使用 docker 容器引擎(默認就是 docker),其他容器引擎暫不支持該特性
NVIDIA 插件
NVIDIA 需要 nvidia-docker。
安裝 nvidia-docker:
# Install docker-ce
curl https://get.docker.com | sh \
&& sudo systemctl --now enable docker
# Add the package repositories
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/experimental/$distribution/libnvidia-container.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
# Install nvidia-docker2 and reload the Docker daemon configuration
sudo apt-get install -y nvidia-docker2
sudo systemctl restart docker
# Test nvidia-smi with the latest official CUDA image
sudo docker run --rm --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi部署 NVDIA 設備插件
GCE/GKE GPU 插件
該插件不需要 nvidia-docker,並且也支持 CRI 容器運行時。
NVIDIA GPU Operator
Nvidia GPU Operator 是一個 Kubernetes Operator,用於在 Kubernetes 集群中部署和管理 Nvidia GPU。
請求 nvidia.com/gpu 資源示例
nvidia.com/gpu 資源示例Kubernetes v1.6 和 v1.7
alpha.kubernetes.io/nvidia-gpu已在 v1.10 中刪除,新版本請使用nvidia.com/gpu。
在 Kubernetes v1.6 和 v1.7 中使用 GPU 需要預先配置
在所有的 Node 上安裝 Nvidia 驅動,包括 NVIDIA Cuda Toolkit 和 cuDNN 等
在 apiserver 和 kubelet 上開啓
--feature-gates="Accelerators=true"Kubelet 配置使用 docker 容器引擎(默認就是 docker),其他容器引擎暫不支持該特性
使用資源名 alpha.kubernetes.io/nvidia-gpu 指定請求 GPU 的個數,如
注意
GPU 資源必須在
resources.limits中請求,resources.requests中無效容器可以請求 1 個或多個 GPU,不能只請求一部分
多個容器之間不能共享 GPU
默認假設所有 Node 安裝了相同型號的 GPU
多種型號的 GPU
如果集群 Node 中安裝了多種型號的 GPU,則可以使用 Node Affinity 來調度 Pod 到指定 GPU 型號的 Node 上。
首先,在集群初始化時,需要給 Node 打上 GPU 型號的標籤
然後,在創建 Pod 時設置 Node Affinity:
使用 CUDA 庫
NVIDIA Cuda Toolkit 和 cuDNN 等需要預先安裝在所有 Node 上。爲了訪問 /usr/lib/nvidia-375,需要將 CUDA 庫以 hostPath volume 的形式傳給容器:
附錄:CUDA 安裝方法
安裝 CUDA:
安裝 cuDNN:
首先到網站 https://developer.nvidia.com/cudnn 註冊,並下載 cuDNN v5.1,然後運行命令安裝
安裝完成後,可以運行 nvidia-smi 查看 GPU 設備的狀態
參考文檔
Last updated