在 minikube 中使用 NVIDIA GPU

先决条件

  • Linux
  • 最新的 NVIDIA GPU 驱动程序
  • minikube v1.32.0-beta.0 或更高版本(仅限 docker 驱动程序)

每个驱动程序的说明

使用 docker 驱动程序

  • 请确保您已安装 NVIDIA 驱动程序,您可以通过运行 nvidia-smi 来检查是否已安装。如果未安装,请按照NVIDIA 驱动程序安装指南进行操作。

  • 检查 bpf_jit_harden 是否设置为 0

    sudo sysctl net.core.bpf_jit_harden
    
    • 如果不是 0,请运行
    echo "net.core.bpf_jit_harden=0" | sudo tee -a /etc/sysctl.conf
    sudo sysctl -p
    
  • 在您的主机上安装 NVIDIA 容器工具包

  • 配置 Docker

    sudo nvidia-ctk runtime configure --runtime=docker && sudo systemctl restart docker
    
  • 删除现有的 minikube(可选)

    如果您有现有的 minikube 实例,如果它是在安装 nvidia 运行时 shim 之前构建的,您可能需要将其删除。

    minikube delete
    

    这将确保在 nvidia 运行时可用后,minikube 执行任何所需的设置或插件安装。

  • 启动 minikube

    minikube start --driver docker --container-runtime docker --gpus all
    

使用 ’none’ 驱动程序

注意:此处用于暴露 GPU 的方法与使用 --driver=kvm 暴露 GPU 的方法不同。请勿混淆这些说明。

  • 安装 minikube。

  • 安装 nvidia 驱动程序、nvidia-docker 并将 docker 配置为使用 nvidia 作为默认运行时。请参阅 https://github.com/NVIDIA/nvidia-docker 上的说明。

  • 启动 minikube

    minikube start --driver=none --apiserver-ips 127.0.0.1 --apiserver-name localhost
    
  • 安装 NVIDIA 的设备插件

    minikube addons enable nvidia-device-plugin
    

使用 kvm 驱动程序

当使用 kvm 驱动程序与 NVIDIA GPU 时,我们将主机上的空闲 GPU 直通给 minikube 虚拟机。这样做有一些先决条件:

  • 您必须安装 kvm 驱动程序。如果您已经安装了此驱动程序,请确保您获取支持 GPU 的最新 docker-machine-driver-kvm 二进制文件。

  • 您的 CPU 必须支持 IOMMU。不同的供应商对此技术有不同的名称。英特尔称之为 Intel VT-d。AMD 称之为 AMD-Vi。您的主板也必须支持 IOMMU。

  • 您必须在内核中启用 IOMMU:在内核命令行中添加 intel_iommu=onamd_iommu=on(取决于您的 CPU 供应商)。同时,在内核命令行中添加 iommu=pt

  • 您必须有主机上未使用的空闲 GPU,并且可以将其直通到虚拟机。这些 GPU 不得受 nvidia/nouveau 驱动程序控制。您可以通过完全不在主机上加载 nvidia/nouveau 驱动程序,或者在启动时将空闲 GPU 设备分配给 vfio-pcipci-stub 等桩内核模块来确保这一点。您可以通过将空闲 GPU 的 vendorId:deviceId 添加到内核命令行来做到这一点。例如,对于 Quadro M4000,请在内核命令行中添加 pci-stub.ids=10de:13f1。请注意,您必须为所有要直通到虚拟机的 GPU 以及这些 GPU 的 IOMMU 组中的所有其他设备执行此操作。

  • 完成上述操作并重启系统后,您应该可以使用 kvm 与 GPU。运行以下命令启动 minikube

    minikube start --driver kvm --kvm-gpu
    

    此命令将检查是否满足上述所有条件,并将主机上找到的空闲 GPU 直通到虚拟机。

    如果成功,请运行以下命令

    minikube addons enable nvidia-device-plugin
    minikube addons enable nvidia-driver-installer
    

    注意:nvidia-gpu-device-plugin 插件已被弃用,其功能已合并到 nvidia-device-plugin 插件中。

    这将在虚拟机上安装 NVIDIA 驱动程序(适用于 GeForce/Quadro 显卡)。

  • 如果一切成功,您应该能够在容量中看到 nvidia.com/gpu

    kubectl get nodes -ojson | jq .items[].status.capacity
    

在哪里可以了解更多关于 GPU 直通的信息?

请参阅 https://wiki.archlinux.org.cn/index.php/PCI_passthrough_via_OVMF 上的优秀文档。

为什么在 minikube 上使用 kvm 和 GPU 需要这么多手动步骤?

这些步骤需要提升的权限,而 minikube 不会以这些权限运行,并且它们会对主机造成干扰,因此我们决定不自动执行这些操作。

为什么 minikube 不支持 macOS 上的 NVIDIA GPU?

minikube 在 macOS 上支持的驱动程序不支持 GPU 直通

此外

  • 相当长一段时间以来,所有 Mac 硬件(包括笔记本电脑和台式机)都配备了 Intel 或 AMD GPU(而不是 NVIDIA GPU)。最近,Apple 添加了对 eGPU 的支持,但即便如此,所有列出的支持 GPU 都是 AMD 的。

  • nvidia-docker 也不支持 macOS

为什么 minikube 不支持 Windows 上的 NVIDIA GPU?

minikube 通过 Hyper-V 或 VirtualBox 支持 Windows 主机。

由于在 Windows 上支持 minikube GPU 的唯一可能性是在服务器操作系统上,而用户通常不会在此类系统上运行 minikube,因此我们尚未投入时间尝试在 Windows 上的 minikube 中支持 NVIDIA GPU。

此外,nvidia-docker 也不支持 Windows