PAI DLC支持基于Ray框架的任务类型,您可以直接提交Ray框架的训练脚本至DLC中进行训练,无需搭建Ray集群或进行底层Kubernetes的配置。同时,您可以享受DLC提供的完善日志和指标监控等服务,帮助您更好的管理任务。本文为您介绍如何提交Ray类型的训练任务。
前提条件
如果使用SDK提交训练任务,需要配置环境变量。详情请参见安装Credentials工具和在Linux、macOS和Windows系统配置环境变量。
准备工作
准备节点镜像
Ray集群包含Head和Worker两种节点类型,DLC任务会同时使用指定的节点镜像来搭建Head和Worker节点容器。创建任务后,DLC会自动构建Ray集群,并在准备就绪后,通过启动一个submitter节点向该集群提交任务,该节点也会使用相同的镜像。
Ray镜像版本应>=2.6,同时必须至少安装了ray[default]所包含的组件。支持使用的镜像如下:
PAI官方镜像:PAI平台提供了安装有Ray基础组件的官方镜像供您使用。
Ray社区镜像:
建议使用Docker镜像rayproject/ray。
也支持使用rayproject/ray-ml镜像,该镜像内置了包括PyTorch、TensorFlow等机器学习框架。
使用GPU时需提供支持CUDA的镜像,更多支持的镜像版本,请查看官方Docker镜像文档。
准备启动命令和脚本文件
DLC任务的启动命令会被用作 ray job submit
所提交的entrypoint命令。启动命令可以填写多行或单行,例如python /root/code/sample.py
,其中:
sample.py为运行的Python脚本文件,您可以通过数据集或代码配置方式,将脚本文件挂载到DLC容器中。示例内容如下:
import ray import os ray.init() @ray.remote class Counter: def __init__(self): # Used to verify runtimeEnv self.name = os.getenv("counter_name") # assert self.name == "ray" self.counter = 0 def inc(self): self.counter += 1 def get_counter(self): return "{} got {}".format(self.name, self.counter) counter = Counter.remote() for _ in range(50000): ray.get(counter.inc.remote()) print(ray.get(counter.get_counter.remote()))
/root/code/
为挂载路径。
提交训练任务
通过控制台提交
进入新建任务页面。
登录PAI控制台,在页面上方选择目标地域,并在右侧选择目标工作空间,然后单击进入DLC。
在分布式训练(DLC)页面,单击新建任务。
在新建任务页面,配置以下关键参数,其他参数配置详情,请参见创建训练任务。
参数
描述
示例值
参数
描述
示例值
环境信息
节点镜像
在官方镜像页签,选择预置的Ray官方镜像。
ray:2.39.0-cpu-py312-ubuntu22.04
启动命令
本任务需要执行的命令。
python /root/code/sample.py
三方库配置
支持通过配置三方库列表来配置Ray的环境运行依赖(runtime_env)。
在生产环境中,强烈建议使用已经打包好的镜像来执行任务,避免因为临时安装依赖库造成的任务失败。
无需配置
代码配置
通过在线配置或本地上传的方式,将准备好的脚本文件上传到DLC容器中。
使用本地上传方式:
示例代码文件:sample.py。
挂载路径:
/root/code/
。
资源信息
资源来源
选择使用公共资源或资源配额提交训练任务。
Ray目前暂不支持闲时资源与竞价资源,不支持任何抢占任务类型,任务本身也无法被抢占。
公共资源
框架
框架类型。
Ray
任务资源
任务节点数量:
Ray集群可配置的任务节点类型为Head和Worker。配置资源时,Head节点数量必须为1,仅用于运行entrypoint脚本,不会被用作Ray Worker节点。通常还需至少一个Worker节点,但非强制。每个Ray任务自动生成一个Submitter节点执行启动命令,并可通过其日志查看任务日志。预付费任务中,Submitter节点共享少量用户资源;后付费任务会生成最小可用的资源类型节点。
资源数量:
Ray集群Worker节点上的Logical Resources与您在提交任务时配置的物理资源一致。例如,当您配置了1个8卡的GPU节点时,Ray集群Worker节点默认的资源大小也为8卡GPUs。
资源配置需匹配任务需求,推荐使用少量大节点而非大量小节点。每个节点建议至少2 GiB内存,并随 Task/Actor数量增加而扩大,以避免OOM错误。
节点数量:均为1。
资源规格:选择ecs.g6.xlarge。
参数配置完成后,单击确定。
通过SDK提交
安装Python DLC SDK。
pip install alibabacloud_pai_dlc20201203==1.4.0
提交DLC Ray任务,示例代码如下。
#!/usr/bin/env python3 from alibabacloud_tea_openapi.models import Config from alibabacloud_credentials.client import Client as CredClient from alibabacloud_pai_dlc20201203.client import Client as DLCClient from alibabacloud_pai_dlc20201203.models import CreateJobRequest region_id = '<region-id>' cred = CredClient() workspace_id = '12****' dlc_client = DLCClient( Config(credential=cred, region_id=region_id, endpoint='pai-dlc.{}.aliyuncs.com'.format(region_id), protocol='http')) create_job_resp = dlc_client.create_job(CreateJobRequest().from_map({ 'WorkspaceId': workspace_id, 'DisplayName': 'dlc-ray-job', 'JobType': 'RayJob', 'JobSpecs': [ { "Type": "Head", "Image": "dsw-registry-vpc.<region-id>.cr.aliyuncs.com/pai/ray:2.39.0-gpu-py312-cu118-ubuntu22.04", "PodCount": 1, "EcsSpec": 'ecs.c6.large', }, { "Type": "Worker", "Image": "dsw-registry-vpc.<region-id>.cr.aliyuncs.com/pai/ray:2.39.0-gpu-py312-cu118-ubuntu22.04", "PodCount": 1, "EcsSpec": 'ecs.c6.large', }, ], "UserCommand": "echo 'Prepare your ray job entrypoint here' && sleep 1800 && echo 'DONE'", })) job_id = create_job_resp.body.job_id print(f'jobId is {job_id}')
其中:
region_id:阿里云区域ID。例如华东1(杭州)为cn-hangzhou。
workspace_id:工作空间ID。请在工作空间详情页面进行查看,具体操作,请参见管理工作空间。
Image:请将<region-id>替换为实际的阿里云区域ID。例如华东1(杭州)为cn-hangzhou。
更多关于SDK的使用方法,请参见使用Python SDK。
通过CLI提交
下载DLC客户端工具,并完成用户认证。具体操作,请参见准备工作。
提交DLC Ray任务,示例代码如下。
./dlc submit rayjob --name=my_ray_job \ --workers=1 \ --worker_spec=ecs.g6.xlarge \ --worker_image=dsw-registry-vpc.<region-id>.cr.aliyuncs.com/pai/ray:2.39.0-cpu-py312-ubuntu22.04 \ --heads=1 \ --head_image=dsw-registry-vpc.<region-id>.cr.aliyuncs.com/pai/ray:2.39.0-cpu-py312-ubuntu22.04 \ --head_spec=ecs.g6.xlarge \ --command="echo 'Prepare your ray job entrypoint here' && sleep 1800 && echo 'DONE'" \ --workspace_id=4****
通过CLI提交任务的更多配置方法,请参见提交命令。
常见问题
为什么Ray任务因环境准备耗时过长而超时失败?
建议检查Head节点的事件日志,如果显示错误Readiness probe failed...,可能意味着该镜像缺失Readiness check相关依赖或部分间接依赖不可用。建议在原镜像中使用pip或conda重新安装ray[default]组件,或者尝试基于Ray官方镜像重新构建镜像。
- 本页导读 (1)
- 前提条件
- 准备工作
- 准备节点镜像
- 准备启动命令和脚本文件
- 提交训练任务
- 通过控制台提交
- 通过SDK提交
- 通过CLI提交
- 常见问题
- 为什么Ray任务因环境准备耗时过长而超时失败?