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 资源示例
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 设备的状态
参考文档
最后更新于