Post-Training on PAI (2):Ray on PAI,云上一键提交强化学习

简介: PAI 全新推出任务类型 Ray on PAI,模型训练服务 PAI-DLC 已集成 Ray,用户可将 Ray 框架的训练脚本直接提交至 PAI-DLC 进行训练,免部署免运维。整体训练过程一键提交实现上手 0 成本,还可享受 PAI 平台高效调度、自愈及企业级管理能力 。

在强化学习领域,Ray 是备受关注的开源分布式计算框架,OpenAI 声明使用了 Ray 作为 ChatGPT 大模型训练的底层平台;人工智能平台 PAI(Platform for Artificial Intelligence)是阿里云面向企业客户及开发者的一站式开发平台,为用户提供开箱即用、高性能、高稳定的企业级云原生 AI 工程化能力。

Ray 与 PAI 平台相结合,能够充分发挥两者优势,为用户带来更易用、调度能力更强、高可用的模型训练体验,本文将详细介绍 Ray 在训练服务 PAI-DLC 中的最佳实践,助力用户更好地利用这一组合,最大化模型训练效率和效果。


1. Ray 和 PAI 介绍


1.2 Ray


Ray 集成了多个 AI 库,拥有丰富的生态系统,包括 Ray Tune(超参数调优)、Ray RLlib(强化学习)、Ray Serve(模型部署)、RaySGD 的分布式运行环境,提供了全面的AI解决方案,使得 AI 并行训练更容易和高效。 OpenAI 声明使用了 Ray 作为 ChatGPT 大模型训练的底层平台(《How Does Ray, a Distributed AI System, Powers OpenAI’s ChatGPT?》)。

图1.png

1.3 阿里云人工智能平台 PAI


人工智能平台 PAI(Platform for Artificial Intelligence)是阿里云面向企业客户及开发者的一站式开发平台,提供包括数据标注、模型开发、模型训练、模型推理在内的 AI 开发全链路服务,内置丰富的大模型最佳实践和行业场景插件,为用户提供开箱即用、高性能、高稳定的企业级云原生 AI 工程化能力。 图2.png

2. Ray on PAI


Ray on PAI 是由 PAI 分布式训练产品 PAI-DLC 推出的一项全新任务类型,通过将 Ray 无缝集成到 PAI-DLC 中,用户可以将 Ray 框架的训练脚本直接提交至 PAI-DLC 进行训练,无需手动部署 Ray 集群,也无需关注底层 Kubernetes 基础设置的复杂配置。  

一键提交 Ray 任务,开发人员真正实现上手0成本,并可享受到 PAI 平台提供高效调度、自愈和企业级的管理能力。

图3.png

2.2 Ray+PAI:开箱即用,一键提交


PAI-DLC 提供直观的用户界面和易于理解的 API,对于用户,无需搭建 Ray 集群,一键提交 Ray 任务,支持 Ray 原生能力,实现了云上提交 Ray,免部署、免运维、上手0成本。

图4.png

2.2 Ray+PAI:统一调度,高利用率


在 PAI-DLC 上提交 Ray 任务,将完整享受 PAI 统一调度引擎能力,包括自动支持网络拓扑感知、算力拓扑感知,智能、FIFO、遍历、均衡排队策略, 多级 Quota 的共享、抢占调度机制, 最终实现集群90%+的算力利用率。

图5.png

除了 Ray,PAI-DLC 还支持 Megatron、Deepspeed、Pytorch、MPI、Slurm 等10+业内主流 AI 训练框架,使用 PAI-DLC,意味着一份算力,可以运行 Ray 任务,也可以一键提交其他任务,随时在多种 AI 场景切换和使用。

图6.png

2.2 Ray+PAI:LLM 容错,稳定可靠


  • RayNative 的容错机制:针对 Ray 框架,按照应用层面和系统层,分别提供优化容错机制,全面提升容错能力。支持某大模型团队,多个千卡 RL 任务,故障识别率90%+,Ray 的 RL 训练任务稳定运行超过一周。

图7.png

  • 高可用:通过 AIMaster 弹性容错引擎、 节点自愈引擎和 EasyCKPT 大模型 CKPT 引擎,实现故障节点分钟级自愈,任务分钟级恢复、CKPT 秒级保存, 保障 Ray 任务持续运行, 有效降低人力和避免算力的浪费。

图8.png

  • 可观测:构建覆盖多资源类型的精细化 Metric 体系,为训练稳定性监控、训练调优、算力管理等场景,提供可视化数据支撑。提供任务、POD、卡等多维度,数百个监控指标,支持 Ray Dashboard,并且对接云监控和 ARMS,满足客户云上多样的可观测需求。

图9.png

2.2 Ray+PAI:企业级能力


针对大型客户,PAI 提供完整的企业级能力,实现 AI 算力、AI 任务、AI 资产、AI 数据的可管可控,具体来说:

  • 工作空间:为企业和团队提供统一的计算资源管理及人员权限管理能力,为 AI 开发者提供支持团队协作的全流程开发工具以及 AI 资产管理能力。
  • 用户管理:提供用户、角色、组织、权限、安全,企业用户访问控制,以及平台审计能力。
  • 资源管理:精细化计算资源分配,资源观测与多维度指标监控能力。
  • 任务管理:任务调度策略的配置,事件通知管理能力,任务状态异常告警。
  • 资产管理:企业自有数据处理和存储,数据集、模型、镜像、代码配置、自定义组件的管理。
  • 被集成:提供面向 MLOps 流程的 workflow 编排能力,PAIFlow;全链路标准 OpenAPI 及 SDK,实现与企业自有系统集成。

图10.png


3. 使用案例


3.1 进入 PAI-DLC


登录 PAI 控制台,左侧目录选择 PAI-DLC,新建 PAI-DLC 任务,选择 Ray 框架。 图11.png


3.2 参数配置


  • 节点镜像

节点镜像会被同时用于 head 和 worker 节点容器。用户所用 Ray 镜像版本应 >= 2.6,可以使用 Ray 社区提供的 docker 镜像 ,目前的测试均基于2.9版本。Ray 社区还提供了镜像,内置了包括 pytorch、tensorflow 等机器学习框架的支持。使用 GPU 时需提供包含支持 cuda 的镜像。更多支持的镜像版本请参考官方 Docker镜像文档。(https://x.sm.cn/EA0wS1g

  • 运行时环境

目前 PAI-DLC 仅支持通过配置三方库配置的三方库列表(ThirdpartyLibs),后续会逐步开放通过框架高级配置(Settings.AdvancedSettings)来配置 Ray 的环境运行依赖runtime_env)。在生产环境中,强烈建议使用已经打包好的镜像来执行任务,避免因为临时安装依赖库造成的任务失败。

  • 启动命令

PAI-DLC 任务的启动命令会被用作 ray job submit 所提交的 entrypoint 命令,通常为运行一个 Python 脚本文件。例如:

python /root/code/sample.py


需注意,目前只有第一行命令会被 ray 提交至 ray cluster 运行,如果有多个命令请用  ; 或者  && 连接。如果需要在命令里直接放入 Python 脚本,可以采用参考下面的例子:


echo 'import ray
import os
import requests

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()))' >> sample.py && python sample.py


  • 资源准备

任务节点

PAI-DLC 支持 Ray Cluster 的两种可配置的任务节点类型:Head 和 Worker。

配置资源数量时,Head 节点的数量必须为1。同时在 PAI-DLC 平台上,Head 节点只会被用于运行 entrypoint 脚本,不会被用作 Ray Worker 节点。

除此以外,每个 Ray 任务 PAI-DLC 会自动生成一个 Submitter 节点用于执行任务启动命令,同时用户可以通过 Submitter 节点的日志来浏览查看提交的 Ray 任务日志。在预付费任务中,该节点会共享占用极小部分用户资源用于启动任务;而在后付费任务中,会生成一个最小可用的资源类型节点。

资源数量

Ray Cluster worker 节点上的 Logical Resourceshttps://x.sm.cn/EtaHyvL与用户在提交任务时配置的物理资源一致。例如,当用户配置了1个8卡的 GPU 节点时,Ray cluster worker 节点默认的资源大小也为 8 GPUs。如使用如下 @ray.remote 修饰函数或者类,会产生两个 Tasks 或者 Actors:


@ray.remote(num_gpus=4)

资源的配置需要符合任务的需求。一般而言,少而大的节点好过多而小的节点。通常每个节点建议的内存大小为至少 2 GiB,并且根据 Task/Actor 数量增长而增加,否则容易出现 OOM 错误。


3.3 实操案例


  • Train PyTorch ResNet model with GPUs on PAI-DLC

1. 选择镜像地址,参考使用 ray-ml:2.9.3-py310-cu118。

图12.png

2. 将代码克隆并上传至 PAI 代码配置,或直接本地上传。(https://x.sm.cn/2EKbzFc 

图13.png

3. 输入任务启动命令。

图14.png

4. 选择 Ray 框架,并配置 head 和 worker 资源。

图15.png

5. 创建任务;等待任务完成,并查看任务日志。

图16.png

作者介绍
目录

相关产品

  • 人工智能平台 PAI