在ACK中部署Ray Cluster

开源框架Ray支持构建可扩展的人工智能(AI)和Python应用程序,广泛应用于机器学习领域。本文介绍了如何在ACK集群上部署Ray Cluster。

1. 创建集群

关于如何创建集群,请参见创建ACK托管集群;如需升级集群版本,请参见手动升级集群。创建ACK托管集群Pro且符合以下要求。

  • 集群版本:v1.24及以上。

  • 节点规格:已配置一台8 CPU 32 GB规格及以上的节点。

  • 测试环境可使用推荐的最低规格:生产环境中需以实际情况为准,如需使用GPU节点,请配置GPU节点。

    关于ECS支持的实例规格,请参见实例规格族

  • 已通过kubectl连接Kubernetes集群,且已在本地安装kubectl。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群

(可选)创建云数据库Tair

本文使用Redis实例实现Ray Cluster的容错性和高可用性,您可按需进行创建。创建阿里云云数据库 Tair(兼容 Redis)实例,且满足以下要求。

  • 新建的云数据库 Tair(兼容 Redis)实例需要与本文使用的ACK托管集群Pro处于同Region、同VPC。具体操作,请参见步骤1:创建实例

  • 添加白名单分组,允许VPC地址段访问。具体操作,请参见步骤2:设置白名单

  • 获得Redis实例的连接地址(推荐使用专有连接地址)。具体操作,请参见查看连接地址

  • 获得Redis实例的密码。具体操作,请参见修改或重置密码

2. 安装Kuberay-Operator组件

登录容器服务管理控制台,在左侧导航栏选择集群列表单击目标集群名称,进入集群详情页面,如下图所示按照序号依次单击运维管理 > 组件管理 > 应用管理 > 点击安装Kuberay-Operator,为目标集群安装Kuberay-Operator组件。

image

3. 部署Ray Cluster

重要

Docker Hub拉取失败解决方案

由于运营商网络等不稳定因素可能导致镜像加速器无法成功拉取到指定版本的容器镜像,建议您在生产环境中谨慎使用依赖于Docker Hub的容器镜像。本文示例中使用的Ray官方镜像:rayproject/ray:2.36.1,若您无法拉取,您可参照以下操作,替换成订阅后的镜像地址。

执行以下命令创建名为myfirst-ray-clusterRay Cluster,并查看部署情况。

  1. 执行以下命令创建Ray Cluster资源。

    展开查看完整命令代码

    cat <<EOF | kubectl apply -f -
    apiVersion: ray.io/v1
    kind: RayCluster
    metadata:
      name: myfirst-ray-cluster
      namespace: default
    spec:
      suspend: false
      autoscalerOptions:
        env: []
        envFrom: []
        idleTimeoutSeconds: 60
        imagePullPolicy: Always
        resources:
          limits:
            cpu: 2000m
            memory: 2024Mi
          requests:
            cpu: 2000m
            memory: 2024Mi
        securityContext: {}
        upscalingMode: Default
      enableInTreeAutoscaling: false
      headGroupSpec:
        rayStartParams:
          dashboard-host: 0.0.0.0
          num-cpus: "0"
        serviceType: ClusterIP
        template:
          spec:
            containers:
            - image: rayproject/ray:2.36.1
              imagePullPolicy: Always
              name: ray-head
              resources:
                limits:
                  cpu: "4"
                  memory: 4G
                requests:
                  cpu: "1"
                  memory: 1G
      workerGroupSpecs:
      - groupName: work1
        maxReplicas: 1000
        minReplicas: 0
        numOfHosts: 1
        rayStartParams: {}
        replicas: 1
        template:
          spec:
            containers:
            - image: rayproject/ray:2.36.1
              imagePullPolicy: Always
              name: ray-worker
              resources:
                limits:
                  cpu: "4"
                  memory: 4G
                requests:
                  cpu: "4"
                  memory: 4G
    EOF
  2. 执行以下命令查看执行部署情况

    1. 查看Ray Cluster部署情况。

      kubectl get raycluster

      预期输出:

      NAME                  DESIRED WORKERS   AVAILABLE WORKERS   CPUS   MEMORY   GPUS   STATUS   AGE
      myfirst-ray-cluster   1                 1                   5      5G       0      ready    4m19s
    2. 查看Ray Cluster对应Pod。

      kubectl get pod

      预期输出:

      NAME                                     READY   STATUS    RESTARTS   AGE
      myfirst-ray-cluster-head-5q2hk           1/1     Running   0          4m37s
      myfirst-ray-cluster-work1-worker-zkjgq   1/1     Running   0          4m31s
    3. 查看Ray Cluster对应Service。

      kubectl get svc

      预期输出:

      NAME                           TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)                                         AGE
      kubernetes                     ClusterIP   192.168.0.1   <none>        443/TCP                                         21d
      myfirst-ray-cluster-head-svc   ClusterIP   None          <none>        10001/TCP,8265/TCP,8080/TCP,6379/TCP,8000/TCP   6m57s