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
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
sudo apt-get update
sudo apt-get install docker-ce

# Add the package repositories
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
  sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/ubuntu16.04/amd64/nvidia-docker.list | \
  sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update

# Install nvidia-docker2 and reload the Docker daemon configuration
sudo apt-get install -y nvidia-docker2
sudo pkill -SIGHUP dockerd

# Test nvidia-smi with the latest official CUDA image
docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi

設置 Docker 默認運行時爲 nvidia

部署 NVDIA 設備插件

GCE/GKE GPU 插件

該插件不需要 nvidia-docker,並且也支持 CRI 容器運行時。

請求 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