开源框架Ray支持构建可扩展的人工智能(AI)和Python应用程序,广泛应用于机器学习领域。您可以在ACK集群上快速创建Ray Cluster,与阿里云日志服务SLS、Prometheus监控、Redis等快速集成,增强日志管理、可观测、高可用等能力。同时,Ray autoscaler与ACK autoscaler的弹性功能结合能更充分地发挥云的弹性能力,提高计算资源供给效率和性价比。
Ray简介
Ray是一个开源框架,支持构建可扩展的人工智能(AI)和Python应用程序,还提供了简单直观的API简化分布式计算,便于高效地编写并行和分布式Python应用程序,广泛应用于机器学习领域。Ray的统一计算框架由Ray AI libraries、Ray Core和Ray Cluster三层组成。
Ray on Kubernetes
KubeRay Operator提供了一种Kubernetes原生的方式管理Ray Cluster。您可以通过KubeRay Operator在Kubernetes(包括阿里云ACK)环境中部署Ray Cluster。安装KubeRay Operator时需要部署Operator Deployment和RayCluster、RayJob和RayService的CRD。
将Ray部署在Kubernetes上能够极大地简化分布式应用程序的部署与管理。优势如下。更多信息,请参见Ray on Kubernetes。
弹性伸缩:Kubernetes能够根据集群工作负载自动伸缩节点数量。与Ray autoscaler集成后,您可以根据工作负载实现Ray Cluster的动态伸缩,优化资源利用率,轻松管理大规模分布式应用程序。
容错性:Ray本身设计了容错机制。在Kubernetes上运行时,该特性得以增强。如果某个Ray节点失败,Kubernetes会自动替换失败节点,保证集群的稳定性和可用性。
资源管理:在Kubernetes中,您可以通过资源请求(Request)和限制(Limit),精细地控制和管理Ray节点使用的资源,例如CPU和内存,以更有效地利用集群资源,避免资源浪费。
简化部署:Kubernetes提供了一套统一的部署、管理和监控容器化应用的机制。通过Kubernetes部署Ray Cluster,可以简化配置和管理流程,确保在不同环境中(开发、测试、生产)部署的一致性。
服务发现和负载均衡:Kubernetes能够提供服务发现和负载均衡。Ray节点之间的通信以及客户端到Ray Cluster的连接都可以通过Kubernetes实现自动管理,从而简化网络配置并提高性能。
多租户支持:Kubernetes中的命名空间可以实现多用户、多团队在同一个Kubernetes集群中同时运行各自的Ray Cluster且互不干扰,便于资源共享。
监控和日志:Kubernetes集成提供监控和日志的可观测能力,可以跟踪Ray Cluster的状态和性能。例如,您可以使用Prometheus和Grafana监控集群的性能指标。
兼容性:Kubernetes是云原生生态系统的核心,与多种云服务提供商和技术栈兼容。通过Kubernetes部署Ray Cluster后,可以在不同的云平台或混合云环境之间快速迁移和扩展。
Ray on ACK
容器服务 Kubernetes 版是全球首批通过Kubernetes一致性认证的容器服务平台,提供高性能的容器应用管理服务,支持企业级Kubernetes容器化应用的生命周期管理。结合ACK的云原生化部署方式,您可以通过KubeRay在ACK集群上快速创建Ray Cluster。
与阿里云SLS日志、ARMS Prometheus监控、Redis等产品无缝对接,可以增强日志管理、可观测和高可用等能力。
Ray autoscaler与ACK autoscaler的弹性功能相结合,可以充分发挥云的弹性能力,按需提供计算资源。
计费说明
本文在ACK集群上创建Ray Cluster后,与阿里云日志服务SLS、Prometheus监控、Redis等快速集成,以增强日志管理、可观测、高可用等能力。
除ACK本身产生的费用外,其他产品也会根据使用的资源产生相应的费用。关于其他产品的计费说明,请参见:
1.环境准备
1.1 创建集群
关于如何创建集群,请参见创建ACK托管集群;如需升级集群版本,请参见手动升级集群。创建ACK集群Pro版且符合以下要求。
集群版本:v1.24及以上。
节点规格:已配置一台8 CPU 32 GB规格及以上的节点。
测试环境可使用推荐的最低规格:生产环境中需以实际情况为准,如需使用GPU节点,请配置GPU节点。
关于ECS支持的实例规格,请参见实例规格族。
已开启日志服务SLS。
已开启阿里云可观测监控Prometheus版。
已通过kubectl连接Kubernetes集群,且已在本地安装kubectl。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
(可选)创建云数据库Tair
本文使用Redis实例实现Ray Cluster的容错性和高可用性,您可按需进行创建。创建阿里云云数据库Tair(兼容 Redis)实例,且满足以下要求。
1.2 安装Kuberay-Operator组件
登录容器服务管理控制台,在左侧导航栏选择集群。单击目标集群名称,进入集群详情页面,如下图所示按照序号依次单击运维管理 > 组件管理 > 应用管理 > 点击安装Kuberay-Operator,为目标集群安装Kuberay-Operator组件。
ACK集群提供的Kuberay-Operator托管组件当前处于邀测阶段,如您有使用需求, 请提交工单申请。
1.3 部署Ray Cluster
执行以下命令创建名为myfirst-ray-cluster
的Ray Cluster,并查看部署情况。
执行以下命令创建Ray Cluster资源。
执行以下命令查看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
查看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
查看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
2. 集成日志服务SLS能力
您可以在Ray Cluster中集成阿里云日志服务SLS,实现日志的持久化存储。
执行以下命令,创建一个全局的AliyunLogConfig资源对象,使集群中的Logtail组件自动收集Ray Cluster的Pod产生的日志,并将其存入对应的SLS Project中。
参数
描述
logPath
收集Pod中
/tmp/ray/session_*-*-*_*/logs
目录下的所有日志,可自定义路径。advanced.k8s.ExternalK8sLabelTag
在收集的日志中增加Tag索引,便于查找日志。默认新增
_raycluster_name_
和_node_type_
两个Tag。关于AliyunLogConfig参数配置的更多信息,请参见通过DaemonSet-CRD方式采集容器日志。该服务收费,具体费用,请参见计费概述。
查看Ray Cluster日志信息流程。
登录容器服务管理控制台,在左侧导航栏选择集群。单击目标集群名称,进入集群详情页面,如下图所示按照序号依次单击集群信息 > 基本信息 > 集群资源,单击日志服务 Project右侧的链接进入对应的SLS Project。
在Project中选择
rayclusters
对应的Logstore并查看日志内容。您可以根据Tag,例如
_raycluster_name_
,查看不同Ray Cluster的日志。
3. 集成阿里云Prometheus监控能力
您可以在Ray Cluster中使用阿里云Prometheus监控能力,关于Prometheus监控功能的更多信息,请参见使用阿里云Prometheus监控。
您可执行以下命令部署Pod Monitor和Service Monitor资源,用于收集Ray Cluster 的Metric数据。
执行以下命令部署Pod Monitor资源。
执行以下命令部署Service Monitor资源。
登录控制台查看资源部署接入情况。
登录ARMS控制台。在左侧导航栏单击接入中心,在基础设置页面,如下图所示按照序号依次单击②搜索Ray > ③选中Ray,然后在Ray面板选择上文新建的集群,单击确定。
接入成功后,单击接入管理,跳转至ARMS接入管理页面。在组件管理页签,单击组件类型区域的大盘,选择Ray Cluster。
在大盘中选择对应Namespace、RayClusterName和SessionName进行过滤,查看Ray Cluster运行中任务的监控数据。
相关文档
您可以在本地访问Ray的可视化Web界面DashBoard,请参见本地访问Ray Dashboard。
关于如何在Ray Cluster中提交一个Job,请参见提交Ray Job。
关于如何在普通ECS节点结合Ray autoscaler实现弹性伸缩,请参见基于Ray autoscaler与ACK autoscaler实现弹性伸缩。
关于如何在虚拟ECI节点中结合Ray autoscaler实现弹性伸缩,请参见结合Ray autoscaler实现ECI节点的弹性伸缩。