通过配置Ray Autoscaler可以实现自动扩、缩集群。Autoscaler 通过根据task、actor或placement group所需的资源来调整集群中的节点 (Ray Pod) 数量来实现。Autoscaler采用逻辑资源的请求(以ray.remote表示),而不是物理资源利用率进行集群扩缩的。另外,Autoscaler可以降低workload成本,但会增加节点启动开销。
Ray Autoscaler作为一个单独的实体,在Ray head Pod中的一个sidecar容器内,如下图:
部署EMR on VKE产品中Ray服务
提交作业到RayCluster,可以通过kubectl命令或者Ray的Client SDK提交。需要安装kubectl命令和部署Ray的环境,参考使用指导章节。
部署RayCluster服务时,采用“通过YMAL添加”形式,在YAML文件中将enableInTreeAutoscaling配置true:
RayCluster部署完成后,可以在容器服务VKE中看下,在head的pod中查看autoscaler的状态,是否处于Running
在Ray Cluster中运行提交如下Job。
定义了一个 long_running_task
远程函数,它会休眠600秒。提交了10个 long_running_task
任务:
import ray import time import os # 启动 Ray,使用 autoscaler 配置文件 ray.init(address='auto') @ray.remote(num_cpus=1) def long_running_task(): print(f"Sleeping for 600 seconds on node {os.uname()[1]}") time.sleep(600) return "Task completed" # 提交多个任务,这将触发 autoscaler 根据需要增加节点 object_refs = [long_running_task.remote() for _ in range(10)] # 等待所有任务完成 ray.get(object_refs) print("All tasks completed.")
查看worker pod信息,有10个pod:
kubectl get pod -n <命名空间> -w
也可以查看autoscaler的日志,10个 long_running_task
任务,需要10个woker执行。从下面日志也可以看出来:
获取更多相关信息可以参考官网KubeRay Autoscaling。