使用 NVIDIA vGPU#
关于安装 Operator 和 NVIDIA vGPU#
NVIDIA Virtual GPU (vGPU) 使多个虚拟机 (VM) 能够同时直接访问单个物理 GPU,使用与非虚拟化操作系统上部署的相同的 NVIDIA 图形驱动程序。
安装步骤假设 gpu-operator
作为安装 NVIDIA GPU Operator 的默认命名空间。对于 Red Hat OpenShift Container Platform,默认命名空间为 nvidia-gpu-operator
。根据您的集群配置,相应地更改命令中显示的命名空间。此外,在 RedHat OpenShift 上运行时,将以下命令中的 kubectl
替换为 oc
。
NVIDIA vGPU 仅支持 NVIDIA 许可系统。
平台支持#
有关支持平台的信息,请参阅 支持的部署选项。
对于 Red Hat OpenShift Virtualization,请参阅 NVIDIA GPU Operator 与 OpenShift Virtualization。
先决条件#
在 NVIDIA vGPU 上安装 GPU Operator 之前,请确保以下各项
NVIDIA vGPU 主机驱动程序 12.0 版(或更高版本)已预先安装在所有托管 NVIDIA vGPU 加速 Kubernetes 工作节点虚拟机的 hypervisor 上。有关详细信息,请参阅 NVIDIA Virtual GPU 软件文档。
您必须有权访问 NVIDIA Enterprise Application Hub,网址为 https://nvid.nvidia.com/dashboard/ 和 NVIDIA Licensing Portal。
您的组织必须具有 Cloud License Service (CLS) 或 Delegated License Service (DLS) 的实例。
您必须为您的 CLS 实例或 DLS 实例生成并下载客户端配置令牌。有关生成令牌的信息,请参阅 NVIDIA License System Quick Start Guide。
您可以访问私有注册表(例如 NVIDIA NGC Private Registry),并且可以将容器镜像推送到该注册表。
需要 Git 和 Docker 或 Podman 才能从源存储库构建 vGPU 驱动程序镜像并推送到私有注册表。
集群中的每个 Kubernetes 工作节点都可以访问私有注册表。私有注册表访问通常通过镜像拉取密钥进行管理。您可以在使用 Helm 安装 Operator 时指定 NVIDIA GPU Operator 的密钥。
注意
将 NVIDIA vGPU 驱动程序上传到公共可用的存储库或以其他方式公开共享该驱动程序违反了 NVIDIA vGPU EULA。
下载 vGPU 软件#
执行以下步骤以从 NVIDIA Licensing Portal 下载 vGPU 软件和最新的 NVIDIA vGPU 驱动程序目录文件。
登录到 NVIDIA Enterprise Application Hub,网址为 https://nvid.nvidia.com/dashboard,然后单击 NVIDIA LICENSING PORTAL。
在 NVIDIA Licensing Portal 的左侧导航窗格中,单击 SOFTWARE DOWNLOADS。
在驱动程序下载表中找到 vGPU Driver Catalog,然后单击 Download。
单击 PRODUCT FAMILY 菜单,然后选择 vGPU 以将下载内容过滤为仅 vGPU。
在软件下载表中找到适用于您平台的 vGPU 软件,然后单击 Download。
vGPU 软件打包为 ZIP 文件。解压缩该文件以获得 NVIDIA vGPU Linux 访客驱动程序。访客驱动程序文件名遵循模式 NVIDIA-Linux-x86_64-<version>-grid.run
。
构建驱动程序容器#
执行以下步骤来构建和推送包含 vGPU Linux 访客驱动程序的容器镜像。
克隆驱动程序容器存储库并将目录更改为该存储库
$ git clone https://gitlab.com/nvidia/container-images/driver
$ cd driver
将目录更改为驱动程序目录下的操作系统名称和版本
$ cd ubuntu20.04
对于 Red Hat OpenShift Container Platform,请使用目录名称中包含
rhel
的目录。从解压缩的 ZIP 文件复制 NVIDIA vGPU 访客驱动程序和 NVIDIA vGPU 驱动程序目录文件
$ cp <local-driver-download-directory>/*-grid.run drivers/
$ cp vgpuDriverCatalog.yaml drivers/
设置用于构建驱动程序容器镜像的环境变量。
指定您的私有注册表 URL
$ export PRIVATE_REGISTRY=<private-registry-url>
指定
OS_TAG
环境变量以标识访客操作系统名称和版本$ export OS_TAG=ubuntu20.04
该值必须与访客操作系统版本匹配。对于 Red Hat OpenShift Container Platform,请指定
rhcos4.<x>
,其中x
是支持的次要 OCP 版本。有关支持的操作系统发行版的列表,请参阅 支持的操作系统和 Kubernetes 平台。指定驱动程序容器镜像标签,例如
1.0.0
$ export VERSION=1.0.0
指定的值可以是任何用户定义的值。该值用于在后续步骤中安装 Operator。
指定在构建驱动程序容器时要使用的 CUDA 基础镜像的版本
$ export CUDA_VERSION=11.8.0
CUDA 版本仅指定用于构建驱动程序容器的基础镜像。该版本与结果驱动程序容器关联或支持的 CUDA 版本没有任何关联。
指定您从 NVIDIA Licensing Portal 下载的 Linux 访客 vGPU 驱动程序版本,并附加
-grid
$ export VGPU_DRIVER_VERSION=525.60.13-grid
Operator 会自动从与
driver
镜像捆绑在一起的驱动程序中选择兼容的访客驱动程序版本。如果您在构建驱动程序镜像时通过指定--build-arg DISABLE_VGPU_VERSION_CHECK=true
禁用版本检查,则VGPU_DRIVER_VERSION
值将用作默认值。
构建驱动程序容器镜像
$ sudo docker build \ --build-arg DRIVER_TYPE=vgpu \ --build-arg DRIVER_VERSION=$VGPU_DRIVER_VERSION \ --build-arg CUDA_VERSION=$CUDA_VERSION \ --build-arg TARGETARCH=amd64 \ # amd64 or arm64 -t ${PRIVATE_REGISTRY}/driver:${VERSION}-${OS_TAG} .
将驱动程序容器镜像推送到您的私有注册表。
登录到您的私有注册表
$ sudo docker login ${PRIVATE_REGISTRY} --username=<username>
出现提示时输入您的密码。
将驱动程序容器镜像推送到您的私有注册表
$ sudo docker push ${PRIVATE_REGISTRY}/driver:${VERSION}-${OS_TAG}
使用 vGPU 许可证信息和驱动程序容器镜像配置集群#
创建一个名为
gridd.conf
的 NVIDIA vGPU 许可证文件,其内容类似于以下示例# Description: Set Feature to be enabled # Data type: integer # Possible values: # 0 => for unlicensed state # 1 => for NVIDIA vGPU # 2 => for NVIDIA RTX Virtual Workstation # 4 => for NVIDIA Virtual Compute Server FeatureType=1
使用类似于以下示例的命令,重命名您下载的客户端配置令牌文件为
client_configuration_token.tok
$ cp ~/Downloads/client_configuration_token_03-28-2023-16-16-36.tok client_configuration_token.tok
该文件必须命名为
client_configuraton_token.tok
。创建
gpu-operator
命名空间$ kubectl create namespace gpu-operator
使用
gridd.conf
和client_configuration_token.tok
文件创建一个名为licensing-config
的配置映射$ kubectl create configmap licensing-config \ -n gpu-operator --from-file=gridd.conf --from-file=client_configuration_token.tok
在
gpu-operator
命名空间中使用注册表密钥和私有注册表创建一个镜像拉取密钥。使用密钥名称设置环境变量
$ export REGISTRY_SECRET_NAME=registry-secret
创建密钥
$ kubectl create secret docker-registry ${REGISTRY_SECRET_NAME} \ --docker-server=${PRIVATE_REGISTRY} --docker-username=<username> \ --docker-password=<password> \ --docker-email=<email-id> -n gpu-operator
当您使用 Helm 安装 GPU Operator 时,您需要指定密钥名称
REGISTRY_SECRET_NAME
。
安装 Operator#
安装 Operator
$ helm install --wait --generate-name \ -n gpu-operator --create-namespace \ nvidia/gpu-operator \ --set driver.repository=${PRIVATE_REGISTRY} \ --set driver.version=${VERSION} \ --set driver.imagePullSecrets={$REGISTRY_SECRET_NAME} \ --set driver.licensingConfig.configMapName=licensing-config
前面的命令使用默认配置安装 Operator。有关配置选项的信息,请参阅 常用 Chart 自定义选项。