什么是 NVIDIA GPU OPERATOR?了解其安装、功能以及如何在 Kubernetes 环境中有效管理 GPU 资源以扩展 AI/ML 工作负载。
译自 Essential Guide to NVIDIA GPU Operator in Kubernetes,作者 Sameer Kulkarni; Sanket Sudake。
随着人工智能 (AI) 和机器学习 (ML) 工作负载在复杂性和规模上不断增长,对强大且高效的计算资源的需求变得更加关键。在 Kubernetes 上运行工作负载可以让您利用可扩展性和自我修复功能,但是,在管理和优化 GPU 资源方面存在挑战。这就是 GPU OPERATOR和插件发挥作用的地方。它们提供了一种在 Kubernetes 中部署和管理 GPU 的解决方案。
有一些 GPU OPERATOR,例如 英特尔设备插件OPERATOR,AMD GPU OPERATOR 和 NVIDIA GPU OPERATOR。但是,NVIDIA GPU OPERATOR 是最受欢迎的OPERATOR之一。它提供了一个全面的解决方案,可以简化 Kubernetes 环境中 GPU 的部署、管理和优化。
在这篇文章中,我们将深入探讨 NVIDIA GPU OPERATOR及其功能,并了解一些基本结构,这些结构使您能够使用这些功能。让我们开始吧!
在 Kubernetes 集群中管理 GPU 可能是一项艰巨的任务。传统方法通常需要手动安装和配置 GPU 驱动程序,这既费时又容易出错。此外,利用高级 GPU 功能并确保 GPU 与其他系统组件之间高效的数据传输需要专门的知识和工具。如果没有简化的方法,这些挑战会阻碍 AI/ML 工作负载的性能和可扩展性。
NVIDIA GPU OPERATOR提供了多种功能。它使在 Kubernetes 上设置 GPU 驱动程序及其配置变得轻而易举。当需要在给定节点上运行多个 AI 工作负载时,使用 vGPU、多实例 GPU (MIG) 和 GPU 时间切片等高级功能的能力至关重要。此外,GPU 需要与其他应用程序/GPU 以及存储设置进行快速通信。GPUDirect RDMA、GPU Direct 存储和 GDR Copy 在实现这一点方面发挥着重要作用。GPU OPERATOR有助于轻松地将所有这些功能以及更多功能引入您的 Kubernetes 集群。
要利用 NVIDIA GPU OPERATOR的功能来管理 Kubernetes 集群中的 GPU 资源,您需要遵循结构化的安装过程并满足某些先决条件。
在安装 NVIDIA GPU OPERATOR之前,请确保满足以下先决条件:
按照以下步骤在您的 Kubernetes 集群上安装 NVIDIA GPU OPERATOR。
helm repo add nvidia https://nvidia.github.io/gpu-operator
helm repo update
kubectl create namespace gpu-operator
helm install --namespace gpu-operator gpu-operator nvidia/gpu-operator
kubectl get pods -n gpu-operator
您应该看到 GPU OPERATOR及其组件在 gpu-operator 命名空间中运行。
$ kubectl describe nodes
Name: infracloud01
Roles: control-plane
Labels: beta.kubernetes.io/arch=amd64
beta.kubernetes.io/os=linux
...
nvidia.com/gpu.deploy.container-toolkit=true
nvidia.com/gpu.deploy.dcgm=true
nvidia.com/gpu.deploy.dcgm-exporter=true
nvidia.com/gpu.deploy.device-plugin=true
nvidia.com/gpu.deploy.driver=true
nvidia.com/gpu.deploy.gpu-feature-discovery=true
nvidia.com/gpu.deploy.node-status-exporter=true
nvidia.com/gpu.deploy.operator-validator=true
nvidia.com/gpu.present=true
Annotations: node.alpha.kubernetes.io/ttl: 0
nvidia.com/gpu-driver-upgrade-enabled: true
projectcalico.org/IPv4Address: 192.168.0.52/24
...
Capacity:
cpu: 32
ephemeral-storage: 982345180Ki
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 131600376Ki
pods: 110
Allocatable:
cpu: 32
ephemeral-storage: 905329316390
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 131497976Ki
pods: 110
...
查找指示节点已启用 GPU 并已配置的注释和标签。
您现在可以通过在集群中部署示例 CUDA VectorAdd 应用程序来测试您的设置。示例应用程序将两个向量加在一起并请求 1 个 gpu 资源。GPU 分配请求由 GPU OPERATOR处理。
cat << EOF | kubectl create -f -
apiVersion: v1
kind: Pod
metadata:
name: cuda-vectoradd
spec:
restartPolicy: OnFailure
containers:
- name: cuda-vectoradd
image: "nvidia/samples:vectoradd-cuda11.2.1"
resources:
limits:
nvidia.com/gpu: 1
EOF
pod/cuda-vectoradd created
$ kubectl logs cuda-vectoradd
[Vector addition of 50000 elements]
Copy input data from the host memory to the CUDA device
CUDA kernel launch with 196 blocks of 256 threads
Copy output data from the CUDA device to the host memory
Test PASSED
Done
让我们详细了解 GPU OPERATOR的一些关键技术。
GPU 并发是 GPU 利用其并行处理能力同时执行多个操作的能力。此功能对于提高 AI/ML 工作负载的性能、效率和可扩展性至关重要。通过并行处理,GPU 可以显着加快训练和推理速度,管理更大、更复杂的数据集,并提供实时响应。
vGPU(虚拟 GPU)、多实例 GPU(MIG)和 GPU 时间切片是支持 GPU 并发在各种场景中通过不同机制实现的关键技术。以下是每种技术的简要概述。
NVIDIA GPUDirect RDMA (远程直接内存访问) 和 GPUDirect Storage (GDS) 是旨在优化高性能计算应用程序数据传输的先进技术。GPUDirect RDMA 允许不同节点上的 GPU 之间直接通信,绕过 CPU 并降低延迟。这种直接数据路径对于需要快速、低延迟通信的应用程序至关重要,例如分布式 AI 训练和实时数据处理。通过最大限度地减少 CPU 的参与,GPUDirect RDMA 显着提高了性能和效率,从而实现更快的计算和更可扩展的 AI 工作负载。
类似地,GPUDirect Storage 促进 GPU 与存储设备之间的直接数据传输,绕过 CPU 和系统内存。这种对存储设备(例如 NVMe SSD)的直接访问加速了数据吞吐量并降低了延迟,这对数据密集型应用程序至关重要。通过简化数据流,GPUDirect Storage 确保 GPU 可以快速访问和处理大型数据集,从而实现更快、更高效的计算。
(带有和不带有 GPUDirect Storage 的存储访问模式)
GDR 复制 代表 GPUDirect RDMA 复制,它是一个基于 GPUDirect RDMA 的低延迟 GPU 内存复制库。该库的一个突出用例是在 GPU 等待接收数据和来自主机的信号以启动处理操作时,在 CPU(主机)和 GPU 之间传输数据。GDR 复制使用 GPUDirect RDMA 功能将 GPU 内存的一部分暴露给外部设备(例如 NIC、CPU 等)以执行 CPU 驱动的复制操作。这使得 GDR 复制能够以更低的延迟和更高的吞吐量执行 CPU 和 GPU 内存之间的复制操作,与 GPU 驱动的内存复制操作(例如 cudaMemcpy)相比,对于较小的数据大小而言。
(使用 cudaMemcpy 和 GDR 复制的主机-设备内存复制操作)
上图显示了使用 GDR 复制与 cudaMemcpy 的主机-设备内存复制操作之间的区别。cudaMemcpy 是 GPU 驱动的操作,它使用 GPU DMA 引擎来移动数据。这涉及 DMA 引擎开销,用于较小的数据大小。GDR 复制允许 CPU 通过 BAR 映射直接访问 GPU 内存,从而实现低延迟数据传输。
NVIDIA GPU OPERATOR使用多个自定义资源定义 (CRD) 来管理 Kubernetes 上 GPU 驱动程序和相关组件的生命周期。以下是一些主要的 CRD。
集群策略自定义资源定义 (CRD) 是 NVIDIA GPU OPERATOR的核心。它充当在 Kubernetes 集群上部署所有必要的 NVIDIA 软件组件的单点配置。ClusterPolicy CRD 允许管理员指定和管理 GPU 相关组件的整个生命周期,包括驱动程序、运行时、设备插件和监控工具。
自定义资源允许管理重要属性的配置,例如:
NvidiaDriver 自定义资源定义 (CRD) 特别管理 NVIDIA 驱动程序在 Kubernetes 节点上的部署和生命周期。它确保安装并运行正确版本的驱动程序,与 GPU 硬件和 Kubernetes 环境兼容。虽然驱动程序配置也可以由集群策略 CR 控制,但驱动程序 CR 允许为每个节点指定驱动程序类型和版本。
以下是可以使用它管理的一些配置。
在这篇文章中,我们看到了 NVIDIA GPU OPERATOR是如何成为在 Kubernetes 集群中优化和管理 GPU 资源的关键工具,它专门针对满足 AI 和 ML 工作负载的苛刻需求而设计。它自动执行 GPU 驱动程序的安装和维护,简化了高级 GPU 功能(如虚拟 GPU (vGPU)、多实例 GPU (MIG)、GPU 时间切片、GPUDirect RDMA 和 GPUDirect 存储)的配置,并显着提高了性能和效率。
我们还检查了 GPU OPERATOR支持的关键技术,例如 GPUDirect RDMA 和 GPUDirect 存储,它们对于低延迟、高速数据传输至关重要。我们还讨论了 GPU 共享技术,如 vGPU、MIG 和 GPU 时间切片,以及这三种技术如何旨在实现共享 GPU 访问、提高效率和降低成本,但适用于不同的用例和硬件配置。
总之,NVIDIA GPU OPERATOR对于在 Kubernetes 环境中有效地管理 GPU 资源至关重要,它支持先进的技术并简化复杂的配置,从而为 AI 和 ML 工作负载带来卓越的性能和可扩展性。
现在您已经了解了 NVIDIA GPU OPERATOR及其功能和关键概念,您可以邀请 AI 和 GPU 云专家 来帮助您构建自己的 AI 云。
如果您发现这篇文章有用且信息丰富,请订阅我们的每周时事通讯以获取更多类似的文章。我们很乐意听到您对这篇文章的看法,因此请在 LinkedIn 上与 Sameer 和 Sanket 开始对话。