Kubernetes提供对分布式节点上的AMD GPU
和NVIDIA GPU
管理的实验性的支持。
在v1.6中已经添加了对 NVIDIA GPU
的支持,并且经历了多次向后不兼容的迭代。 通过 设备插件 将在v1.9中添加了对AMD GPU
的支持。
本文将介绍如何在不同的Kubernetes版本中使用GPU以及当前的限制。
v1.8开始
从1.8开始,使用GPU的推荐方法是使用驱动插件。
要在1.10
之前通过设备插件启用GPU支持,必须在整个系统中将DevicePlugins
功能设置为true:--feature-gates="DevicePlugins=true"
。从1.10开始则不再需要这样做了。
然后,必须在节点上安装相应供应商GPU驱动程序,并从GPU供应商(AMD,NVIDIA)运行相应的设备插件。
如果满足上述条件,Kubernetes将暴露 nvidia.com/gpu
或 amd.com/gpu
作为可调度资源。
你可以通过请求<vendor>.com/gpu
来从容器中使用这些GPU,就像请求cpu或内存一样。但是,在使用GPU时如何指定资源要求存在一些限制:
GPU只能设置在limits部分中指定,这意味着:
- 您可以在不指定
requests
的情况下指定GPUlimits
,因为默认情况下Kubernetes将使用limit
作为请求值。 - 您可以在
limits
和request
中指定GPU,但这两个值必须相等。 - 你不可以仅指定
requests
而不指定limits
。
- 您可以在不指定
容器(和pod)不共享GPU。GPU 也不可以过量分配(Overcommitting)。
每个容器可以请求一个或多个GPU。 无法请求一小部分GPU。
例如:
apiVersion: v1
kind: Pod
metadata:
name: cuda-vector-add
spec:
restartPolicy: OnFailure
containers:
- name: cuda-vector-add
# https://github.com/kubernetes/kubernetes/blob/v1.7.11/test/images/nvidia-cuda/Dockerfile
image: "k8s.gcr.io/cuda-vector-add:v0.1"
resources:
limits:
nvidia.com/gpu: 1 # requesting 1 GPU
部署 AMD GPU 驱动插件
- 如果是 AMD GPU,到这里 >>> 官方AMD GPU驱动插件 配置。
部署 NVIDIA GPU 驱动插件
- 如果是 NVIDIA GPU,到这里 >>> 官方 NVIDIA GPU驱动插件 配置。
楼主太强了