Serverless Ray节点

更新时间:
复制为 MD 格式

DataWorksServerless Ray节点支持在EMR Serverless Ray计算资源上,使用Ray分布式框架进行Python作业开发与周期性调度。本文介绍使用Serverless Ray节点的主要流程。

节点介绍

EMR Serverless RaySpark工作空间之上提供托管Ray计算能力,兼容开源Ray接口,支持Python编程模型,适用于分布式计算、机器学习与数据处理等场景。通过DataWorksServerless Ray节点,您可在线编写Python代码并配置ray job submit提交命令,完成作业开发、调试与调度。

使用限制

  • 计算资源限制:仅支持选择已绑定EMR Serverless Ray计算资源,并确保Serverless资源组与该计算资源网络连通。

  • 语言限制:仅支持Python语言。

  • 运行限制:不支持单行或代码块单独运行,仅支持整体提交运行。

准备工作

  • 已在目标DataWorks工作空间完成绑定EMR Serverless Ray计算资源,并确保Ray集群处于可用状态。

  • (可选,RAM账号需要)进行任务开发的RAM账号已被添加至对应工作空间中,并具有开发空间管理员(权限较大,谨慎添加)角色权限,添加成员的操作详情请参见为工作空间添加空间成员

    说明

    如果您使用的是主账号,则忽略该添加操作。

新建Serverless Ray节点

新建入口与在数据开发中创建其他节点一致,请参见节点

开发Serverless Ray节点

Serverless Ray节点的开发包含两部分:在代码编辑区编写Python代码,并在Submit命令区域配置作业提交命令。用户创建文件后,系统自动生成提交命令,文件名为节点名称加.py后缀。

示例:使用Ray估算圆周率

以下示例使用蒙特卡洛方法估算圆周率,演示代码区与提交命令的配合方式。

步骤一:编写Python代码

在代码编辑区编写如下Python代码。

import ray
import random
import time
import sys

ray.init()

@ray.remote
def compute_points_in_circle(num_points: int) -> int:
    inside = 0
    for _ in range(num_points):
        x = random.uniform(0, 1)
        y = random.uniform(0, 1)
        if x * x + y * y <= 1:
            inside += 1
    return inside

def estimate_pi(total_points: int, num_workers: int = 4) -> float:
    start_time = time.time()
    points_per_worker = total_points // num_workers
    tasks = [compute_points_in_circle.remote(points_per_worker) for _ in range(num_workers)]
    results = ray.get(tasks)
    total_inside = sum(results)
    pi_estimate = 4.0 * total_inside / total_points
    print(f"Estimated π: {pi_estimate:.10f}, seconds: {time.time() - start_time:.4f}")
    return pi_estimate

if __name__ == "__main__":
    estimate_pi(total_points=int(sys.argv[1]), num_workers=4)
    ray.shutdown()

步骤二:配置Submit命令

Submit命令区域配置提交命令,例如:

ray job submit \
--working-dir "." \
-- python ss_ray.py 1000000
重要
  • 当使用本地工作目录时 (例如 --working-dir ".")

    • -- python 后的脚本文件名需与节点名称加 .py 一致。

    • 平台会自动控制并覆盖 --address--submission-id 和 --working-dir 参数,您无需手动配置。

  • 当使用远程OSS路径时 (例如 --working-dir "https://<bucket>.<endpoint>/path/to/your.zip")

    • 平台不会覆盖您指定的 --working-dir 远程路径。

    • 权限说明:您可以使用私有的OSS文件(通常是 .zip 包)作为工作目录。Serverless Ray 节点会自动使用当前执行任务的用户凭证(或其扮演的RAM角色),为您的私有OSS文件生成一个带签名的临时访问地址。

    • 前提条件:您必须确保执行本节点的用户,对所指定的OSS路径有读取权限 (oss:GetObject)。

节点内容配置说明

您可参照以下参数配置信息,配置Serverless Ray节点内容。

配置区域

参数名称

参数描述

Python代码

Python代码

编写使用Ray框架的Python代码。支持ray.init()初始化、@ray.remote装饰器等Ray API。

Submit命令

提交命令

配置Ray作业的提交命令。命令格式为ray job submit [options] -- python script.py [args]

runtime-env-json

可选。配置运行时环境。例如通过pip字段安装额外的Python依赖包,示例:--runtime-env-json '{"pip": ["numpy", "pandas"]}'

参数

填写您所需传入代码的参数信息。您可将该参数配置为动态参数${var}

若作业依赖多个Python文件,可将依赖文件创建为DataWorks Ray File类型资源并在代码中使用##@resource_reference引用,再在--working-dir指向工作目录的前提下组织ray job submit命令。资源创建请参见EMR资源与函数

调试Serverless Ray节点

  1. 配置运行配置。

    在节点右侧运行配置中,配置以下参数信息。

    参数名称

    描述

    计算资源

    选择您所绑定的Serverless Ray计算资源。

    资源组

    选择已通过网络连通性测试的Serverless资源组。Serverless Ray节点仅支持Serverless资源组。

    脚本参数

    在配置节点内容时,通过${参数名}的方式定义变量,需要在脚本参数处配置参数名参数值信息,任务运行时会将它动态替换为真实的取值。详情请参见调度参数来源及其表达式

  2. 调试运行节点。

    单击保存运行执行调试。

后续步骤

  • 节点调度配置:若项目目录下的节点需要周期性调度执行,您需要在节点右侧的调度配置中设置调度策略,配置相关的调度属性。

  • 节点发布:若任务需要发布至生产环境执行,请单击界面image图标唤起发布流程,通过该流程将任务发布至生产环境。项目目录下的节点只有在发布至生产环境后,才会进行周期性调度。

相关文档

引用Ray File操作可参见Lindorm Ray节点