使用RAY资源组

本文介绍如何使用阿里云LindormRAY资源组,通过准备环境、提交作业处理数据并上传结果,提供作业状态监控与日志查看等功能。

重要

RAY资源组目前处于邀测阶段,如有使用需求,请联系Lindorm技术支持(钉钉号:s0s3eg3)申请使用名额。

前提条件

步骤一:准备工作

  1. 登录Lindorm管理控制台。在左上角选择实例所属的地域。在实例列表页,单击目标实例ID或者目标实例所在行操作列的管理

  2. 实例详情页的配置信息区域,单击计算引擎操作列的资源组管理

    image

  3. 资源组详情界面,将鼠标悬停在RAY资源组操作列的WebUI之上,获取资源组的WebUI地址,例如:http://alb-57k7r581oht8rd****.cn-hangzhou.alb.aliyuncsslb.com/ray/raycg/dashboard/

  4. 在客户端安装RAY Client。以Python3为例,执行pip3 install ray[default]安装RAY Client。

    说明

    安装后,可执行ray --version验证是否安装成功。

步骤二:提交RAY作业

  1. 在客户端准备RAY作业。

    本文以使用RAY资源组处理阿里云对象存储服务OSStest-bucket空间下的test-data文件为例,展示如何编写脚本处理OSS数据,并上传结果至OSS。以下是客户端ray_job_test目录下编写的RAY作业逻辑脚本ray-oss-example.py 。

    import ray
    import sys
    
    from ossfs import OSSFileSystem
    import tempfile
    import ossfs
    
    ray.init()
    
    @ray.remote
    def process(oss_key: str, oss_secret: str, filename: str):
        print("Processing %s" % filename)
        fs = oss_filesystem(oss_key, oss_secret)
        # Download to local
        tmp_filename = tempfile.NamedTemporaryFile(delete=False).name
        fs.get_file(filename, tmp_filename)
        print("tmp file name is %s" % tmp_filename)
    
        with open(tmp_filename, 'rb') as f:
            content = f.read()
            print(content)
    
        # Put to OSS
        result_remote_filename = f"{filename}_result"
        fs.put_file(tmp_filename, result_remote_filename)
        return "success"
    
    def oss_filesystem(oss_key: str, oss_secret: str) -> OSSFileSystem:
        return ossfs.OSSFileSystem(
            endpoint="oss-cn-hangzhou-internal.aliyuncs.com", # OSS Endpoint
            key=oss_key, 
            secret=oss_secret 
        )
    
    if __name__ == "__main__":
        if (len(sys.argv) < 2):
            raise ValueError("python %s oss_key oss_secret" % __file__)
    
        oss_key = sys.argv[1]
        oss_secret = sys.argv[2]
        base = "/test-bucket/test-data/"  # /<bucketname>/path
        fs = oss_filesystem(oss_key, oss_secret)
    
        files = [item['name'] for item in fs.ls(base) if item['name'] != base]
    
        for file in files:
            print("Head processing %s" % file)
            result = ray.get(process.remote(oss_key, oss_secret, file))
            print(f"{file} is processed, status is {result}")
    
    ray.shutdown()

    参数说明

    参数

    示例

    说明

    endpoint

    oss-cn-hangzhou-internal.aliyuncs.com

    OSSEndpoint。获取Endpoint,请参见OSS地域和访问域名

    base

    /test-bucket/test-data/

    需要处理的 OSS 文件路径。

    说明
    • RAY支持在@ray.remote()注解中为每一个Task/Actor 声明其运行所需要使用的资源情况,例如通过num_cpus、num_gpus分别为Task/Actor声明运行所需的 CPU、GPU资源,详细参数请参考文档

    • RAY支持以pipeline的方式在跨节点的异构资源上(CPU/GPU)调度数据处理任务,相比传统Batch处理方式可显著提升数据处理效率,详细参数请参考文档

  2. 提交作业到指定RAY资源组。

    1. 进入作业所在路径:执行cd ray_job_test

    2. 提交作业:执行ray job submit --runtime-env-json '{"working_dir": "."}' --address RAY_ADDRESS -- python my_job.py oss_key oss_secret

      参数说明

      参数

      示例

      说明

      RAY_ADDRESS

      http://alb-57k7r581oht8rd****.cn-hangzhou.alb.aliyuncsslb.com/ray/raycg/dashboard/

      指定RAY资源组的WebUI访问地址

      my_job.py

      ray-oss-example.py

      执行脚本文件名。

      oss_key

      yourAccessKeyID

      访问OSS文件的阿里云账号或RAM用户的AccessKey ID和 AccessKey Secret。如何获取AccessKey IDAccessKey Secret,请参见获取AccessKey

      oss_secret

      yourAccessKeySecret

      示例

      ray job submit --runtime-env-json '{"pip": ["ossfs"], "working_dir": "."}' --address http://alb-57k7r581oht8rd****.cn-hangzhou.alb.aliyuncsslb.com/ray/raycg/dashboard/ -- python ray-oss-example.py yourAccessKeyID yourAccessKeySecret

      返回已提交作业的SUBMISSION_ID,如raysubmit_gmSnPSFqmEXG****,查看作业状态命令行中需使用该参数。

步骤三:作业运维

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

  • 客户端命令行

    • 查看作业运行状态。

      ray job status --address RAY_ADDRESS SUBMISSION_ID

      示例:

      ray job status --address http://alb-57k7r581oht8rd****.cn-hangzhou.alb.aliyuncsslb.com/ray/raycg/dashboard/ raysubmit_gmSnPSFqmEXG****
    • 查看作业日志。

      ray job logs --address RAY_ADDRESS SUBMISSION_ID

      示例:

      ray job logs --address http://alb-57k7r581oht8rd****.cn-hangzhou.alb.aliyuncsslb.com/ray/raycg/dashboard/ raysubmit_gmSnPSFqmEXG****
    • 查看作业列表。

      ray job list --address RAY_ADDRESS

      示例:

      ray job list --address http://alb-57k7r581oht8rd****.cn-hangzhou.alb.aliyuncsslb.com/ray/raycg/dashboard/
    • 终止作业。

      ray job stop --address RAY_ADDRESS SUBMISSION_ID

      示例:

      ray job stop --address http://alb-57k7r581oht8rd****.cn-hangzhou.alb.aliyuncsslb.com/ray/raycg/dashboard/ raysubmit_gmSnPSFqmEXG****
  • Web界面

    在浏览器中访问RAY资源组的WebUI地址,通过RAY Dashboard实时监控作业运行状态、作业日志和作业列表。