0. 概述

1. GPU 的使用

你需要在主机节点上安装对应厂商的 GPU 驱动并运行对应厂商的设备插件 (AMD、NVIDIA)。
当上面的条件都满足,Kubernetes 将会暴露 nvidia.com/gpu 或 amd.com/gpu 来作为 一种可调度的资源。
你也能通过像请求 cpu 或 memory 一样请求 .com/gpu 来在容器中使用 GPU。然而,当你要通过指定资源请求来使用 GPU 时,存在着以下几点限制:

  • GPU 仅仅支持在 limits 部分被指定,这表明:
  • 你可以仅仅指定 GPU 的 limits 字段而不必须指定 requests 字段,因为 Kubernetes 会默认使用 limit 字段的值来作为 request 字段的默认值。
    • 你能同时指定 GPU 的 limits 和 requests 字段,但这两个值必须相等。
    • 你不能仅仅指定 GPU 的 request 字段而不指定 limits。
    • 容器(以及 pod)并不会共享 GPU,也不存在对 GPU 的过量使用。
  • 每一个容器能够请求一个或多个 GPU。然而只请求一个 GPU 的一部分是不允许的。

示例:

  1. [root@liqiang.io]# cat gpu.yaml
  2. apiVersion: v1
  3. kind: Pod
  4. metadata:
  5. name: cuda-vector-add
  6. spec:
  7. restartPolicy: OnFailure
  8. containers:
  9. - name: cuda-vector-add
  10. # https://github.com/kubernetes/kubernetes/blob/v1.7.11/test/images/nvidia-cuda/Dockerfile
  11. image: "k8s.gcr.io/cuda-vector-add:v0.1"
  12. resources:
  13. limits:
  14. nvidia.com/gpu: 1 # requesting 1 GPU