托管Ray服务

更新时间:

AnalyticDB Ray云原生数据仓库 AnalyticDB MySQL 版推出的全托管Ray服务。该服务在开源Ray的基础上进行了优化与增强,提升了内核性能并简化了运维管理。AnalyticDB Ray主要适用于多模态处理、搜索推荐、金融风控等复杂 AI 场景,旨在助力企业高效构建 Data + AI一体化架构,实现AI应用的规模化落地。

前提条件

集群的产品系列为企业版、基础版或湖仓版

什么是AnalyticDB Ray

开源 Ray 是一款专为 AI 与高性能计算设计的分布式计算框架,通过简洁的 API 抽象实现高效的分布式调度,用户仅需几行代码,即可将单机任务扩展至千节点集群,能够像调用本地函数一样调度远程资源。其内置模块(如Ray Tune、Ray TrainRay Serve)与TensorFlow、PyTorch等无缝兼容。在活跃的开源社区和Anyscale等企业的推动下,Ray已成为构建 AI 应用的重要工具。

尽管开源 Ray 提供了高度灵活的分布式计算能力,但在实际生产环境中,企业仍面临分布式作业优化、资源精细化调度、集群运维复杂以及系统稳定性与高可用性保障等挑战。

为解决上述挑战,AnalyticDB for MySQL推出全托管Ray服务——AnalyticDB Ray(下文简称ADB Ray)。ADB Ray基于开源Ray的丰富生态,通过多模态处理、具身智能、搜索推荐、金融风控等典型场景的验证,对Ray内核和服务能力进行了全面增强,优化了内核性能,简化了集群运维,并与AnalyticDB for MySQL湖仓平台无缝集成,助力企业构建Data + AI一体化架构,加速企业AI的规模化落地。

费用说明

创建Ray Cluster资源组,会产生如下费用:

  • Worker磁盘空间会按照设置的存储空间大小计费。

  • Worker资源类型CPU时,会按照所使用ACU弹性资源组计费。

  • Worker资源类型GPU时,会按照GPU的规格、数量计费。

注意事项

  • Worker节点删除、重启会造成如下影响,建议在业务低峰期变更Ray Cluster资源组的Worker配置,避免将作业调度至需要重启的Worker节点上,以防止出现非预期的数据丢失和作业失败的情况。

    • 运行在Worker节点上的Driver、ActorTask会失败,但Ray会自动重新下发ActorTask。

    • Ray分布式对象存储中的数据丢失,如果有其他Task依赖重启Worker上的数据,Task也会失败。

  • 资源组变更:

    • 删除资源组:如果有正在运行的任务,删除资源组将导致该资源组中运行的任务中断。

    • 删除Worker Group:删除Ray Cluster资源组中的Worker Group时,会导致Worker节点删除。Worker节点删除造成的影响,请参见Worker节点删除的影响

    • 变更Worker个数:若变更后的Worker最大个数小于变更前的最小Worker个数,会导致Worker节点被删除。Worker节点删除造成的影响,请参见Worker节点删除的影响

    • 变更其他配置:除最小Worker个数最大Worker个数参数之外,其他的参数变更(例如:Head资源规格、Worker资源类型)都会导致Head节点或相应Worker Group中的Worker节点重启。Worker节点重启造成的影响,请参见Worker节点重启的影响

  • 自动扩容:

    • Ray Cluster的扩容依赖于逻辑资源需求,而非物理资源利用率。因此,即使物理资源利用率很低,Ray Cluster也可能触发自动扩容。

    • 某些第三方应用程序会尽可能创建更多的Task以充分利用资源。在允许自动扩缩的情况下,会创建大量的Task,使得Ray快速地扩容到最大规模。因此,在运行第三方程序时,请了解其创建Task的内在逻辑,以避免产生额外的资源消耗。

  • 容灾机制:ADB Ray中配置了Redis容灾机制,确保在Head节点重启时,Ray Cluster状态、Actor状态和Task状态均能够恢复。

创建Ray服务

  1. 登录云原生数据仓库AnalyticDB MySQL控制台,在左上角选择集群所在地域。在左侧导航栏,单击集群列表,然后单击目标集群ID。

  2. 在左侧导航栏,单击集群管理>资源管理,单击资源组管理页签。然后在资源组列表的右上角,单击新增资源组

  3. 为资源组命名,选择任务类型AI,配置如下参数:

    参数名称

    说明

    部署类型

    选择RayCluster

    Head资源规格

    Head负责管理Ray元数据、运行GCS服务(Global Control Store)、参与Task调度,但不执行Task。

    Head资源规格即CPU核数,可选择small、m.xlarge、m.2xlarge等规格,各个规格所对应的CPU核数与Spark资源规格一致,详情请参见Spark资源规格列表

    重要

    Head主要负责为作业调度,请参照Ray Cluster的整体规模选择Head规格。

    Worker Group名称

    Worker Group的名称,您可以自定义。一个AI资源组中可以配置多个不同名的Woker Group。

    Worker资源类型

    支持CPUGPU两种类型。

    • 若您的业务涉及日常计算任务、多任务处理或复杂的逻辑运算建议您选择CPU

    • 若您的业务涉及大量数据并行处理、机器学习或深度学习训练建议您选择GPU

    Worker资源规格

    • Worker资源类型CPU,Woker资源规格可选择small、m.xlarge、m.2xlarge等规格,各个规格所对应的CPU核数与Spark资源规格一致,详情请参见Spark资源规格列表

    • Worker资源类型GPU,由于涉及到GPU机型、库存等问题,请提交工单联系技术支持协助选型。

    Worker磁盘空间

    磁盘空间主要用于存储Ray日志、临时数据以及Ray分布式对象存储的溢出数据。单位:GB,取值范围是[30,2000]。默认100GB。

    重要

    磁盘仅作为临时存储空间,请勿将其用作长期数据存储。

    最小Worker个数

    最大Worker个数

    最小Worker个数:一个Worker Group中至少需要运行的Woker个数,最小为1。

    最大Worker个数:一个Worker Group中最多需要运行的Woker个数,最大为8。

    Worker Group支持自动弹性,且每个Worker Group都能独立弹性。当最小Woker个数和最大Woker个数不同时,AnalyticDB for MySQL会根据任务的Task个数在最小Woker个数和最大Woker个数之间动态地扩缩容Woker个数。若存在多个Worker Group,将会自动进行最佳匹配,从而避免单个Worker Group过载或闲置的情况。

    分配单元

    单个Worker节点上分配多少张GPU。例如分配单元为1/3,则表示每个Worker节点配置1/3GPU。

    重要

    Worker资源类型GPU时,填写该参数。

  4. 单击确定

连接并使用Ray服务

步骤一:获取连接地址

  1. 在左侧导航栏,单击集群管理 > 资源管理,单击资源组管理页签。

  2. 单击对应资源组操作列的更多 > 详情,查看连接地址。

    • Ray grafana:Grafana可视化工具连接地址,单击可跳转至Grafana可视化页面。

    • Ray集群链接地址:内网连接地址。

    • Ray Dashboard:公网连接地址、Dashboard地址。单击可跳转至Ray可视化界面,可查看Ray Cluster资源组状态和作业状态。

    image

步骤二:提交作业

前提条件

已安装Python环境,且Python版本为3.7及以上版本。

操作步骤

支持以下两种方式提交作业:

  • 通过CTL提交作业(推荐):使用CTL将脚本文件打包上传到Ray Cluster执行。入口程序在Ray Cluster中执行,需要消耗Ray Cluster资源组的资源。

  • 使用ray.init连接Ray Cluster执行作业:使用ray.init连接Ray Cluster,入口程序在本地执行,不消耗Ray Cluster资源组的资源。且需要本地Ray版本Python版本与Ray Cluster版本一致,Ray Cluster版本变更时需要同步变更本地环境配置。

通过CTL提交作业
  1. 执行以下命令,安装Ray。

    pip3 install ray[default]
  2. (可选)配置环境变量。

    说明

    您可以配置全局环境变量来指定连接地址,或在提交作业时指定连接地址。

    export RAY_ADDRESS="RAY_URL"

    参数说明:

    RAY_URL:Ray连接地址。请填写步骤一获取的连接地址。

  3. 提交作业。

    重要

    提交作业时,系统会将working-dir参数指定目录下的所有文件打包上传至ray head执行。因此您需注意:

    • working-dir参数指定的目录尽量精简,否则文件过大可能导致上传失败。

    • 所有依赖的脚本文件需全部放置在working-dir参数指定目录下,否则可能因缺少依赖文件而无法执行。

    • 若您已配置环境变量,请执行以下语句提交作业。

      ray job submit --working-dir your_working_directory -- python your_python.py 

      参数说明:

      • your_working_directory:脚本文件所在的路径。本文示例脚本文件路径为/root/Ray

      • your_python.py:脚本文件。本文示例脚本文件为scripts.py

      示例:

      ray job submit --working-dir /root/Ray -- python scripts.py
    • 若您未配置环境变量,请执行以下语句提交作业。

      ray job submit --address ray_url --working-dir your_working_directory -- python your_python.py 

      参数说明:

      • ray_url:Ray连接地址。请填写步骤一获取的连接地址。

      • your_working_directory:脚本文件所在的路径。

      • your_python.py:脚本文件。本示例脚本文件为scripts.py

      示例:

      ray job submit --address http://amv-uf64gwe14****-rayo.ads.aliyuncs.com:8265 --working-dir /root/Ray -- python scripts.py 
  4. 查询作业运行状态。

    您可以通过如下两种方式查看作业运行状态:

    • 通过命令查看:

      ray job list
    • 通过可视化界面查看:

      1. 资源组管理页面。单击对应资源组操作列的更多 > 详情

      2. 单击Ray Dashboard地址进入可视化界面。

使用ray.init连接Ray Cluster执行作业
  1. 执行以下命令,安装Ray。

    pip3 install ray
  2. (可选)配置全局环境变量。

    说明

    您可以配置全局环境变量来指定连接地址,或在脚本文件中指定连接地址。

    export RAY_ADDRESS="RAY_URL"

    参数说明:

    RAY_URL:Ray连接地址。步骤一获取的连接地址为dashboard地址,端口为8265,通过ray.init()连接ray时,需要将端口替换为10001、将协议替换为ray。

    例如,步骤一获取的dashboard地址为http://amv-uf64gwe14****-rayo.ads.aliyuncs.com:8265,此处需要替换为ray://amv-uf64gwe14****-rayo.ads.aliyuncs.com:10001

  3. 运行程序。

    • 若您已配置全局环境变量,请执行以下命令运行程序。

      python scripts.py
    • 若您未配置全局环境变量,请执行以下命令运行程序。

      1. 修改脚本文件,指定连接地址。

        ray.init(address="RAY_URL")

        参数说明:

        RAY_URL:Ray连接地址。步骤一获取的连接地址为dashboard地址,端口为8265,通过ray.init()连接ray时,需要将端口替换为10001、将协议替换为ray。

        例如,步骤一获取的dashboard地址为http://amv-uf64gwe14****-rayo.ads.aliyuncs.com:8265,此处需要替换为ray://amv-uf64gwe14****-rayo.ads.aliyuncs.com:10001

        重要

        如果ray连接地址配置不正确,ray.init()将会启动一个本地集群执行程序。请注意查看输出日志以确定正确连接到ray集群。

      2. 执行如下命令运行程序:

        python scripts.py