2.15. 为 pod 分配 GPU
基于属性的 GPU 分配启用对 OpenShift Container Platform 中图形处理单元(GPU)资源分配进行调优的控制,允许 pod 根据特定设备属性请求 GPU,包括产品名称、GPU 内存容量、计算能力、供应商名称和驱动程序版本。这些属性由第三方动态资源分配(DRA)驱动程序公开。
基于属性的 GPU 分配只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
2.15.1. 关于为工作负载分配 GPU 复制链接链接已复制到粘贴板!
基于属性的 GPU 分配可让 pod 根据特定设备属性请求图形处理单元(GPU)。这样可确保每个 pod 接收其所需的确切 GPU 规格。
基于属性的资源分配需要您安装动态资源分配(DRA)驱动程序。DRA 驱动程序是在集群中的每个节点上运行的第三方应用程序,与该节点的硬件进行接口。
DRA 驱动程序公告 OpenShift Container Platform 可用于精确 GPU 选择的多个 GPU 设备属性,包括以下属性:
- 产品名称
- Pod 可以根据性能要求或与应用程序的兼容性来请求准确的 GPU 模型。这样可确保工作负载将最适合的硬件用于其任务。
- GPU 内存容量
- Pod 可以请求具有最小或最大内存容量的 GPU,如 8 GB、16 GB 或 40 GB。这对内存密集型工作负载(如大型 AI 模型培训或数据处理)非常有用。此属性可让应用程序分配满足内存需要的 GPU,而无需过度使用或利用资源。
- 计算能力
- Pod 可以根据 GPU 的计算功能请求 GPU,如支持的 CUDA 版本。Pod 可以目标与应用程序框架兼容的 GPU,并利用优化的处理功能。
- Power 和 Thermal Profiles
- Pod 可以根据功耗或热特征请求 GPU,使对电源敏感或温度敏感的应用程序能够高效操作。这在能源或冷却限制是因素的高密度环境中特别有用。
- 设备 ID 和供应商 ID
- Pod 可以根据 GPU 的硬件特定请求请求 GPU,允许需要特定供应商或设备类型的应用程序发出目标请求。
- 驱动程序版本
- Pod 可以请求运行特定驱动程序版本的 GPU,确保与应用程序依赖项兼容并最大化 GPU 功能访问。
2.15.2. 关于 GPU 分配对象 复制链接链接已复制到粘贴板!
基于属性的 GPU 分配使用以下对象来提供核心图形处理单元(GPU)分配功能。所有这些 API 类型都包含在 resource.k8s.io/v1beta2
API 组中。
- 设备类
设备类是 pod 可以声明以及如何在声明中选择特定设备属性的设备类别。有些设备驱动程序包含自己的设备类。或者,管理员可以创建设备类。设备类包含一个设备选择器,它是一个通用表达式语言 (CEL) 表达式,如果设备满足请求,则必须评估为 true。
以下示例
DeviceClass
对象选择由driver.example.com
设备驱动程序管理的任何设备:设备类对象示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 资源片段
- 每个节点上的 Dynamic Resource Allocation (DRA)驱动程序会创建和管理 集群中的资源片段。资源片段表示附加到节点的一个或多个 GPU 资源。在 pod 中创建并使用资源声明时,OpenShift Container Platform 使用资源片段查找可访问所请求资源的节点。在为资源声明找到合格的资源片段后,OpenShift Container Platform 调度程序会使用分配详情更新资源声明,将资源分配给资源声明,并将 pod 调度到可访问资源的节点。
- 资源声明模板
集群管理员和操作员可以创建 资源声明模板,从特定设备类请求 GPU。资源声明模板为 pod 提供对独立的类似资源的访问。OpenShift Container Platform 使用资源声明模板为 pod 生成资源声明。OpenShift Container Platform 从模板生成的每个资源声明都绑定到特定的 pod。当 pod 终止时,OpenShift Container Platform 会删除对应的资源声明。
以下示例资源声明模板请求
example-device-class
设备类中的设备。资源声明模板对象示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 资源声明
管理员和操作员可以创建 资源声明,从特定设备类请求 GPU。资源声明与资源声明模板不同,方法是允许您与多个 pod 共享 GPU。另外,当请求 pod 终止时,资源声明不会被删除。
以下示例资源声明模板使用 CEL 表达式来请求位于特定大小的
example-device-class
设备类中的特定设备。资源声明对象示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
有关配置资源声明、资源声明模板的更多信息,请参阅 "Dynamic Resource Allocation" ( Kubernetes 文档)。
有关向 pod 添加资源声明的详情,请参考"将资源声明添加到 pod"。
后续步骤
2.15.3. 将资源声明添加到 pod 复制链接链接已复制到粘贴板!
基于属性的 GPU 分配使用资源声明和资源声明模板,允许您为 pod 中的容器请求特定的图形处理单元(GPU)。资源声明可以和多个容器一起使用,但资源声明模板只能用于一个容器。如需更多信息,请参阅附加资源部分中的"使用设备属性配置设备分配 "。
以下流程中的示例创建了资源声明模板,将特定的 GPU 分配给 container0
,以及一个资源声明来在 container1
和 container2
之间共享 GPU。
先决条件
- 已安装 Dynamic Resource Allocation (DRA)驱动程序。有关 DRA 的更多信息,请参阅 "动态资源分配" ( Kubernetes 文档)。
- 已创建一个资源片段。
- 已创建资源声明和/或资源声明模板。
您可以通过编辑名为
cluster
的FeatureGate
CR 为集群启用所需的技术预览功能:FeatureGate
CR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 启用所需的功能。
警告在集群中启用
TechPreviewNoUpgrade
功能集无法撤消,并会阻止次版本更新。此功能集允许您在测试集群中启用这些技术预览功能,您可以在测试集群中完全测试它们。不要在生产环境集群中启用此功能。
流程
通过创建类似如下的 YAML 文件来创建 pod:
请求资源的 pod 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 CRD 对象:
oc create -f <file_name>.yaml
$ oc create -f <file_name>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
有关配置 pod 资源请求的更多信息,请参阅 "Dynamic 资源分配" ( Kubernetes 文档)。