第 9 章 管理分布式工作负载
在 OpenShift AI 中,Py TyJob、RayJob 和 RayCluster 等分布式工作负载由相应的工作负载操作员创建和管理。Kueue 提供队列和准入控制,并与这些操作器集成,以决定工作负载是否可以根据集群范围的配额运行。
您可以为分布式工作负载环境执行高级配置,如更改 CodeFlare Operator 的默认行为或为 RDMA 设置集群。
9.1. 为分布式工作负载配置配额管理 复制链接链接已复制到粘贴板!
通过创建 Kueue 资源,为分布式工作负载配置配额。配额可确保您可以在多个数据科学项目之间共享资源。
先决条件
-
已使用
cluster-admin角色登录 OpenShift。 - 您已下载并安装 OpenShift 命令行界面 (CLI)。请参阅安装 OpenShift CLI (OpenShift Dedicated) 或 安装 OpenShift CLI (Red Hat OpenShift Service on AWS)。
- 已安装并激活了 Kueue Operator 的红帽构建,如 使用 Kue 配置工作负载管理 中所述。
- 您已安装了所需的分布式工作负载组件,如 安装分布式工作负载组件 中所述。
- 您已创建了包含工作台的数据科学项目,工作台正在运行包含 CodeFlare SDK 的默认工作台镜像,如 Standard Data Science workbench。有关如何创建项目的详情,请参考 创建数据科学项目。
- 您有足够的资源。除了基本的 OpenShift AI 资源外,还需要 1.6 vCPU 和 2 GiB 内存来部署分布式工作负载基础架构。
- 资源在集群中物理可用。有关 Kue 资源的更多信息,请参阅 Red Hat build of Kueue 文档。
如果要使用图形处理单元(GPU),在 OpenShift AI 中启用了 GPU 支持。如果使用 NVIDIA GPU,请参阅启用 NVIDIA GPU。如果使用 AMD GPU,请参阅 AMD GPU 集成。
注意在 OpenShift AI 中,红帽只支持用于分布式工作负载的 NVIDIA GPU 加速器和 AMD GPU 加速器。
流程
在一个终端窗口中,如果您还没有以集群管理员登录到 OpenShift 集群,请登录 OpenShift CLI,如下例所示:
oc login <openshift_cluster_url> -u <admin_username> -p <password>
$ oc login <openshift_cluster_url> -u <admin_username> -p <password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证资源类别是否存在或创建自定义类别,如下所示:
检查
ResourceFlavor是否已已存在:oc get resourceflavors
$ oc get resourceflavorsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果
ResourceFlavor已存在,且您需要修改它,请编辑它:oc edit resourceflavor <existing_resourceflavor_name>
$ oc edit resourceflavor <existing_resourceflavor_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果
ResourceFlavor不存在,或者您想要自定义资源,请创建一个名为default_flavor.yaml的文件,并使用以下内容填充它:空的 Kueue 资源类型
apiVersion: kueue.x-k8s.io/v1beta1 kind: ResourceFlavor metadata: name: <example_resource_flavor>
apiVersion: kueue.x-k8s.io/v1beta1 kind: ResourceFlavor metadata: name: <example_resource_flavor>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如需了解更多示例,请参阅 Kueue 资源配置示例。
执行以下操作之一:
- 如果要修改现有资源类别,请保存更改。
如果要创建新资源类别,请应用配置来创建
ResourceFlavor对象:oc apply -f default_flavor.yaml
$ oc apply -f default_flavor.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证默认集群队列是否存在或创建自定义队列,如下所示:
注意当 Kueue 集成被激活时,OpenShift AI 会自动创建一个默认集群队列。您可以验证和修改默认集群队列,或创建自定义队列。
检查
ClusterQueue是否已存在:oc get clusterqueues
$ oc get clusterqueuesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果
ClusterQueue已存在,且您需要修改它(例如,要更改资源),请将它进行编辑:oc edit clusterqueue <existing_clusterqueue_name>
$ oc edit clusterqueue <existing_clusterqueue_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果
ClusterQueue不存在或您想要自定义,请创建一个名为cluster_queue.yaml的文件,并使用以下内容填充它:集群队列示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将示例配额值(9 CPU、36 GiB 内存和 5 NVIDIA GPU)替换为集群队列的适当值。如果使用 AMD GPU,在示例代码中将
nvidia.com/gpu替换为amd.com/gpu。如需了解更多示例,请参阅 Kueue 资源配置示例。您必须为每个用户可以请求的资源指定一个配额,即使请求的值为 0,更新
spec.resourceGroups部分,如下所示:-
在
coveredResources列表中包含资源名称。 -
在
flavor.resources部分中指定资源名称和nominalQuota,即使nominalQuota值为 0。
-
在
执行以下操作之一:
- 如果要修改现有集群队列,请保存更改。
如果要创建新集群队列,请应用配置来创建
ClusterQueue对象:oc apply -f cluster_queue.yaml
$ oc apply -f cluster_queue.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证项目命名空间是否存在指向集群队列的本地队列,或创建自定义队列,如下所示:
注意如果在 OpenShift AI 仪表板中启用了 Kueue,则会为 Kue management 自动配置从仪表板创建的新项目。在这些命名空间中,默认的本地队列可能已存在。您可以验证和修改本地队列,或创建自定义队列。
检查项目命名空间的
LocalQueue是否已存在:oc get localqueues -n <project_namespace>
$ oc get localqueues -n <project_namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果
LocalQueue已存在,并且您需要修改它(例如,指向不同的ClusterQueue),请将其编辑为位:oc edit localqueue <existing_localqueue_name> -n <project_namespace>
$ oc edit localqueue <existing_localqueue_name> -n <project_namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果
LocalQueue不存在或您想要自定义,请创建一个名为local_queue.yaml的文件,并使用以下内容填充它:本地队列示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
相应地替换
名称、namespace和clusterQueue值。 执行以下操作之一:
- 如果您要修改现有的本地队列,请保存更改。
如果要创建新的本地队列,请应用配置来创建
LocalQueue对象:oc apply -f local_queue.yaml
$ oc apply -f local_queue.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
检查项目中本地队列的状态,如下所示:
oc get localqueues -n <project_namespace>
$ oc get localqueues -n <project_namespace>