硬件加速器
硬件加速器
摘要
第 1 章 关于硬件加速器 复制链接链接已复制到粘贴板!
专用硬件加速器在新兴人工智能和机器学习(AI/ML)行业中发挥了关键作用。具体来说,硬件加速器对于培训以及支持这种新技术的大型语言和其他基础模型至关重要。数据科学家、数据工程师、ML 工程师和开发人员可以利用专门的硬件加速数据密集型转换和模型开发及服务。其中大多数生态系统都是开源的,有大量贡献合作伙伴和开源基础。
Red Hat OpenShift Container Platform 支持卡和外围硬件,添加组成硬件加速器的处理单元:
- 图形处理单元(GPU)
- Neural processing units (NPUs)
- 特定于应用程序的集成电路(ASIC)
- 数据处理单元(DPU)
专用硬件加速器为 AI/ML 开发提供了丰富的优点:
- 一个平台适用于所有功能
- 面向开发人员、数据工程师、数据科学家和 DevOps 的协作环境
- 使用 Operator 扩展功能
- Operator 允许将 AI/ML 功能引入到 OpenShift Container Platform
- 混合云支持
- 对模型开发、交付和部署的内部支持
- 支持 AI/ML 工作负载
- 模型测试、迭代、集成、提升,并作为服务提供给生产环境中
红帽提供了一个优化的平台,可在 Linux (kernel 和 userspace) 和 Kubernetes 层的 Red Hat Enterprise Linux (RHEL)和 OpenShift Container Platform 平台中启用这些专用硬件加速器。为此,红帽在单个企业级 AI 应用平台中结合了 Red Hat OpenShift AI 和 Red Hat OpenShift Container Platform 的成熟功能。
硬件 Operator 使用 Kubernetes 集群的操作框架来启用所需的加速器资源。您还可以手动部署提供的设备插件或守护进程集。此插件在集群中注册 GPU。
某些专用硬件加速器设计为在必须维护安全环境以进行开发和测试的断开连接的环境中工作。
1.1. 硬件加速器 复制链接链接已复制到粘贴板!
Red Hat OpenShift Container Platform 启用以下硬件加速器:
- NVIDIA GPU
- AMD Instinct® GPU
- Intel® Gaudi®
第 2 章 NVIDIA GPU 架构 复制链接链接已复制到粘贴板!
NVIDIA 支持在 OpenShift Container Platform 上使用图形处理单元 (GPU) 资源。OpenShift Container Platform 是一个以安全为中心的、强化的 Kubernetes 平台,由红帽开发并提供支持,用于大规模部署和管理 Kubernetes 集群。OpenShift Container Platform 包括对 Kubernetes 的增强,以便用户可以轻松地配置和使用 NVIDIA GPU 资源来加快工作负载。
NVIDIA GPU Operator 利用 OpenShift Container Platform 中的 Operator 框架来管理运行 GPU 加速工作负载所需的 NVIDIA 软件组件的完整生命周期。
这些组件包括 NVIDIA 驱动程序(为了启用 CUDA)、GPU 的 Kubernetes 设备插件、NVID Container Toolkit、使用 GPU 特性发现(GFD)、基于 DCGM 的监控等的自动节点标记。
NVIDIA GPU Operator 的支持仅由 NVIDIA 提供。有关从 NVIDIA 获取支持的更多信息,请参阅 NVIDIA 支持。
2.1. NVIDIA GPU 先决条件 复制链接链接已复制到粘贴板!
- 包括至少一个 GPU worker 节点的,可正常工作的 OpenShift 集群。
-
以
cluster-admin
身份访问 OpenShift 集群,以执行必要的步骤。 -
已安装 OpenShift CLI (
oc
)。 -
已安装节点功能发现 (NFD) Operator 并创建了
nodefeaturediscovery
实例。
2.2. NVIDIA GPU 启用 复制链接链接已复制到粘贴板!
下图显示了如何为 OpenShift 启用 GPU 架构:
图 2.1. NVIDIA GPU 启用
从 NVIDIA Ampere 系列开始,在 GPU 上支持 MIG。有关支持 MIG 的 GPU 列表,请参阅 NVIDIA MIG 用户指南。
2.2.1. GPU 和裸机 复制链接链接已复制到粘贴板!
您可以在 NVIDIA 认证的裸机服务器上部署 OpenShift Container Platform,但有一些限制:
- control plane 节点可以是 CPU 节点。
Worker 节点必须是 GPU 节点,只要 AI/ML 工作负载在这些 worker 节点上执行。
另外,worker 节点可以托管一个或多个 GPU,但它们必须是相同的类型。例如,一个节点可以有两个 NVIDIA A100 GPU,但不支持在一个节点中带有一个 A100 GPU 和一个 T4 GPU。Kubernetes 的 NVIDIA 设备插件不支持在同一节点上混合不同的 GPU 模型。
- 在使用 OpenShift 时,请注意,需要一个、三个或更多个服务器。不支持带有两个服务器的集群。单一服务器部署称为单一节点 openShift (SNO),使用此配置的 OpenShift 环境不具有高可用性。
您可以选择以下方法之一来访问容器化 GPU:
- GPU passthrough(GPU 透传)
- 多实例 GPU (MIG)
2.2.2. GPU 和虚拟化 复制链接链接已复制到粘贴板!
虽然许多开发人员和企业都在转型到容器化应用程序和无服务器基础架构,但仍然有大量对在虚拟机(VM)上运行的应用程序进行开发和维护的需求。Red Hat OpenShift Virtualization 提供此功能,使企业能够将虚拟机合并到集群中的容器化工作流中。
您可以选择以下方法之一将 worker 节点连接到 GPU:
- 用于访问和使用虚拟机(VM)中的 GPU 硬件的 GPU 透传。
- 当 GPU 计算的容量没有因为工作负载而饱和时,可以进行 GPU (vGPU) 时间分片。
2.2.3. GPU 和 vSphere 复制链接链接已复制到粘贴板!
您可以在可托管不同 GPU 类型的 NVIDIA 认证的 VMware vSphere 服务器上部署 OpenShift Container Platform。
如果虚拟机使用了 vGPU 实例,必须在 hypervisor 中安装 NVIDIA GPU 驱动程序。对于 VMware vSphere,此主机驱动程序以 VIB 文件的形式提供。
可分配给 worker 节点虚拟机的最大 vGPU 数量取决于 vSphere 的版本:
- vSphere 7.0:每个虚拟机最多 4 个 vGPU
vSphere 8.0:每个虚拟机最大 8 个 vGPU
注意vSphere 8.0 引入了对与一个虚拟机关联的多个完整或部分同配置集的支持。
您可以选择以下方法之一将 worker 节点附加到 GPU:
- 用于访问和使用虚拟机(VM)中的 GPU 硬件的 GPU 透传
- 当不需要所有 GPU 时,可以使用 GPU (vGPU) 时间分片
与裸机部署类似,需要一个或多个服务器。不支持带有两个服务器的集群。
2.2.4. GPU 和 Red Hat KVM 复制链接链接已复制到粘贴板!
您可以在基于 NVIDIA 认证的虚拟机 (KVM) 服务器上使用 OpenShift Container Platform。
与裸机部署类似,需要一个或多个服务器。不支持带有两个服务器的集群。
但是,与裸机部署不同,您可以在服务器中使用不同类型的 GPU。这是因为您可以将这些 GPU 分配给作为 Kubernetes 节点的不同虚拟机。唯一的限制是,一个 Kubernetes 节点在自己本身上必须具有相同的 GPU 类型。
您可以选择以下方法之一来访问容器化 GPU:
- 用于访问和使用虚拟机(VM)中的 GPU 硬件的 GPU 透传
- 当不需要所有 GPU 时,可以使用 GPU (vGPU) 时间分片
要启用 vGPU 功能,必须在主机级别安装特殊驱动程序。这个驱动程序作为 RPM 软件包提供。对于 GPU 透传分配,不需要这个主机驱动程序。
2.2.5. GPU 和 CSP 复制链接链接已复制到粘贴板!
您可以将 OpenShift Container Platform 部署到主要的云服务供应商 (CSP) 之一:Amazon Web Services (AWS)、Google Cloud Platform (GCP)或 Microsoft Azure。
有两种操作模式:完全管理的部署和自我管理的部署。
- 在完全管理的部署中,一切都由红帽与 CSP 合作实现自动化。您可以通过 CSP Web 控制台请求 OpenShift 实例,集群由红帽自动创建并完全管理。您不必担心环境中节点故障或错误。红帽完全负责维护集群的正常运行时间。完全管理的服务在 AWS、Azure 和 GCP 上提供。对于 AWS,OpenShift 服务名为 (Red Hat OpenShift Service on AWS)。对于 Azure,该服务称为 Azure Red Hat OpenShift。对于 GCP,该服务在 GCP 上称为 OpenShift Dedicated。
- 在自我管理的部署中,您需要自行实例化和维护 OpenShift 集群。红帽提供了 OpenShift-install 工具来支持 OpenShift 集群的部署。自我管理的服务可全局提供给所有 CSP。
重要的是,此计算实例是一个 GPU 加速的计算实例,并且 GPU 类型与 NVIDIA AI Enterprise 支持的 GPU 列表匹配。例如,T4、V100 和 A100 是此列表的一部分。
您可以选择以下方法之一来访问容器化 GPU:
- 用于访问和使用虚拟机(VM)中的 GPU 硬件的 GPU 透传。
- 当不需要整个 GPU 时,可以进行 GPU (vGPU) 时间分片。
2.2.6. GPU 和 Red Hat Device Edge 复制链接链接已复制到粘贴板!
Red Hat Device Edge 提供对 MicroShift 的访问。MicroShift 提供了单节点部署的简单性和资源约束(边缘)计算所需的功能和服务。Red Hat Device Edge 满足在资源受限环境中部署的裸机、虚拟、容器化或 Kubernetes 工作负载的需求。
您可以在 Red Hat Device Edge 环境中的容器上启用 NVIDIA GPU。
您可以使用 GPU 透传来访问容器化 GPU。
2.3. GPU 共享方法 复制链接链接已复制到粘贴板!
红帽和 NVIDIA 已开发了 GPU 并发和共享机制,以简化企业级 OpenShift Container Platform 集群上的 GPU 加速计算。
应用程序通常会有不同的计算要求,这可能会使 GPU 使用率不足。为每个工作负载提供正确的计算资源数量对于降低部署成本和最大化 GPU 使用率至关重要。
用于提高 GPU 使用率的并发机制,范围从编程模型 API 到系统软件和硬件分区,包括虚拟化。以下列表显示了 GPU 并发机制:
- 计算统一设备架构 (CUDA) 流
- Time-slicing(时间分片)
- CUDA 多进程服务 (MPS)
- 多实例 GPU (MIG)
- 使用 vGPU 的虚拟化
在将 GPU 并发机制用于不同的 OpenShift Container Platform 场景时,请考虑以下 GPU 共享建议:
- 裸机
- vGPU 不可用。考虑使用支持 MIG 的卡。
- 虚拟机
- vGPU 是最佳选择。
- 裸机中的较旧的 NVIDIA 卡中没有 MIG
- 考虑使用 time-slicing。
- 具有多个 GPU 的虚拟机,您需要透传和 vGPU
- 考虑使用单独的虚拟机。
- 使用 OpenShift Virtualization 和多个 GPU 的裸机
- 对于托管的虚拟机,考虑使用透传,对呀容器,考虑使用时间分片。
其他资源
2.3.1. CUDA 流 复制链接链接已复制到粘贴板!
Compute Unified Device Architecture (CUDA) 是由 NVIDIA 开发的并行计算平台和编程模型,用于 GPU 上的常规计算。
流是 GPU 上问题顺序执行的操作序列。CUDA 命令通常在默认流中按顺序执行,任务在前面的任务完成后才会启动。
跨不同流的异步处理操作允许并行执行任务。在一个流中发布的任务之前、期间或另一个任务签发到另一个流后运行。这允许 GPU 以任何规定的顺序同时运行多个任务,从而提高性能。
其他资源
2.3.2. Time-slicing(时间分片) 复制链接链接已复制到粘贴板!
当您运行多个 CUDA 应用程序时,在超载 GPU 上调度 GPU 时间的交集工作负载。
您可以通过为 GPU 定义一组副本来启用 Kubernetes 上的 GPU 的时间,每个副本都可以独立分发到 pod 来运行工作负载。与多实例 GPU (MIG) 不同,在副本之间不存在内存或故障隔离,但对于某些工作负载,这优于根本不进行共享。在内部,GPU 时间分片用于从同一底层 GPU 将多个工作负载分配到不同的副本。
对于时间分片,您可以应用一个集群范围的默认配置。您还可以应用特定于节点的配置。例如,您只能将时间分片配置应用到具有 Tesla T4 GPU 的节点,而不能将节点改为使用其他 GPU 模型。
您可以通过应用集群范围的默认配置来组合这两种方法,然后标记节点以授予这些节点接收特定于节点的配置。
2.3.3. CUDA 多进程服务 复制链接链接已复制到粘贴板!
CUDA 多进程服务 (MPS) 允许单个 GPU 使用多个 CUDA 进程。进程在 GPU 上并行运行,消除了 GPU 计算资源的饱和。MPS 还支持并发执行或重叠内核操作和从不同进程复制的内存,以增强利用率。
其他资源
2.3.4. 多实例 GPU 复制链接链接已复制到粘贴板!
使用多实例 GPU (MIG),您可以将 GPU 计算单元和内存分成多个 MIG 实例。每个实例都代表了从系统的角度来看的独立 GPU 设备,并可连接到节点上运行的任何应用程序、容器或虚拟机。使用 GPU 的软件将每个 MIG 实例视为单独的 GPU。
当您有一个不需要整个 GPU 完全功能的应用程序时,MIG 很有用。新的 NVIDIA Ampere 架构的 MIG 功能允许您将硬件资源分成多个 GPU 实例,每个实例都可作为独立的 CUDA GPU 提供给操作系统。
NVIDIA GPU Operator 版本 1.7.0 及更高版本为 A100 和 A30 Ampere 卡提供 MIG 支持。这些 GPU 实例旨在支持最多 7 个独立的 CUDA 应用程序,以便它们与专用硬件资源完全隔离。
其他资源
2.3.5. 使用 vGPU 的虚拟化 复制链接链接已复制到粘贴板!
虚拟机 (VM) 可以使用 NVIDIA vGPU 直接访问单个物理 GPU。您可以创建虚拟 GPU,供虚拟机在企业之间共享,并由其他设备访问。
此功能将 GPU 性能与 vGPU 提供的管理和安全优势相结合。vGPU 提供的其他好处包括虚拟机环境的主动管理和监控、混合 VDI 和计算工作负载的工作负载平衡以及多个虚拟机之间的资源共享。
其他资源
2.4. OpenShift Container Platform 的 NVIDIA GPU 功能 复制链接链接已复制到粘贴板!
- NVIDIA Container Toolkit
- NVIDIA Container Toolkit 可让您创建并运行 GPU 加速容器。工具包包括容器运行时库和工具,用于自动配置容器以使用 NVIDIA GPU。
- NVIDIA AI Enterprise
NVIDIA AI Enterprise 是端到端的云原生 AI 和数据分析软件套件,由 NVIDIA 认证系统进行优化、认证和支持。
NVIDIA AI Enterprise 包括对 Red Hat OpenShift Container Platform 的支持。支持以下安装方法:
- 带有 GPU Passthrough 的裸机或 VMware vSphere 上的 OpenShift Container Platform。
- 带有 NVIDIA vGPU 的 VMware vSphere 上的 OpenShift Container Platform。
- GPU 功能发现
NVIDIA GPU Feature Discovery for Kubernetes 是一个软件组件,可让您为节点上可用的 GPU 自动生成标签。GPU 功能发现使用节点功能发现(NFD)来执行此标记。
Node Feature Discovery Operator (NFD)通过使用硬件特定信息标记节点来管理 OpenShift Container Platform 集群中硬件功能和配置的发现。NFD 使用特定于节点的属性标记主机,如 PCI 卡、内核、操作系统版本等。
您可以通过搜索 "Node Feature Discovery" 在 Operator Hub 中找到 NFD Operator。
- 带有 OpenShift Virtualization 的 NVIDIA GPU Operator
到目前为止,GPU Operator 只置备了 worker 节点来运行 GPU 加速的容器。现在,GPU Operator 也可以用来置备 worker 节点来运行 GPU 加速的虚拟机 (VM)。
您可以根据将 GPU 工作负载配置为在这些节点上运行,将 GPU Operator 配置为将不同的软件组件部署到 worker 节点。
- GPU 监控仪表板
- 您可以安装监控仪表板,在 OpenShift Container Platform Web 控制台的集群 Observe 页面中显示 GPU 用量信息。GPU 使用率信息包括可用 GPU 数、功耗(watts)、温度(Celsius)、利用率(百分比)以及其他每个 GPU 的指标。
第 3 章 AMD GPU Operator 复制链接链接已复制到粘贴板!
AMD Instinct GPU 加速器与 OpenShift Container Platform 集群中的 AMD GPU Operator 相结合,可让您无缝利用计算功能进行机器学习、生成 AI 和 GPU 加速的应用程序。
本文档提供了启用、配置和测试 AMD GPU Operator 所需的信息。如需更多信息,请参阅 AMD Instinct™ 加速器。
3.1. 关于 AMD GPU Operator 复制链接链接已复制到粘贴板!
AMD GPU Operator 的硬件加速功能为数据科学家和开发人员提供增强的性能和成本效率,使用 Red Hat OpenShift AI 创建人工智能和机器学习(AI/ML)应用程序。加快 GPU 功能的特定区域可以最小化 CPU 处理和内存用量,提高整体应用程序速度、内存消耗和带宽限制。
3.2. 安装 AMD GPU Operator 复制链接链接已复制到粘贴板!
作为集群管理员,您可以使用 OpenShift CLI 和 Web 控制台安装 AMD GPU Operator。这是一个多步骤的过程,需要安装 Node Feature Discovery Operator、内核模块管理 Operator,然后是 AMD GPU Operator。使用以下步骤安装 Operator 的 AMD 社区版本。
后续步骤
- 安装 Node Feature Discovery Operator。
- 安装内核模块管理 Operator。
- 安装和配置 AMD GPU Operator。
3.3. 测试 AMD GPU Operator 复制链接链接已复制到粘贴板!
使用以下步骤测试 ROCmInfo 安装并查看 AMD MI210 GPU 的日志。
流程
创建测试 ROCmInfo 的 YAML 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
rocminfo
pod:oc create -f rocminfo.yaml
$ oc create -f rocminfo.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
apiVersion: v1 pod/rocminfo created
apiVersion: v1 pod/rocminfo created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用一个 MI210 GPU 检查
rocmnfo
日志:oc logs rocminfo | grep -A5 "Agent"
$ oc logs rocminfo | grep -A5 "Agent"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除 Pod:
oc delete -f rocminfo.yaml
$ oc delete -f rocminfo.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
pod "rocminfo" deleted
pod "rocminfo" deleted
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 4 章 Intel Gaudi AI Accelerators 复制链接链接已复制到粘贴板!
您可以为 OpenShift Container Platform generative AI 和机器学习(AI/ML)应用程序使用 Intel Gaudi AI 加速器。Intel Gaudi AI 加速器为优化深度学习工作负载提供了一个具有成本效益、灵活且可扩展的解决方案。
红帽支持 Intel Gaudi 2 和 Intel Gaudi 3 设备。Intel Gaudi 3 设备在培训速度和能源效率方面提供了显著改进。
4.1. Intel Gaudi AI Accelerators 先决条件 复制链接链接已复制到粘贴板!
- 您有一个正常工作的 OpenShift Container Platform 集群,至少有一个 GPU worker 节点。
- 您可以使用 cluster-admin 访问 OpenShift Container Platform 集群,以执行必要的步骤。
-
已安装 OpenShift CLI (
oc
)。 -
已安装 Node Feature Discovery (NFD) Operator,并创建了
NodeFeatureDiscovery
实例。
NVIDIA GPUDirect Remote Direct Memory Access (RDMA) 允许一个计算机中的应用程序直接访问另一个计算机的内存,而无需通过操作系统访问。这提供了一个在进程中绕过内核干预的功能,释放资源并大大减少了处理网络通信所需的 CPU 开销。这可用于在集群中分发 GPU 加速的工作负载。因为 RDMA 非常适合高带宽和低延迟应用程序,因此这使其成为大数据和机器学习应用程序的理想选择。
目前,NVIDIA GPUDirect RDMA 有三种配置方法:
- 共享设备
- 这个方法允许 NVIDIA GPUDirect RDMA 设备在公开设备的 OpenShift Container Platform worker 节点上的多个 pod 共享。
- 主机设备
- 此方法通过在 pod 上创建额外的主机网络,在 worker 节点上提供直接物理以太网访问。插件允许将网络设备从主机网络命名空间移到 pod 上的网络命名空间。
- SR-IOV 传统设备
- Single Root IO 虚拟化(SR-IOV)方法可以在多个 pod 间共享一个单个网络设备,如以太网适配器。SR-IOV 会将设备(在主机节点上被识别为物理功能(PF))分段为多个虚拟功能(VF)。VF 和其它网络设备一样使用。
每种方法都可以在 NVIDIA GPUDirect RDMA over Converged Ethernet (RoCE)或 Infiniband 基础架构中使用,提供总计 6 种配置方法。
5.1. NVIDIA GPUDirect RDMA 的先决条件 复制链接链接已复制到粘贴板!
NVIDIA GPUDirect RDMA 配置的所有方法都需要安装特定的 Operator。使用以下步骤安装 Operator:
- 安装 Node Feature Discovery Operator。
- 安装 SR-IOV Operator。
- 安装 NVIDIA Network Operator (NVIDIA 文档)。
- 安装 NVIDIA GPU Operator (NVIDIA 文档)。
5.2. 禁用 IRDMA 内核模块 复制链接链接已复制到粘贴板!
在一些系统中,包括 DellR750xa,IRDMA 内核模块在卸载和加载 DOCA 驱动程序时为 NVIDIA Network Operator 造成问题。使用以下步骤禁用该模块。
流程
运行以下命令生成以下机器配置文件:
cat <<EOF > 99-machine-config-blacklist-irdma.yaml
$ cat <<EOF > 99-machine-config-blacklist-irdma.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,在集群中创建机器配置并等待节点重新引导:
oc create -f 99-machine-config-blacklist-irdma.yaml
$ oc create -f 99-machine-config-blacklist-irdma.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
machineconfig.machineconfiguration.openshift.io/99-worker-blacklist-irdma created
machineconfig.machineconfiguration.openshift.io/99-worker-blacklist-irdma created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,在每个节点上验证模块尚未加载的 debug pod:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3. 创建持久性命名规则 复制链接链接已复制到粘贴板!
在某些情况下,设备名称在重启后不会保留。例如,在 R760xa 系统上 Mellanox 设备重启后可能会重命名。您可以使用 MachineConfig
设置持久性来避免此问题。
流程
将 worker 节点的 MAC 地址名称收集到文件中,并为需要保留的接口提供名称。这个示例使用文件
70-persistent-net.rules
来存储详情。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将该文件转换为没有换行符的 base64 字符串,并将输出设置为变量
PERSIST
:PERSIST=`cat 70-persistent-net.rules| base64 -w 0` echo $PERSIST U1VCU1lTVEVNPT0ibmV0IixBQ1RJT049PSJhZGQiLEFUVFJ7YWRkcmVzc309PSJiODozZjpkMjozYjo1MToyOCIsQVRUUnt0eXBlfT09IjEiLE5BTUU9ImliczJmMCIKU1VCU1lTVEVNPT0ibmV0IixBQ1RJT049PSJhZGQiLEFUVFJ7YWRkcmVzc309PSJiODozZjpkMjozYjo1MToyOSIsQVRUUnt0eXBlfT09IjEiLE5BTUU9ImVuczhmMG5wMCIKU1VCU1lTVEVNPT0ibmV0IixBQ1RJT049PSJhZGQiLEFUVFJ7YWRkcmVzc309PSJiODozZjpkMjpmMDozNjpkMCIsQVRUUnt0eXBlfT09IjEiLE5BTUU9ImliczJmMCIKU1VCU1lTVEVNPT0ibmV0IixBQ1RJT049PSJhZGQiLEFUVFJ7YWRkcmVzc309PSJiODozZjpkMjpmMDozNjpkMSIsQVRUUnt0eXBlfT09IjEiLE5BTUU9ImVuczhmMG5wMCIK
$ PERSIST=`cat 70-persistent-net.rules| base64 -w 0` $ echo $PERSIST U1VCU1lTVEVNPT0ibmV0IixBQ1RJT049PSJhZGQiLEFUVFJ7YWRkcmVzc309PSJiODozZjpkMjozYjo1MToyOCIsQVRUUnt0eXBlfT09IjEiLE5BTUU9ImliczJmMCIKU1VCU1lTVEVNPT0ibmV0IixBQ1RJT049PSJhZGQiLEFUVFJ7YWRkcmVzc309PSJiODozZjpkMjozYjo1MToyOSIsQVRUUnt0eXBlfT09IjEiLE5BTUU9ImVuczhmMG5wMCIKU1VCU1lTVEVNPT0ibmV0IixBQ1RJT049PSJhZGQiLEFUVFJ7YWRkcmVzc309PSJiODozZjpkMjpmMDozNjpkMCIsQVRUUnt0eXBlfT09IjEiLE5BTUU9ImliczJmMCIKU1VCU1lTVEVNPT0ibmV0IixBQ1RJT049PSJhZGQiLEFUVFJ7YWRkcmVzc309PSJiODozZjpkMjpmMDozNjpkMSIsQVRUUnt0eXBlfT09IjEiLE5BTUU9ImVuczhmMG5wMCIK
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,创建机器配置并在自定义资源文件中设置 base64 编码:
cat <<EOF > 99-machine-config-udev-network.yaml
$ cat <<EOF > 99-machine-config-udev-network.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令在集群中创建机器配置:
oc create -f 99-machine-config-udev-network.yaml
$ oc create -f 99-machine-config-udev-network.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
machineconfig.machineconfiguration.openshift.io/99-machine-config-udev-network created
machineconfig.machineconfiguration.openshift.io/99-machine-config-udev-network created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
get mcp
命令查看机器配置状态:oc get mcp
$ oc get mcp
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-9adfe851c2c14d9598eea5ec3df6c187 True False False 1 1 1 0 6h21m worker rendered-worker-4568f1b174066b4b1a4de794cf538fee False True False 2 0 0 0 6h21m
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-9adfe851c2c14d9598eea5ec3df6c187 True False False 1 1 1 0 6h21m worker rendered-worker-4568f1b174066b4b1a4de794cf538fee False True False 2 0 0 0 6h21m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
节点将重新引导,并在 update 字段返回到 false
时,您可以通过查看 debug pod 中的设备来验证节点上的设备。
5.4. 配置 NFD Operator 复制链接链接已复制到粘贴板!
Node Feature Discovery(NFD)Operator通过将节点标记为硬件特定信息来管理 OpenShift Container Platform 集群中硬件功能和配置的检测。NFD 使用特定于节点的属性标记主机,如 PCI 卡、内核、操作系统版本等。
先决条件
- 已安装 NFD Operator。
流程
运行以下命令,验证 Operator 是否已安装并运行
openshift-nfd
命名空间中的 pod:oc get pods -n openshift-nfd
$ oc get pods -n openshift-nfd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE nfd-controller-manager-8698c88cdd-t8gbc 2/2 Running 0 2m
NAME READY STATUS RESTARTS AGE nfd-controller-manager-8698c88cdd-t8gbc 2/2 Running 0 2m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 NFD 控制器运行时,生成
NodeFeatureDiscovery
实例,并将其添加到集群中。NFD Operator 的
ClusterServiceVersion
规格提供默认值,包括作为 Operator 有效负载一部分的 NFD 操作对象镜像。运行以下命令来检索其值:NFD_OPERAND_IMAGE=`echo $(oc get csv -n openshift-nfd -o json | jq -r '.items[0].metadata.annotations["alm-examples"]') | jq -r '.[] | select(.kind == "NodeFeatureDiscovery") | .spec.operand.image'`
$ NFD_OPERAND_IMAGE=`echo $(oc get csv -n openshift-nfd -o json | jq -r '.items[0].metadata.annotations["alm-examples"]') | jq -r '.[] | select(.kind == "NodeFeatureDiscovery") | .spec.operand.image'`
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:在默认的
deviceClassWhiteList
字段中添加条目来支持更多网络适配器,如 NVIDIA BlueField DPUs。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建 'NodeFeatureDiscovery' 实例:
oc create -f nfd-instance.yaml
$ oc create -f nfd-instance.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
nodefeaturediscovery.nfd.openshift.io/nfd-instance created
nodefeaturediscovery.nfd.openshift.io/nfd-instance created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,通过查看
openshift-nfd
命名空间中的 pod 来验证实例是否已启动并正在运行:oc get pods -n openshift-nfd
$ oc get pods -n openshift-nfd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 等待短暂的时间,然后验证 NFD 是否已向节点添加标签。NFD 标签使用
feature.node.kubernetes.io
前缀,以便您可以轻松过滤它们。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确认发现了一个网络设备:
oc describe node | grep -E 'Roles|pci' | grep pci-15b3
$ oc describe node | grep -E 'Roles|pci' | grep pci-15b3 feature.node.kubernetes.io/pci-15b3.present=true feature.node.kubernetes.io/pci-15b3.sriov.capable=true feature.node.kubernetes.io/pci-15b3.present=true feature.node.kubernetes.io/pci-15b3.sriov.capable=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.5. 配置 SR-IOV Operator 复制链接链接已复制到粘贴板!
单根 I/O 虚拟化(SR-IOV)通过从单一设备在多个 pod 之间提供共享来提高 NVIDIA GPUDirect RDMA 的性能。
先决条件
- 已安装 SR-IOV Operator。
流程
运行以下命令,验证 Operator 是否已安装并运行
openshift-sriov-network-operator
命名空间中的 pod:oc get pods -n openshift-sriov-network-operator
$ oc get pods -n openshift-sriov-network-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE sriov-network-operator-7cb6c49868-89486 1/1 Running 0 22s
NAME READY STATUS RESTARTS AGE sriov-network-operator-7cb6c49868-89486 1/1 Running 0 22s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于默认的
SriovOperatorConfig
CR 以用于 MLNX_OFED 容器,请运行这个命令来更新以下值:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令在集群中创建资源:
oc create -f sriov-operator-config.yaml
$ oc create -f sriov-operator-config.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
sriovoperatorconfig.sriovnetwork.openshift.io/default created
sriovoperatorconfig.sriovnetwork.openshift.io/default created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令修补 sriov-operator,以便 MOFED 容器可以使用它:
oc patch sriovoperatorconfig default --type=merge -n openshift-sriov-network-operator --patch '{ "spec": { "configDaemonNodeSelector": { "network.nvidia.com/operator.mofed.wait": "false", "node-role.kubernetes.io/worker": "", "feature.node.kubernetes.io/pci-15b3.sriov.capable": "true" } } }'
$ oc patch sriovoperatorconfig default --type=merge -n openshift-sriov-network-operator --patch '{ "spec": { "configDaemonNodeSelector": { "network.nvidia.com/operator.mofed.wait": "false", "node-role.kubernetes.io/worker": "", "feature.node.kubernetes.io/pci-15b3.sriov.capable": "true" } } }'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
sriovoperatorconfig.sriovnetwork.openshift.io/default patched
sriovoperatorconfig.sriovnetwork.openshift.io/default patched
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.6. 配置 NVIDIA network Operator 复制链接链接已复制到粘贴板!
NVIDIA network Operator 管理 NVIDIA 网络资源和网络相关组件,如驱动程序和设备插件来启用 NVIDIA GPUDirect RDMA 工作负载。
先决条件
- 已安装 NVIDIA network Operator。
流程
运行以下命令,验证 network Operator 是否已安装并运行,确认控制器是否在
nvidia-network-operator
命名空间中运行:oc get pods -n nvidia-network-operator
$ oc get pods -n nvidia-network-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE nvidia-network-operator-controller-manager-6f7d6956cd-fw5wg 1/1 Running 0 5m
NAME READY STATUS RESTARTS AGE nvidia-network-operator-controller-manager-6f7d6956cd-fw5wg 1/1 Running 0 5m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 Operator 运行时,创建
NicClusterPolicy
自定义资源文件。您选择的设备取决于您的系统配置。在这个示例中,Infiniband 接口ibs2f0
是硬编码的,用作共享的 NVIDIA GPUDirect RDMA 设备。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令在集群中创建
NicClusterPolicy
自定义资源:oc create -f network-sharedrdma-nic-cluster-policy.yaml
$ oc create -f network-sharedrdma-nic-cluster-policy.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
nicclusterpolicy.mellanox.com/nic-cluster-policy created
nicclusterpolicy.mellanox.com/nic-cluster-policy created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 DOCA/MOFED 容器中运行以下命令来验证
NicClusterPolicy
:oc get pods -n nvidia-network-operator
$ oc get pods -n nvidia-network-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow rsh
到mofed
容器,运行以下命令来检查状态:MOFED_POD=$(oc get pods -n nvidia-network-operator -o name | grep mofed) oc rsh -n nvidia-network-operator -c mofed-container ${MOFED_POD}
$ MOFED_POD=$(oc get pods -n nvidia-network-operator -o name | grep mofed) $ oc rsh -n nvidia-network-operator -c mofed-container ${MOFED_POD} sh-5.1# ofed_info -s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
OFED-internal-24.07-0.6.1:
OFED-internal-24.07-0.6.1:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ibdev2netdev -v
sh-5.1# ibdev2netdev -v
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
0000:0d:00.0 mlx5_0 (MT41692 - 900-9D3B4-00EN-EA0) BlueField-3 E-series SuperNIC 400GbE/NDR single port QSFP112, PCIe Gen5.0 x16 FHHL, Crypto Enabled, 16GB DDR5, BMC, Tall Bracket fw 32.42.1000 port 1 (ACTIVE) ==> ibs2f0 (Up) 0000:a0:00.0 mlx5_1 (MT41692 - 900-9D3B4-00EN-EA0) BlueField-3 E-series SuperNIC 400GbE/NDR single port QSFP112, PCIe Gen5.0 x16 FHHL, Crypto Enabled, 16GB DDR5, BMC, Tall Bracket fw 32.42.1000 port 1 (ACTIVE) ==> ens8f0np0 (Up)
0000:0d:00.0 mlx5_0 (MT41692 - 900-9D3B4-00EN-EA0) BlueField-3 E-series SuperNIC 400GbE/NDR single port QSFP112, PCIe Gen5.0 x16 FHHL, Crypto Enabled, 16GB DDR5, BMC, Tall Bracket fw 32.42.1000 port 1 (ACTIVE) ==> ibs2f0 (Up) 0000:a0:00.0 mlx5_1 (MT41692 - 900-9D3B4-00EN-EA0) BlueField-3 E-series SuperNIC 400GbE/NDR single port QSFP112, PCIe Gen5.0 x16 FHHL, Crypto Enabled, 16GB DDR5, BMC, Tall Bracket fw 32.42.1000 port 1 (ACTIVE) ==> ens8f0np0 (Up)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
IPoIBNetwork
自定义资源文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令在集群中创建
IPoIBNetwork
资源:oc create -f ipoib-network.yaml
$ oc create -f ipoib-network.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
ipoibnetwork.mellanox.com/example-ipoibnetwork created
ipoibnetwork.mellanox.com/example-ipoibnetwork created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为其他接口创建一个
MacvlanNetwork
自定义资源文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令在集群中创建资源:
oc create -f macvlan-network.yaml
$ oc create -f macvlan-network.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
macvlannetwork.mellanox.com/rdmashared-net created
macvlannetwork.mellanox.com/rdmashared-net created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.7. 配置 GPU Operator 复制链接链接已复制到粘贴板!
GPU Operator 自动管理 NVIDIA 驱动程序、GPU 的设备插件、NVIDIA Container Toolkit 和 GPU 置备所需的其他组件。
先决条件
- 已安装 GPU Operator。
流程
运行以下命令,检查 Operator pod 是否正在运行以查看命名空间中的 pod:
oc get pods -n nvidia-gpu-operator
$ oc get pods -n nvidia-gpu-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE gpu-operator-b4cb7d74-zxpwq 1/1 Running 0 32s
NAME READY STATUS RESTARTS AGE gpu-operator-b4cb7d74-zxpwq 1/1 Running 0 32s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 GPU 集群策略自定义资源文件,如下例所示:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当生成 GPU
ClusterPolicy
自定义资源时,运行以下命令在集群中创建资源:oc create -f gpu-cluster-policy.yaml
$ oc create -f gpu-cluster-policy.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
clusterpolicy.nvidia.com/gpu-cluster-policy created
clusterpolicy.nvidia.com/gpu-cluster-policy created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令验证 Operator 是否已安装并正在运行:
oc get pods -n nvidia-gpu-operator
$ oc get pods -n nvidia-gpu-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:验证 pod 正在运行时,远程 shell 到 NVIDIA 驱动程序 daemonset pod,并确认已载入 NVIDIA 模块。具体来说,请确保载入
nvidia_peermem
。oc rsh -n nvidia-gpu-operator $(oc -n nvidia-gpu-operator get pod -o name -l app.kubernetes.io/component=nvidia-driver)
$ oc rsh -n nvidia-gpu-operator $(oc -n nvidia-gpu-operator get pod -o name -l app.kubernetes.io/component=nvidia-driver) sh-4.4# lsmod|grep nvidia
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
可选:运行
nvidia-smi
工具来显示驱动程序和硬件的详情:
nvidia-smi
sh-4.4# nvidia-smi
+ .输出示例
当您仍然在驱动程序 pod 中时,使用
nvidia-smi
命令将 GPU 时钟设置为最大值:oc rsh -n nvidia-gpu-operator nvidia-driver-daemonset-416.94.202410172137-0-ndhzc
$ oc rsh -n nvidia-gpu-operator nvidia-driver-daemonset-416.94.202410172137-0-ndhzc sh-4.4# nvidia-smi -i 0 -lgc $(nvidia-smi -i 0 --query-supported-clocks=graphics --format=csv,noheader,nounits | sort -h | tail -n 1)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
GPU clocks set to "(gpuClkMin 1740, gpuClkMax 1740)" for GPU 00000000:61:00.0 All done.
GPU clocks set to "(gpuClkMin 1740, gpuClkMax 1740)" for GPU 00000000:61:00.0 All done.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow nvidia-smi -i 1 -lgc $(nvidia-smi -i 1 --query-supported-clocks=graphics --format=csv,noheader,nounits | sort -h | tail -n 1)
sh-4.4# nvidia-smi -i 1 -lgc $(nvidia-smi -i 1 --query-supported-clocks=graphics --format=csv,noheader,nounits | sort -h | tail -n 1)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
GPU clocks set to "(gpuClkMin 1740, gpuClkMax 1740)" for GPU 00000000:E1:00.0 All done.
GPU clocks set to "(gpuClkMin 1740, gpuClkMax 1740)" for GPU 00000000:E1:00.0 All done.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,从节点描述视角验证资源是否可用:
oc describe node -l node-role.kubernetes.io/worker=| grep -E 'Capacity:|Allocatable:' -A9
$ oc describe node -l node-role.kubernetes.io/worker=| grep -E 'Capacity:|Allocatable:' -A9
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.8. 创建机器配置 复制链接链接已复制到粘贴板!
在创建资源 pod 之前,您需要创建 machineconfig.yaml
自定义资源 (CR) 来提供 GPU 和网络资源的访问权限,而无需用户权限。
流程
生成
Machineconfig
CR:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.9. 创建工作负载 pod 复制链接链接已复制到粘贴板!
使用本节中的步骤为共享和主机设备创建工作负载 pod。
5.9.2. 在 RoCE 上创建主机设备 RDMA 复制链接链接已复制到粘贴板!
为 NVIDIA Network Operator 为主机设备 Remote Direct Memory Access (RDMA) 创建工作负载 pod,并测试 pod 配置。
先决条件
- 确保 Operator 正在运行。
-
删除
NicClusterPolicy
自定义资源 (CR) (如果存在)。
流程
生成一个新的主机设备
NicClusterPolicy
(CR),如下所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令在集群中创建
NicClusterPolicy
CR:oc create -f network-hostdev-nic-cluster-policy.yaml
$ oc create -f network-hostdev-nic-cluster-policy.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
nicclusterpolicy.mellanox.com/nic-cluster-policy created
nicclusterpolicy.mellanox.com/nic-cluster-policy created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 DOCA/MOFED 容器中使用以下命令验证主机设备
NicClusterPolicy
CR:oc get pods -n nvidia-network-operator
$ oc get pods -n nvidia-network-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令确认资源出现在集群
oc describe node
部分中:oc describe node -l node-role.kubernetes.io/worker=| grep -E 'Capacity:|Allocatable:' -A7
$ oc describe node -l node-role.kubernetes.io/worker=| grep -E 'Capacity:|Allocatable:' -A7
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
HostDeviceNetwork
CR 文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令在集群中创建
HostDeviceNetwork
资源:oc create -f hostdev-network.yaml
$ oc create -f hostdev-network.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
hostdevicenetwork.mellanox.com/hostdev-net created
hostdevicenetwork.mellanox.com/hostdev-net created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令确认资源出现在集群
oc describe node
部分中:oc describe node -l node-role.kubernetes.io/worker=| grep -E 'Capacity:|Allocatable:' -A8
$ oc describe node -l node-role.kubernetes.io/worker=| grep -E 'Capacity:|Allocatable:' -A8
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.9.3. 在 RoCE 上创建 SR-IOV 旧模式 RDMA 复制链接链接已复制到粘贴板!
在 RoCE 上配置单根 I/O 虚拟化 (SR-IOV) 旧模式主机设备 RDMA。
流程
生成一个新的主机设备
NicClusterPolicy
自定义资源 (CR):Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令在集群中创建策略:
oc create -f network-sriovleg-nic-cluster-policy.yaml
$ oc create -f network-sriovleg-nic-cluster-policy.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
nicclusterpolicy.mellanox.com/nic-cluster-policy created
nicclusterpolicy.mellanox.com/nic-cluster-policy created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 DOCA/MOFED 容器中使用以下命令验证 pod:
oc get pods -n nvidia-network-operator
$ oc get pods -n nvidia-network-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE mofed-rhcos4.16-696886fcb4-ds-4mb42 2/2 Running 0 40s mofed-rhcos4.16-696886fcb4-ds-8knwq 2/2 Running 0 40s nvidia-network-operator-controller-manager-68d547dbbd-qsdkf 1/1 Running 13 (4d ago) 4d21h
NAME READY STATUS RESTARTS AGE mofed-rhcos4.16-696886fcb4-ds-4mb42 2/2 Running 0 40s mofed-rhcos4.16-696886fcb4-ds-8knwq 2/2 Running 0 40s nvidia-network-operator-controller-manager-68d547dbbd-qsdkf 1/1 Running 13 (4d ago) 4d21h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为您要在 SR-IOV 传统模式下运行的设备生成虚拟功能 (VF) 的
SriovNetworkNodePolicy
CR。请参见以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令在集群中创建 CR:
注意确保启用了 SR-IOV 全局启用。如需更多信息,请参阅无法启用 SR-IOV,并在 Red Hat Enterprise Linux 中接收消息 "not enough MMIO resources for SR-IOV "。
oc create -f sriov-network-node-policy.yaml
$ oc create -f sriov-network-node-policy.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
sriovnetworknodepolicy.sriovnetwork.openshift.io/sriov-legacy-policy created
sriovnetworknodepolicy.sriovnetwork.openshift.io/sriov-legacy-policy created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 每个节点都被禁用调度。节点重新引导以应用配置。您可以使用以下命令查看节点:
oc get nodes
$ oc get nodes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME STATUS ROLES AGE VERSION edge-19.edge.lab.eng.rdu2.redhat.com Ready control-plane,master,worker 5d v1.29.8+632b078 nvd-srv-32.nvidia.eng.rdu2.dc.redhat.com Ready worker 4d22h v1.29.8+632b078 nvd-srv-33.nvidia.eng.rdu2.dc.redhat.com NotReady,SchedulingDisabled worker 4d22h v1.29.8+632b078
NAME STATUS ROLES AGE VERSION edge-19.edge.lab.eng.rdu2.redhat.com Ready control-plane,master,worker 5d v1.29.8+632b078 nvd-srv-32.nvidia.eng.rdu2.dc.redhat.com Ready worker 4d22h v1.29.8+632b078 nvd-srv-33.nvidia.eng.rdu2.dc.redhat.com NotReady,SchedulingDisabled worker 4d22h v1.29.8+632b078
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 节点重启后,通过在每个节点中打开 debug pod 来验证 VF 接口是否存在。运行以下命令:
a$ oc debug node/nvd-srv-33.nvidia.eng.rdu2.dc.redhat.com
a$ oc debug node/nvd-srv-33.nvidia.eng.rdu2.dc.redhat.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 如有必要,在第二个节点上重复前面的步骤。
可选:使用以下命令确认资源出现在集群
oc describe node
部分中:oc describe node -l node-role.kubernetes.io/worker=| grep -E 'Capacity:|Allocatable:' -A8
$ oc describe node -l node-role.kubernetes.io/worker=| grep -E 'Capacity:|Allocatable:' -A8
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow SR-IOV 传统模式的 VF 就绪后,生成
SriovNetwork
CR 文件。请参见以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令在集群中创建自定义资源:
oc create -f sriov-network.yaml
$ oc create -f sriov-network.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
sriovnetwork.sriovnetwork.openshift.io/sriov-network created
sriovnetwork.sriovnetwork.openshift.io/sriov-network created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.10. 验证 RDMA 连接 复制链接链接已复制到粘贴板!
确认远程直接内存访问 (RDMA) 连接在系统间正常工作,特别是传统的单根 I/O 虚拟化 (SR-IOV) 以太网。
流程
使用以下命令连接到每个
rdma-workload-client
pod:oc rsh -n default rdma-sriov-32-workload
$ oc rsh -n default rdma-sriov-32-workload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
sh-5.1#
sh-5.1#
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令,检查分配给第一个工作负载 pod 的 IP 地址。在本例中,第一个工作负载 pod 是 RDMA 测试服务器。
ip a
sh-5.1# ip a
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 分配给此 pod 的 RDMA 服务器的 IP 地址是
net1
接口。在本例中,IP 地址为192.168.4.225
。运行
ibstatus
命令以获取与每个 RDMA 设备mlx5_x
关联的link_layer
类型、以太网或 Infiniband。输出中还通过检查state
字段来显示所有 RDMA 设备的状态,该字段会显示ACTIVE
或DOWN
。ibstatus
sh-5.1# ibstatus
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要获取 worker 节点上每个 RDMA
mlx5
设备的link_layer
,请运行ibstat
命令:ibstat | egrep "Port|Base|Link"
sh-5.1# ibstat | egrep "Port|Base|Link"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 RDMA 共享设备或主机设备工作负载 pod,名为
mlx5_x
的 RDMA 设备已经已知,通常是mlx5_0
或mlx5_1
。对于 RDMA 传统 SR-IOV 工作负载 pod,您需要确定哪个 RDMA 设备与哪些虚拟功能 (VF) 子接口相关联。使用以下命令提供此信息:rdma link show
sh-5.1# rdma link show
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在这个示例中,RDMA 设备名称
mlx5_7
与net1
接口相关联。下一个命令中使用此输出来执行 RDMA 带宽测试,该测试还会验证 worker 节点之间的 RDMA 连接。运行以下
ib_write_bw
RDMA 带宽测试命令:/root/perftest/ib_write_bw -R -T 41 -s 65536 -F -x 3 -m 4096 --report_gbits -q 16 -D 60 -d mlx5_7 -p 10000 --source_ip 192.168.4.225 --use_cuda=0 --use_cuda_dmabuf
sh-5.1# /root/perftest/ib_write_bw -R -T 41 -s 65536 -F -x 3 -m 4096 --report_gbits -q 16 -D 60 -d mlx5_7 -p 10000 --source_ip 192.168.4.225 --use_cuda=0 --use_cuda_dmabuf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
-
mlx5_7
RDMA 设备在-d
交换机中传递。 -
源 IP 地址为
192.168.4.225
来启动 RDMA 服务器。 -
--use_cuda=0
,--use_cuda_dmabuf
交换表示使用 GPUDirect RDMA。
输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开另一个终端窗口,并在作为 RDMA 测试客户端 pod 的第二个工作负载 pod 上运行
oc rsh
命令:oc rsh -n default rdma-sriov-33-workload
$ oc rsh -n default rdma-sriov-33-workload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
sh-5.1#
sh-5.1#
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令,从
net1
接口获取 RDMA 测试客户端 pod IP 地址:ip a
sh-5.1# ip a
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令,获取与每个 RDMA 设备
mlx5_x
关联的link_layer
类型:ibstatus
sh-5.1# ibstatus
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:使用
ibstat
命令获取 Mellanox 卡的固件版本:ibstat
sh-5.1# ibstat
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要确定哪个 RDMA 设备与客户端工作负载 pod 使用的 Virtual Function 子接口相关联,请运行以下命令。在本例中,
net1
接口使用 RDMA 设备mlx5_2
。rdma link show
sh-5.1# rdma link show
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下
ib_write_bw
RDMA 带宽测试命令:/root/perftest/ib_write_bw -R -T 41 -s 65536 -F -x 3 -m 4096 --report_gbits -q 16 -D 60 -d mlx5_2 -p 10000 --source_ip 192.168.4.226 --use_cuda=0 --use_cuda_dmabuf 192.168.4.225
sh-5.1# /root/perftest/ib_write_bw -R -T 41 -s 65536 -F -x 3 -m 4096 --report_gbits -q 16 -D 60 -d mlx5_2 -p 10000 --source_ip 192.168.4.226 --use_cuda=0 --use_cuda_dmabuf 192.168.4.225
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
-
mlx5_2
RDMA 设备在-d
交换机中传递。 -
源 IP 地址
192.168.4.226
以及 RDMA 服务器192.168.4.225
的目标 IP 地址。 --use_cuda=0
,--use_cuda_dmabuf
交换表示使用 GPUDirect RDMA。输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 一个正的测试会在 Mpps 中看到一个预期的 BW 平均和 MsgRate。
在完成
ib_write_bw
命令后,服务器端输出也会出现在服务器 pod 中。请参见以下示例:输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
第 6 章 Dynamic Accelerator Slicer (DAS) Operator 复制链接链接已复制到粘贴板!
Dynamic Accelerator Slicer Operator 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
Dynamic Accelerator Slicer (DAS) Operator 允许您在 OpenShift Container Platform 中动态分片 GPU 加速器,而不依赖在节点引导时定义的静态分片 GPU。这可让您根据特定工作负载需求动态分片 GPU,确保有效的资源利用率。
如果您不知道集群中每个节点前需要的所有加速器分区,则动态分片很有用。
DAS Operator 目前包含 NVIDIA Multi-Instance GPU (MIG) 的参考实施,并在以后支持其他供应商(如 NVIDIA MPS 或 GPU)的其它技术。
限制:
使用 Dynamic Accelerator Slicer Operator 时有以下限制:
- 您需要识别潜在的不兼容性,并确保系统可以与各种 GPU 驱动程序和操作系统无缝配合工作。
- Operator 只适用于特定的 MIG 兼容 NVIDIA GPU 和驱动程序,如 H100 和 A100。
- Operator 无法只使用节点的 GPU 的子集。
- NVIDIA 设备插件无法与 Dynamic Accelerator Slicer Operator 一起使用来管理集群的 GPU 资源。
DAS Operator 设计为使用启用 MIG 的 GPU。它分配 MIG 片段而不是整个 GPU。安装 DAS Operator 可防止通过 NVIDIA 设备插件(如 nvidia.com/gpu: "1"
)使用标准资源请求来分配整个 GPU。
6.1. 安装 Dynamic Accelerator Slicer Operator 复制链接链接已复制到粘贴板!
作为集群管理员,您可以使用 OpenShift Container Platform Web 控制台或 OpenShift CLI 安装 Dynamic Accelerator Slicer (DAS) Operator。
6.1.1. 使用 Web 控制台安装 Dynamic Accelerator Slicer Operator 复制链接链接已复制到粘贴板!
作为集群管理员,您可以使用 OpenShift Container Platform Web 控制台安装 Dynamic Accelerator Slicer (DAS) Operator。
先决条件
-
可以使用具有
cluster-admin
权限的账户访问 OpenShift Container Platform 集群。 已安装所需的先决条件:
- cert-manager Operator for Red Hat OpenShift
- Node Feature Discovery (NFD) Operator
- NVIDIA GPU Operator
- NodeFeatureDiscovery CR
流程
为 MIG 支持配置 NVIDIA GPU Operator:
- 在 OpenShift Container Platform web 控制台中导航至 Operators → Installed Operators。
- 从安装的 Operator 列表中选择 NVIDIA GPU Operator。
- 点 ClusterPolicy 选项卡,然后点 Create ClusterPolicy。
在 YAML 编辑器中,将默认内容替换为以下集群策略配置,以禁用默认的 NVIDIA 设备插件并启用 MIG 支持:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 点 Create 应用集群策略。
-
进入到 Workloads → Pods,再选择
nvidia-gpu-operator
命名空间来监控集群策略部署。 等待 NVIDIA GPU Operator 集群策略达到
Ready
状态。您可以通过以下方法监控它:- 进入到 Operators → Installed Operators → NVIDIA GPU Operator。
-
点 ClusterPolicy 选项卡,检查状态是否显示
ready
。
-
选择
nvidia-gpu-operator
命名空间并进入到 Workloads → Pods 来验证 NVIDIA GPU Operator 命名空间中的所有 pod 是否正在运行。 使用支持 MIG 的 GPU 标签节点以启用 MIG 模式:
- 进入 Compute → Nodes。
- 选择具有 MIG 功能 GPU 的节点。
- 点 Actions → Edit Labels。
-
添加标签
nvidia.com/mig.config=all-enabled
。 - 点击 Save。
对具有 MIG 功能 GPU 的每个节点重复此操作。
重要应用 MIG 标签后,标记的节点将重新引导以启用 MIG 模式。等待节点恢复在线,然后继续。
-
通过检查
nvidia.com/mig.config=all-enabled
标签出现在 Labels 部分中,验证 GPU 节点上的 MIG 模式是否已成功启用。要找到标签,进入到 Compute → Nodes,选择 GPU 节点,然后点 Details 选项卡。
- 在 OpenShift Container Platform Web 控制台中,点击 Operators → OperatorHub。
- 在过滤器框中搜索 Dynamic Accelerator Slicer 或 DAS,以查找 DAS Operator。
- 选择 Dynamic Accelerator Slicer,再点 Install。
在 Install Operator 页中:
- 为安装模式选择 All namespaces on the cluster (default)。
- 选择 Installed Namespace → Operator recommended Namespace: Project das-operator。
-
如果创建新命名空间,请输入
das-operator
作为命名空间名称。 - 选择一个更新频道。
- 为批准策略选择 Automatic 或 Manual。
- 点 Install。
- 在 OpenShift Container Platform web 控制台中,点击 Operators → Installed Operators。
- 从列表中选择 DAS Operator。
- 在 Provided APIs 表列中,点 DASOperator。这会进入 Operator 详情页的 DAS Operator 选项卡。
- 点 Create DASOperator。这会进入 Create DASOperator YAML 视图。
在 YAML 编辑器中,粘贴以下示例:
DASOperator
CR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
DASOperator
CR 的名称必须是cluster
。
- 点 Create。
验证
验证 DAS Operator 是否已成功安装:
- 导航到 Operators → Installed Operators 页面。
-
确保
das-operator
命名空间中列出了 Dynamic Accelerator Slicer,Status 为 Succeeded。
验证 DASOperator
CR 是否已成功安装:
-
创建
DASOperator
CR 后,Web 控制台会进入 DASOperator 列表视图。当所有组件都运行时,CR 的 Status 字段将变为 Available。 可选。您可以通过在 OpenShift CLI 中运行以下命令来验证
DASOperator
CR 是否已成功安装:oc get dasoperator -n das-operator
$ oc get dasoperator -n das-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME STATUS AGE cluster Available 3m
NAME STATUS AGE cluster Available 3m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在安装过程中,Operator 可能会显示 Failed 状态。如果安装后安装成功并显示 Succeeded 信息,您可以忽略 Failed 信息。
您还可以通过检查 pod 来验证安装:
-
进入到 Workloads → Pods 页,再选择
das-operator
命名空间。 验证所有 DAS Operator 组件 pod 是否正在运行:
-
DAS-operator
pod (主 operator 控制器) -
dAS-operator-webhook
pod (webhook 服务器) -
dAS-scheduler
pod (scheduler 插件) -
DAS-daemonset
pod (仅在具有 MIG 兼容 GPU 的节点上)
-
das-daemonset
pod 只会出现在具有 MIG 兼容的 GPU 硬件的节点上。如果没有看到任何 daemonset pod,请验证集群是否有带有支持的 GPU 硬件的节点,并且 NVIDIA GPU Operator 是否已正确配置。
故障排除
如果没有安装 Operator,请使用以下步骤:
- 导航到 Operators → Installed Operators 页面,检查 Operator Subscriptions 和 Install Plans 选项卡中的 Status 项中是否有任何错误。
-
进入到 Workloads → Pods 页,在
das-operator
命名空间中检查 pod 的日志。
6.1.2. 使用 CLI 安装动态加速器 Slicer Operator 复制链接链接已复制到粘贴板!
作为集群管理员,您可以使用 OpenShift CLI 安装 Dynamic Accelerator Slicer (DAS) Operator。
先决条件
-
可以使用具有
cluster-admin
权限的账户访问 OpenShift Container Platform 集群。 -
已安装 OpenShift CLI(
oc
)。 已安装所需的先决条件:
- cert-manager Operator for Red Hat OpenShift
- Node Feature Discovery (NFD) Operator
- NVIDIA GPU Operator
- NodeFeatureDiscovery CR
流程
为 MIG 支持配置 NVIDIA GPU Operator:
应用以下集群策略来禁用默认的 NVIDIA 设备插件并启用 MIG 支持。使用以下内容创建名为
gpu-cluster-policy.yaml
的文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来应用集群策略:
oc apply -f gpu-cluster-policy.yaml
$ oc apply -f gpu-cluster-policy.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证 NVIDIA GPU Operator 集群策略是否达到
Ready
状态:oc get clusterpolicies.nvidia.com gpu-cluster-policy -w
$ oc get clusterpolicies.nvidia.com gpu-cluster-policy -w
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 等待
STATUS
列显示ready
。输出示例
NAME STATUS AGE gpu-cluster-policy ready 2025-08-14T08:56:45Z
NAME STATUS AGE gpu-cluster-policy ready 2025-08-14T08:56:45Z
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证 NVIDIA GPU Operator 命名空间中的所有 pod 是否正在运行:
oc get pods -n nvidia-gpu-operator
$ oc get pods -n nvidia-gpu-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 所有 pod 都应该会显示
Running
或Completed
状态。运行以下命令,使用 MIG 功能 GPU 标记节点以启用 MIG 模式:
oc label node $NODE_NAME nvidia.com/mig.config=all-enabled --overwrite
$ oc label node $NODE_NAME nvidia.com/mig.config=all-enabled --overwrite
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
$NODE_NAME
替换为具有 MIG 功能 GPU 的每个节点的名称。重要应用 MIG 标签后,标记的节点重新引导以启用 MIG 模式。等待节点恢复在线,然后继续。
运行以下命令验证节点是否已成功启用 MIG 模式:
oc get nodes -l nvidia.com/mig.config=all-enabled
$ oc get nodes -l nvidia.com/mig.config=all-enabled
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
为 DAS Operator 创建命名空间:
创建定义
das-operator
命名空间的以下Namespace
自定义资源(CR),并将 YAML 保存到das-namespace.yaml
文件中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令创建命名空间:
oc create -f das-namespace.yaml
$ oc create -f das-namespace.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
通过创建以下对象,在您上一步中创建的命名空间中安装 DAS Operator:
创建以下
OperatorGroup
CR,并在das-operatorgroup.yaml
文件中保存 YAML:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
OperatorGroup
CR:oc create -f das-operatorgroup.yaml
$ oc create -f das-operatorgroup.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建以下
Subscription
CR,并将 YAML 保存到das-sub.yaml
文件中:订阅示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建订阅对象:
oc create -f das-sub.yaml
$ oc create -f das-sub.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 进入
das-operator
项目:oc project das-operator
$ oc project das-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建以下
DASOperator
CR,并在das-dasoperator.yaml
文件中保存 YAML:DASOperator
CR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
DASOperator
CR 的名称必须是cluster
。
运行以下命令来创建
dasoperator
CR:oc create -f das-dasoperator.yaml
oc create -f das-dasoperator.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令验证 Operator 部署是否成功:
oc get pods
$ oc get pods
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 成功部署会显示状态为
Running
的所有 Pod。部署包括:- das-operator
- 主 Operator 控制器 pod
- das-operator-webhook
- 用于变异 pod 请求的 Webhook 服务器 pod
- das-scheduler
- 用于 MIG 分片分配的调度程序插件 pod
- das-daemonset
仅在具有 MIG 兼容 GPU 的节点上运行的 DaemonSet pod
注意das-daemonset
pod 只会出现在具有 MIG 兼容的 GPU 硬件的节点上。如果没有看到任何 daemonset pod,请验证集群是否有带有支持的 GPU 硬件的节点,并且 NVIDIA GPU Operator 是否已正确配置。
6.2. 卸载动态加速器 Slicer Operator 复制链接链接已复制到粘贴板!
根据 Operator 的安装方式,使用以下流程之一卸载 Dynamic Accelerator Slicer (DAS) Operator。
6.2.1. 使用 Web 控制台卸载 Dynamic Accelerator Slicer Operator 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform Web 控制台卸载 Dynamic Accelerator Slicer (DAS) Operator。
先决条件
-
可以使用具有
cluster-admin
权限的账户访问 OpenShift Container Platform 集群。 - DAS Operator 已安装在集群中。
流程
- 在 OpenShift Container Platform web 控制台中导航至 Operators → Installed Operators。
- 在安装的 Operator 列表中找到 Dynamic Accelerator Slicer。
-
点 DAS Operator 的 Options 菜单
并选择 Uninstall Operator。
- 在确认对话框中,点 Uninstall 确认删除。
- 浏览至 Home → Project。
- 在搜索框中搜索 das-operator 以查找 DAS Operator 项目。
-
点 das-operator 项目 旁边的 Options 菜单
,然后选择 Delete Project。
-
在确认对话框中,在对话框中键入
das-operator
,然后点 Delete 确认删除。
验证
- 导航到 Operators → Installed Operators 页面。
- 验证 Dynamic Accelerator Slicer (DAS) Operator 是否不再被列出。
可选。运行以下命令,验证
das-operator
命名空间及其资源是否已移除:oc get namespace das-operator
$ oc get namespace das-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 该命令应该会返回指示未找到命名空间的错误。
卸载 DAS Operator 会删除所有 GPU 分片分配,并可能导致运行依赖于 GPU 分片的工作负载失败。在继续卸载前,请确保没有关键工作负载使用 GPU 片段。
6.2.2. 使用 CLI 卸载动态加速器 Slicer Operator 复制链接链接已复制到粘贴板!
您可以使用 OpenShift CLI 卸载 Dynamic Accelerator Slicer (DAS) Operator。
先决条件
-
可以使用具有
cluster-admin
权限的账户访问 OpenShift Container Platform 集群。 -
已安装 OpenShift CLI(
oc
)。 - DAS Operator 已安装在集群中。
流程
运行以下命令,列出已安装的 Operator 以查找 DAS Operator 订阅:
oc get subscriptions -n das-operator
$ oc get subscriptions -n das-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME PACKAGE SOURCE CHANNEL das-operator das-operator redhat-operators stable
NAME PACKAGE SOURCE CHANNEL das-operator das-operator redhat-operators stable
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来删除订阅:
oc delete subscription das-operator -n das-operator
$ oc delete subscription das-operator -n das-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,列出并删除集群服务版本 (CSV):
oc get csv -n das-operator
$ oc get csv -n das-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete csv <csv-name> -n das-operator
$ oc delete csv <csv-name> -n das-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来删除 operator 组:
oc delete operatorgroup das-operator -n das-operator
$ oc delete operatorgroup das-operator -n das-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来删除任何剩余的
AllocationClaim
资源:oc delete allocationclaims --all -n das-operator
$ oc delete allocationclaims --all -n das-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来删除 DAS Operator 命名空间:
oc delete namespace das-operator
$ oc delete namespace das-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令验证 DAS Operator 资源是否已移除:
oc get namespace das-operator
$ oc get namespace das-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 该命令应该会返回指示未找到命名空间的错误。
运行以下命令验证没有剩余的
AllocationClaim
自定义资源定义:oc get crd | grep allocationclaim
$ oc get crd | grep allocationclaim
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 该命令应该会返回指示没有找到自定义资源定义的错误。
卸载 DAS Operator 会删除所有 GPU 分片分配,并可能导致运行依赖于 GPU 分片的工作负载失败。在继续卸载前,请确保没有关键工作负载使用 GPU 片段。
6.3. 使用 Dynamic Accelerator Slicer Operator 部署 GPU 工作负载 复制链接链接已复制到粘贴板!
您可以部署请求 GPU 片段由 Dynamic Accelerator Slicer (DAS) Operator 管理的工作负载。Operator 动态分区 GPU 加速器,并将工作负载调度到可用的 GPU 分片。
先决条件
- 在集群中有 MIG 支持的 GPU 硬件。
-
安装 NVIDIA GPU Operator,
ClusterPolicy
会显示 Ready 状态。 - 已安装 DAS Operator。
流程
运行以下命令来创建命名空间:
oc new-project cuda-workloads
oc new-project cuda-workloads
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建使用 NVIDIA MIG 资源请求 GPU 资源的部署:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来应用部署配置:
oc apply -f cuda-vectoradd-deployment.yaml
$ oc apply -f cuda-vectoradd-deployment.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令验证部署是否已创建并调度 pod:
oc get deployment cuda-vectoradd
$ oc get deployment cuda-vectoradd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY UP-TO-DATE AVAILABLE AGE cuda-vectoradd 2/2 2 2 2m
NAME READY UP-TO-DATE AVAILABLE AGE cuda-vectoradd 2/2 2 2 2m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,检查 pod 的状态:
oc get pods -l app=cuda-vectoradd
$ oc get pods -l app=cuda-vectoradd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE cuda-vectoradd-6b8c7d4f9b-abc12 1/1 Running 0 2m cuda-vectoradd-6b8c7d4f9b-def34 1/1 Running 0 2m
NAME READY STATUS RESTARTS AGE cuda-vectoradd-6b8c7d4f9b-abc12 1/1 Running 0 2m cuda-vectoradd-6b8c7d4f9b-def34 1/1 Running 0 2m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令,检查是否为部署 pod 创建
AllocationClaim
资源:oc get allocationclaims -n das-operator
$ oc get allocationclaims -n das-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME AGE 13950288-57df-4ab5-82bc-6138f646633e-harpatil000034jma-qh5fm-worker-f-57md9-cuda-vectoradd-0 2m ce997b60-a0b8-4ea4-9107-cf59b425d049-harpatil000034jma-qh5fm-worker-f-fl4wg-cuda-vectoradd-0 2m
NAME AGE 13950288-57df-4ab5-82bc-6138f646633e-harpatil000034jma-qh5fm-worker-f-57md9-cuda-vectoradd-0 2m ce997b60-a0b8-4ea4-9107-cf59b425d049-harpatil000034jma-qh5fm-worker-f-fl4wg-cuda-vectoradd-0 2m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证 GPU 片段是否已正确分配 pod 的资源分配:
oc describe pod -l app=cuda-vectoradd
$ oc describe pod -l app=cuda-vectoradd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,检查日志以验证 CUDA 示例应用程序是否已成功运行:
oc logs -l app=cuda-vectoradd
$ oc logs -l app=cuda-vectoradd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
[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
[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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,检查环境变量以验证 GPU 设备是否已正确公开给容器:
oc exec deployment/cuda-vectoradd -- env | grep -E "(NVIDIA_VISIBLE_DEVICES|CUDA_VISIBLE_DEVICES)"
$ oc exec deployment/cuda-vectoradd -- env | grep -E "(NVIDIA_VISIBLE_DEVICES|CUDA_VISIBLE_DEVICES)"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NVIDIA_VISIBLE_DEVICES=MIG-d8ac9850-d92d-5474-b238-0afeabac1652 CUDA_VISIBLE_DEVICES=MIG-d8ac9850-d92d-5474-b238-0afeabac1652
NVIDIA_VISIBLE_DEVICES=MIG-d8ac9850-d92d-5474-b238-0afeabac1652 CUDA_VISIBLE_DEVICES=MIG-d8ac9850-d92d-5474-b238-0afeabac1652
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这些环境变量表示 GPU MIG 片段已被正确分配,并出现在容器内的 CUDA 运行时。
6.4. 对动态加速器 Slicer Operator 进行故障排除 复制链接链接已复制到粘贴板!
如果您在 Dynamic Accelerator Slicer (DAS) Operator 时遇到问题,请使用以下故障排除步骤诊断和解决问题。
先决条件
- 已安装 DAS Operator。
- 您可以使用具有 cluster-admin 角色的用户访问 OpenShift Container Platform 集群。
6.4.1. 调试 DAS Operator 组件 复制链接链接已复制到粘贴板!
流程
运行以下命令,检查所有 DAS Operator 组件的状态:
oc get pods -n das-operator
$ oc get pods -n das-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,检查 DAS Operator 控制器的日志:
oc logs -n das-operator deployment/das-operator
$ oc logs -n das-operator deployment/das-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,检查 webhook 服务器的日志:
oc logs -n das-operator deployment/das-operator-webhook
$ oc logs -n das-operator deployment/das-operator-webhook
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,检查调度程序插件的日志:
oc logs -n das-operator deployment/das-scheduler
$ oc logs -n das-operator deployment/das-scheduler
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,检查设备插件 daemonset 的日志:
oc logs -n das-operator daemonset/das-daemonset
$ oc logs -n das-operator daemonset/das-daemonset
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.4.2. Monitoring AllocationClaims 复制链接链接已复制到粘贴板!
流程
运行以下命令检查活跃的
AllocationClaim
资源:oc get allocationclaims -n das-operator
$ oc get allocationclaims -n das-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME AGE 13950288-57df-4ab5-82bc-6138f646633e-harpatil000034jma-qh5fm-worker-f-57md9-cuda-vectoradd-0 5m ce997b60-a0b8-4ea4-9107-cf59b425d049-harpatil000034jma-qh5fm-worker-f-fl4wg-cuda-vectoradd-0 5m
NAME AGE 13950288-57df-4ab5-82bc-6138f646633e-harpatil000034jma-qh5fm-worker-f-57md9-cuda-vectoradd-0 5m ce997b60-a0b8-4ea4-9107-cf59b425d049-harpatil000034jma-qh5fm-worker-f-fl4wg-cuda-vectoradd-0 5m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,查看有关特定
AllocationClaim
的详细信息:oc get allocationclaims -n das-operator -o yaml
$ oc get allocationclaims -n das-operator -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例(截断)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,检查不同状态中的声明:
oc get allocationclaims -n das-operator -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.state}{"\n"}{end}'
$ oc get allocationclaims -n das-operator -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.state}{"\n"}{end}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
13950288-57df-4ab5-82bc-6138f646633e-harpatil000034jma-qh5fm-worker-f-57md9-cuda-vectoradd-0 inUse ce997b60-a0b8-4ea4-9107-cf59b425d049-harpatil000034jma-qh5fm-worker-f-fl4wg-cuda-vectoradd-0 inUse
13950288-57df-4ab5-82bc-6138f646633e-harpatil000034jma-qh5fm-worker-f-57md9-cuda-vectoradd-0 inUse ce997b60-a0b8-4ea4-9107-cf59b425d049-harpatil000034jma-qh5fm-worker-f-fl4wg-cuda-vectoradd-0 inUse
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,查看与
AllocationClaim
资源相关的事件:oc get events -n das-operator --field-selector involvedObject.kind=AllocationClaim
$ oc get events -n das-operator --field-selector involvedObject.kind=AllocationClaim
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,检查
NodeAccelerator
资源以验证 GPU 硬件检测:oc get nodeaccelerator -n das-operator
$ oc get nodeaccelerator -n das-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME AGE harpatil000034jma-qh5fm-worker-f-57md9 96m harpatil000034jma-qh5fm-worker-f-fl4wg 96m
NAME AGE harpatil000034jma-qh5fm-worker-f-57md9 96m harpatil000034jma-qh5fm-worker-f-fl4wg 96m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NodeAccelerator
资源代表 DAS Operator 检测到的 GPU 功能的节点。
其他信息
AllocationClaim
自定义资源跟踪以下信息:
- GPU UUID
- GPU 设备的唯一标识符。
- 分片位置
- GPU 上的 MIG 片段的位置。
- Pod 参考
- 请求 GPU 片段的 pod。
- 状态
-
当前的声明状态 (
staged
,created
, 或released
)。
声明以 staged
状态开始,然后当所有请求都满足后会转变为 created
。删除 pod 时,会自动清理关联的声明。
6.4.3. 验证 GPU 设备可用性 复制链接链接已复制到粘贴板!
流程
在使用 GPU 硬件的节点上,运行以下命令来验证 CDI 设备是否已创建:
oc debug node/<node-name>
$ oc debug node/<node-name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow chroot /host ls -l /var/run/cdi/
sh-4.4# chroot /host sh-4.4# ls -l /var/run/cdi/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令检查 NVIDIA GPU Operator 状态:
oc get clusterpolicies.nvidia.com -o jsonpath='{.items[0].status.state}'
$ oc get clusterpolicies.nvidia.com -o jsonpath='{.items[0].status.state}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出应显示
ready
。
6.4.4. 增加日志详细程度 复制链接链接已复制到粘贴板!
流程
获取更详细的调试信息:
运行以下命令来编辑
DASOperator
资源来提高日志详细程度:oc edit dasoperator -n das-operator
$ oc edit dasoperator -n das-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
operatorLogLevel
字段设置为Debug
或Trace
:spec: operatorLogLevel: Debug
spec: operatorLogLevel: Debug
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,并验证 Operator pod 重启并增加详细程度。
6.4.5. 常见问题和解决方案 复制链接链接已复制到粘贴板!
由于 kubernetes/kubernetes vmcore8043,如果准入失败,pod 可能会进入 UnexpectedAdmissionError
状态。由更高级别的控制器管理的 Pod 会自动重新创建。但是,naked pod 必须使用 oc delete pod
手动清理。建议使用控制器,直到上游问题解决为止。
未满足先决条件
如果 DAS Operator 无法启动或正常工作,请验证是否已安装所有先决条件:
- cert-manager
- Node Feature Discovery (NFD) Operator
- NVIDIA GPU Operator
Legal Notice
复制链接链接已复制到粘贴板!
Copyright © 2025 Red Hat
OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).
Modified versions must remove all Red Hat trademarks.
Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.
Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.