使用 NVIDIA GPU 和 minikube
先决条件
- Linux
- 最新的 NVIDIA GPU 驱动程序
- minikube v1.32.0-beta.0 或更高版本(仅限 docker 驱动程序)
按驱动程序说明
使用 docker 驱动程序
-
确保您已安装 NVIDIA 驱动程序,您可以通过运行
nvidia-smi进行检查,如果未安装,请按照 NVIDIA 驱动程序安装指南进行操作 -
检查
bpf_jit_harden是否设置为0sudo sysctl net.core.bpf_jit_harden- 如果不是
0,则运行
echo "net.core.bpf_jit_harden=0" | sudo tee -a /etc/sysctl.conf sudo sysctl -p - 如果不是
-
使用以下方法之一安装 NVIDIA 支持
- 在您的主机上安装 NVIDIA Container Toolkit
- 在您的主机上启用 NVIDIA CDI 资源。
-
配置 Docker
sudo nvidia-ctk runtime configure --runtime=docker && sudo systemctl restart docker -
删除现有的 minikube(可选)
如果您有现有的 minikube 实例,并且它是在安装 nvidia runtime shim 之前构建的,您可能需要将其删除。
minikube delete这将确保 minikube 现在可以执行任何必需的设置或附加组件安装,因为 nvidia runtime 已可用。
-
使用以下方法之一启动 minikube
- NVIDIA Container Toolkit
minikube start --driver docker --container-runtime docker --gpus all - NVIDIA CDI 资源
minikube start --driver docker --container-runtime docker --gpus nvidia.com
- NVIDIA Container Toolkit
使用 ’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 驱动程序
将 NVIDIA GPU 与 kvm 驱动程序一起使用时,我们将主机上的备用 GPU 直通到 minikube VM。这样做有一些先决条件
-
您的 CPU 必须支持 IOMMU。不同的供应商对此技术有不同的名称。Intel 称之为 Intel VT-d。AMD 称之为 AMD-Vi。您的主板也必须支持 IOMMU。
-
您必须在内核中启用 IOMMU:在内核命令行中添加
intel_iommu=on或amd_iommu=on(取决于您的 CPU 供应商)。还要在内核命令行中添加iommu=pt。 -
您必须拥有未在主机上使用且可以直通到 VM 的备用 GPU。这些 GPU 不得由 nvidia/nouveau 驱动程序控制。您可以通过在主机上根本不加载 nvidia/nouveau 驱动程序,或者在启动时将备用 GPU 设备分配给诸如
vfio-pci或pci-stub之类的 stub 内核模块来确保这一点。您可以通过将备用 GPU 的 vendorId:deviceId 添加到内核命令行来做到这一点。例如,对于 Quadro M4000,请在内核命令行中添加pci-stub.ids=10de:13f1。请注意,您必须对所有要直通到 VM 的 GPU 以及这些 GPU 的 IOMMU 组中的所有其他设备执行此操作。 -
完成上述操作后重新启动系统,您应该可以使用带有 kvm 的 GPU 了。运行以下命令启动 minikube
minikube start --driver kvm --kvm-gpu此命令将检查是否满足上述所有条件,并将主机上找到的备用 GPU 直通到 VM。
如果成功,请运行以下命令
minikube addons enable nvidia-device-plugin minikube addons enable nvidia-driver-installer注意:
nvidia-gpu-device-plugin附加组件已被弃用,其功能已合并到nvidia-device-plugin附加组件中。这将在 VM 上安装 NVIDIA 驱动程序(适用于 GeForce/Quadro 卡)。
-
如果一切成功,您应该能够在容量中看到
nvidia.com/gpukubectl 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 主机。
-
VirtualBox 不支持 Windows 主机的 PCI 直通。
-
Hyper-V 支持 DDA(离散设备分配),但仅适用于 Windows Server 2016
由于在 Windows 上支持 minikube 上的 GPU 的唯一可能性是在用户通常不运行 minikube 的服务器操作系统上,因此我们没有投入时间尝试在 Windows 上的 minikube 上支持 NVIDIA GPU。
此外,nvidia-docker 也不支持 Windows。