内容简介:Kubernetes GPU使用指南
Kubernetes支持容器请求GPU资源(目前仅支持NVIDIA GPU),在深度学习等场景中有大量应用。
在Kubernetes中使用GPU需要预先配置
- 在所有的Node上安装Nvidia驱动,包括NVIDIA Cuda Toolkit和cuDNN等
- 在apiserver和kubelet上开启--feature-gates="Accelerators=true"
- Kubelet配置使用 docker 容器引擎(默认就是docker),其他容器引擎暂不支持该特性
使用方法
使用资源名 http:// alpha.kubernetes.io/nvi dia-gpu 指定请求GPU的个数,如
apiVersion: v1
kind: pod
spec:
containers:
- image: gcr.io/tensorflow/tensorflow:latest-gpu
name: gpu-container-1
command: ["python"]
args: ["-u", "-c", "import tensorflow"]
resources:
limits:
alpha.kubernetes.io/nvidia-gpu: 2 # requesting 2 GPUs
注意
- GPU资源必须在resources.limits中请求,resources.requests中无效
- 容器可以请求1个或多个GPU,不能只请求一部分
- 多个容器之间不能共享GPU
- 默认假设所有Node安装了相同型号的GPU
多种型号的GPU
如果集群Node中安装了多种型号的GPU,则可以使用Node Affinity来调度Pod到指定GPU型号的Node上。
首先,在集群初始化时,需要给Node打上GPU型号的标签
NVIDIA_GPU_NAME=$(nvidia-smi --query-gpu=gpu_name --format=csv,noheader --id=0) source /etc/default/kubelet KUBELET_OPTS="$KUBELET_OPTS --node-labels='alpha.kubernetes.io/nvidia-gpu-name=$NVIDIA_GPU_NAME'" echo "KUBELET_OPTS=$KUBELET_OPTS" > /etc/default/kubelet
然后,在创建Pod时设置Node Affinity
kind: pod
apiVersion: v1
metadata:
annotations:
scheduler.alpha.kubernetes.io/affinity: >
{
"nodeAffinity": {
"requiredDuringSchedulingIgnoredDuringExecution": {
"nodeSelectorTerms": [
{
"matchExpressions": [
{
"key": "alpha.kubernetes.io/nvidia-gpu-name",
"operator": "In",
"values": ["Tesla K80", "Tesla P100"]
}
]
}
]
}
}
}
spec:
containers:
- image: gcr.io/tensorflow/tensorflow:latest-gpu
name: gpu-container-1
command: ["python"]
args: ["-u", "-c", "import tensorflow"]
resources:
limits:
alpha.kubernetes.io/nvidia-gpu: 2
使用CUDA库
NVIDIA Cuda Toolkit和cuDNN等需要预先安装在所有Node上。为了访问/usr/lib/nvidia-367,容器需要运行在特权模式,并将CUDA库以hostPath Volume的形式传给容器。
apiVersion: batch/v1
kind: Job
metadata:
name: nvidia-smi
labels:
name: nvidia-smi
spec:
template:
metadata:
labels:
name: nvidia-smi
spec:
containers:
- name: nvidia-smi
image: nvidia/cuda
command: [ "nvidia-smi" ]
imagePullPolicy: IfNotPresent
resources:
limits:
alpha.kubernetes.io/nvidia-gpu: 1
volumeMounts:
- mountPath: /usr/local/nvidia/bin
name: bin
- mountPath: /usr/lib/nvidia
name: lib
volumes:
- name: bin
hostPath:
path: /usr/lib/nvidia-375/bin
- name: lib
hostPath:
path: /usr/lib/nvidia-375
restartPolicy: Never
附录:CUDA安装方法
安装CUDA:
# Check for CUDA and try to install. if ! dpkg-query -W cuda; then # The 16.04 installer works with 16.10. curl -O http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_8.0.61-1_amd64.deb dpkg -i ./cuda-repo-ubuntu1604_8.0.61-1_amd64.deb apt-get update apt-get install cuda -y fi
安装cuDNN:
首先到网站 NVIDIA cuDNN 注册,并下载cuDNN v5.1,然后
tar xvzf cudnn-8.0-linux-x64-v5.1-ga.tgz sudo cp -P cuda/include/cudnn.h /usr/local/cuda/include sudo cp -P cuda/lib64/libcudnn* /usr/local/cuda/lib64 sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
本文转自《 Kubernetes Handbook 》,欢迎关注。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Making Things See
Greg Borenstein / Make / 2012-2-3 / USD 39.99
Welcome to the Vision Revolution. With Microsoft's Kinect leading the way, you can now use 3D computer vision technology to build digital 3D models of people and objects that you can manipulate with g......一起来看看 《Making Things See》 这本书的介绍吧!