写点什么

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

1. 前言

1.1 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.2 PAI

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



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

2. Ray on PAI

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


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


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

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


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

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



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


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

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



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



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



2.4 Ray+PAI:企业级能力

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


  • 工作空间:为企业和团队提供统一的计算资源管理及人员权限管理能力,为 AI 开发者提供支持团队协作的全流程开发工具以及 AI 资产管理能力。

  • 用户管理:提供用户、角色、组织、权限、安全,企业用户访问控制,以及平台审计能力。

  • 资源管理:精细化计算资源分配,资源观测与多维度指标监控能力。

  • 任务管理:任务调度策略的配置,事件通知管理能力,任务状态异常告警。

  • 资产管理:企业自有数据处理和存储,数据集、模型、镜像、代码配置、自定义组件的管理。

  • 被集成:提供面向 MLOps 流程的 workflow 编排能力,PAIFlow;全链路标准 OpenAPI 及 SDK,实现与企业自有系统集成。



3. 使用案例

3.1 进入 DLC

登录 PAI 控制台, 左侧目录选择 DLC,DLC 产品页面,新建 DLC 任务,选择 Ray 框架



3.2 参数配置

  • 节点镜像

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

  • 运行时环境

目前 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 rayimport osimport requests
ray.init()
@ray.remoteclass 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
复制代码
  • 资源准备

任务节点


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


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


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


资源数量


Ray Cluster worker 节点上的 Logical Resources与用户在提交任务时配置的物理资源一致。例如,当用户配置了 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 DLC


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




https://github.com/ray-project/ray/blob/master/release/air_tests/air_benchmarks/workloads/pytorch_training_e2e.py将代码克隆并上传至 PAI 代码配置,或直接本地上传



  1. 输入任务启动命令



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



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



用户头像

还未添加个人签名 2020-10-15 加入

分享阿里云计算平台的大数据和AI方向的技术创新和趋势、实战案例、经验总结。

评论

发布
暂无评论
Post-Training on PAI :Ray on PAI,云上一键提交强化学习_人工智能_阿里云大数据AI技术_InfoQ写作社区