运行 RayCluster

在启用了 Kueue 的环境里运行 RayClusters

本页面展示了如何利用 Kueue 的调度和服务管理能力来运行 RayCluster。

本指南适用于批处理用户,他们需要对 Kueue 有基本的了解。 更多信息,请参见 Kueue 概述。

开始之前

  1. 请确保你使用的是 Kueue v0.6.0 版本或更高版本,以及 KubeRay v1.1.0 或更高版本。

  2. 请参见 Administer cluster quotas 了解初始 Kueue 设置的详细信息。

  3. 请参见 KubeRay Installation 了解 KubeRay 的安装和配置详情。

RayCluster 定义

当在 Kueue 上运行 RayClusters时,请考虑以下方面:

a. 队列选择

目标 本地队列应在 RayCluster 配置的 metadata.labels 部分指定。

metadata:
  labels:
    kueue.x-k8s.io/queue-name: user-queue

b. 配置资源需求

工作负载的资源需求可以在 spec 中配置。

spec:
  headGroupSpec:
    template:
      spec:
        containers:
          - resources:
              requests:
                cpu: "1"
  workerGroupSpecs:
    - template:
        spec:
          containers:
            - resources:
                requests:
                  cpu: "1"

请注意,RayCluster 在存在期间会占用资源配额。为了优化资源管理,你应该删除不再使用的 RayCluster。

c. Suspend 控制

Kueue 控制 RayCluster 的 spec.suspend 字段。当 RayCluster 被 Kueue 接纳时,Kueue 会通过将 spec.suspend 设置为 false 来取消暂停,无论其之前的值是什么。

d. 限制

  • 有限的 Worker Groups:由于 Kueue 工作负载最多可以有 8 个 PodSets,spec.workerGroupSpecs 的最大数量为 7
  • 内建自动扩缩禁用:Kueue 管理 RayCluster 的资源分配;因此,集群的内部自动扩缩机制需要禁用

示例 {#examples} RayCluster

RayCluster 如下所示:

apiVersion: ray.io/v1
kind: RayCluster
metadata:
  name: raycluster-complete
  labels:
    kueue.x-k8s.io/queue-name: user-queue
spec:
  rayVersion: '2.55.1'
  headGroupSpec:
    serviceType: ClusterIP
    rayStartParams:
      dashboard-host: '0.0.0.0'
    template:
      spec:
        containers:
          - name: ray-head
            image: rayproject/ray:2.55.1
            resources:
              limits:
                cpu: "1"
                memory: "5Gi"
              requests:
                cpu: "1"
                memory: "5Gi"
            ports:
              - containerPort: 6379
                name: gcs
              - containerPort: 8265
                name: dashboard
              - containerPort: 10001
                name: client
            lifecycle:
              preStop:
                exec:
                  command: ["/bin/sh","-c","ray stop"]
            volumeMounts:
              - mountPath: /tmp/ray
                name: ray-logs
        volumes:
          - name: ray-logs
            emptyDir: {}
  workerGroupSpecs:
    - replicas: 1
      minReplicas: 1
      maxReplicas: 10
      groupName: small-group
      rayStartParams: {}
      template:
        spec:
          containers:
            - name: ray-worker
              image: rayproject/ray:2.55.1
              resources:
                limits:
                  cpu: "1"
                  memory: "1Gi"
                requests:
                  cpu: "1"
                  memory: "1Gi"
              lifecycle:
                preStop:
                  exec:
                    command: ["/bin/sh","-c","ray stop"]
              volumeMounts:
                - mountPath: /tmp/ray
                  name: ray-logs
          volumes:
            - name: ray-logs
              emptyDir: {}

你可以使用 CLI 提交 Ray Job,或者登录 Ray Head 并按照此 示例在 kind 集群中执行作业。