在 k8s 中使用 GPU 资源

k8s-device-plugin github: https://github.com/NVIDIA/k8s-device-plugin

注意事项:

  • 从Kubernetes 1.8开始,官方推荐使用Device Plugins方式来使用GPU。
  • 需要在Node上pre-install NVIDIA Driver,并建议通过Daemonset部署NVIDIA Device Plugin,完成后Kubernetes才能发现nvidia.com/gpu。
  • 因为device plugin通过extended resources来expose gpu resource的,所以在container请求gpu资源的时候要注意resource QoS为Guaranteed。
  • Containers目前仍然不支持共享同一块gpu卡。每个Container可以请求多块gpu卡,但是不支持gpu fraction。
  • Node 上要有nvidia-docker >= 2.0
  • 显卡驱动版本大于361.93
  • 将nvidia配置为Docker默认的runtime
    编辑/etc/docker/daemon.json文件,增加"default-runtime": "nvidia"键值对,此时该文件的内容应该如下所示):
{
    "default-runtime": "nvidia",
    "runtimes": {
        "nvidia": {
            "path": "nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}

在很多教程中都说明若要使用GPU,需要设置Accelerators为true,而实际上该参数在1.11版本之后就弃用了。而将DevicePlugins设置为true也是在1.9版本之前需要做的事情,在1.10版本之后默认就为true。

安装

在 master 节点上执行,:

kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v1.11/nvidia-device-plugin.yml

稍等一会后,使用kubectl describe nodes查看节点信息,可以看到具有GPU的Node节点中可获取的资源已包括GPU

然后创建一个 nvidia/cudaxxxx pod 然后 执行 kubectl exec -it podname nvidia-smi

注意:
nvidia-device-plugin.yml 部分内容:

apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: nvidia-device-plugin-daemonset
namespace: kube-system

可以看到: 它的类型是 DaemonSet 所以要保证gpu节点弄够 pull 下 image。

你可能感兴趣的:(docker,Kubernetes,nvidia-plugin,k8s)