本文介绍如何使用阿里云Lindorm的RAY资源组,通过准备环境、提交作业处理数据并上传结果,提供作业状态监控与日志查看等功能。
RAY资源组目前处于邀测阶段,如有使用需求,请联系Lindorm技术支持(钉钉号:s0s3eg3)申请使用名额。
前提条件
-
已开通Lindorm宽表引擎。
-
已开通Lindorm计算引擎。
已开通RAY资源组。
已将客户端IP地址添加至Lindorm白名单。
准备工作
登录Lindorm管理控制台。在左上角选择实例所属的地域。在实例列表页,单击目标实例ID或者目标实例所在行操作列的管理。
-
在实例详情页的配置信息区域,单击计算引擎操作列的资源组管理。
在资源组详情界面,将鼠标悬停在RAY资源组操作列的WebUI之上,获取资源组的WebUI地址,例如:
http://alb-57k7r581oht8rd****.cn-hangzhou.alb.aliyuncsslb.com/ray/raycg/dashboard/。在客户端安装RAY Client。以Python3为例,执行
pip3 install ray[default]安装RAY Client。说明安装后,可执行
ray --version验证是否安装成功。
RAY资源组鉴权
Ray资源组使用计算引擎token进行身份认证,以防止未授权的客户端访问集群API和提交作业。
token获取方式:用于进行计算资源鉴权的token。
通过Ray命令行管理作业鉴权配置
Ray 资源组提供 2 种方式在命令行中配置鉴权。
方法一:在命令行中通过 --headers 参数传递 token。
ray job submit \ --address "http://alb-57k7r581oht8rd****.cn-hangzhou.alb.aliyuncsslb.com/ray/raycg/dashboard/" \ --headers '{"Authorization": "Bearer xxxxx-xxx-xxxx-xxxx-xxxxxxxxxxxx"}' \ --runtime-env-json '{"working_dir": "."}' \ -- python yourRayJob.py方法二:设置 RAY_AUTH_MODE + RAY_AUTH_TOKEN 环境变量。
export RAY_AUTH_MODE=token export RAY_AUTH_TOKEN=xxxxx-xxx-xxxx-xxxx-xxxxxxxxxxxx ray job submit \ --address "http://alb-57k7r581oht8rd****.cn-hangzhou.alb.aliyuncsslb.com/ray/raycg/dashboard/" \ --runtime-env-json '{"working_dir": "."}' \ -- python yourRayJob.py说明此方式需满足RAY客户端版本号不低于2.52.0。
Ray Dashboard 鉴权配置
首次访问 Ray 资源组 WebUI 地址时,需要填写 token 配置以获得访问权限。
提交RAY作业
在客户端准备RAY作业。
本文以使用RAY资源组处理阿里云对象存储服务OSS中
test-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.comOSS的Endpoint。获取Endpoint,请参见地域和Endpoint。
base
/test-bucket/test-data/需要处理的 OSS 文件路径。
提交作业到指定RAY资源组。
进入作业所在路径:执行
cd ray_job_test。提交作业:执行
ray job submit --headers '{"Authorization": "Bearer RAY_AUTH_TOKEN"}' --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 ID和AccessKey Secret,请参见获取AccessKey。
oss_secret
yourAccessKeySecretRAY_AUTH_TOKEN
8f2e1a3c-9b4d-4e5f-a6c2-d7b8f9e0a1b2
RAY资源组鉴权所需token。
示例
ray job submit --headers '{"Authorization": "Bearer 8f2e1a3c-9b4d-4e5f-a6c2-d7b8f9e0a1b2"}' --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资源组的WebUI地址,通过RAY Dashboard实时监控作业运行状态、作业日志和作业列表。
作业运维
Ray支持通过不同的方式查看、管理作业:
命令行方式:Ray提供ray job子命令用于查看、管理作业,详情可参考Ray Jobs CLI API。
Python SDK方式:Ray 提供python lib,支持通过JobSubmissionClient来查看、管理作业,详情可参考Python SDK API。
REST API方式:Ray提供REST API,通过HTTP请求调用查看、管理作业。详情可参考Ray Jobs REST API。
说明请使用WebUI地址作为REST API入口URL来访问Ray REST API。
下面以客户端命令行为例,展示如何查看、管理作业。
查看作业运行状态。
ray job status --headers '{"Authorization": "Bearer RAY_AUTH_TOKEN"}' --address RAY_ADDRESS SUBMISSION_ID示例:
ray job status --headers '{"Authorization": "Bearer 8f2e1a3c-9b4d-4e5f-a6c2-d7b8f9e0a1b2"}' --address http://alb-57k7r581oht8rd****.cn-hangzhou.alb.aliyuncsslb.com/ray/raycg/dashboard/ raysubmit_gmSnPSFqmEXG****查看作业日志。
ray job logs --headers '{"Authorization": "Bearer RAY_AUTH_TOKEN"}' --address RAY_ADDRESS SUBMISSION_ID示例:
ray job logs --headers '{"Authorization": "Bearer 8f2e1a3c-9b4d-4e5f-a6c2-d7b8f9e0a1b2"}' --address http://alb-57k7r581oht8rd****.cn-hangzhou.alb.aliyuncsslb.com/ray/raycg/dashboard/ raysubmit_gmSnPSFqmEXG****查看作业列表。
ray job list --headers '{"Authorization": "Bearer RAY_AUTH_TOKEN"}' --address RAY_ADDRESS示例:
ray job list --headers '{"Authorization": "Bearer 8f2e1a3c-9b4d-4e5f-a6c2-d7b8f9e0a1b2"}' --address http://alb-57k7r581oht8rd****.cn-hangzhou.alb.aliyuncsslb.com/ray/raycg/dashboard/终止作业。
ray job stop --headers '{"Authorization": "Bearer RAY_AUTH_TOKEN"}' --address RAY_ADDRESS SUBMISSION_ID示例:
ray job stop --headers '{"Authorization": "Bearer 8f2e1a3c-9b4d-4e5f-a6c2-d7b8f9e0a1b2"}' --address http://alb-57k7r581oht8rd****.cn-hangzhou.alb.aliyuncsslb.com/ray/raycg/dashboard/ raysubmit_gmSnPSFqmEXG****