Kubernetes v1.13 对 GPU 的支持

时间:2022-07-22
本文章向大家介绍Kubernetes v1.13 对 GPU 的支持,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Kubernetes 是从 v1.6 开始实验性地支持 Nvidia GPU 的资源调度的。而在 v1.9 开始对 AMD GPU 也开始支持了。现在 v1.13 对 GPU 的支持模式,是从 v1.8 开始通过 Device Plugin 来实现的。

鉴于 Kubernetes 支持越来越多不同类型硬件的资源管理和调度了,所以抽象一个 Device Plugin 是非常合理的,现在比如 InfiniBand 等支持 RDMA 协议的高性能网卡也可以通过 Device Plugin 来实现调度了,作为深度学习的基础设施,这是非常有利的。

关于 Nvidia GPU 的调度,网上的资料比价多,而实际上,目前大部分公司的 GPU 设备也都是来自 Nvidia 的 GPU,所以本文就 AMD GPU 简单介绍一下。

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

关于 ROCm,可以参考官网,简单解释一下,就是一个通用的多 GPU 计算平台,抽象的这一层,可以让用户无需关注硬件是使用 AMD 哪种制式的 GPU。

  1. 服务器可以支持 ROCm
  2. kubeadm 部署的集群是可以的
  3. 服务器安装了 ROCm 内核和最新的 AMD GPU Linux 的驱动
  4. --allow-privileged=true 开启

相对于 Nvidia GPU 的资源名 nvidia.com/gpu,AMD GPU 的资源名是 amd.com/gpu

apiVersion: v1
kind: Pod
metadata:
  name: alexnet-tf-gpu-pod
  labels:
    purpose: demo-tf-amdgpu
spec:
  containers:
    - name: alexnet-tf-gpu-container
      image: rocm/tensorflow:latest
      workingDir: /root
      env:
      - name: HIP_VISIBLE_DEVICES
        value: "0" # # 0,1,2,...,n for running on GPU and select the GPUs, -1 for running on CPU 
      command: ["/bin/bash", "-c", "--"]
      args: ["python3 benchmarks/scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py --model=alexnet; trap : TERM INT; sleep infinity & wait"]
      resources:
        limits:
          amd.com/gpu: 1 # requesting a GPU