查看原文
其他

AIGC 利器-Ray 云原生探索之路--总览篇

道客船长 道客船长 2023-07-04


在 ChatGPT 出现之前,在 AIGC 相关的方向就已经在不断的发展,不管从数据处理,算法训练,超参调优,以及模型推理都有很多技术框架,也包括 ML Ops 的一些解决方案。在 ChatGPT 出现之后,AIGC / LLM(大语言模型)就变得更加的火热,几乎所有行业的 IT 领域都在思考,它给企业带来什么样的价值。本篇文章围绕分布式计算框架–Ray,来分析一下它是怎么能支持大模型的训练以及在云原生领域的一些方案探讨。

01

背景

Ray 和 Spark 都是 UC Berkeley 的 AMPLab 团队创建的分布式计算的框架,后来 Spark 进到 Apache 了,但是 Ray 和 Spark 的设计思路和偏重点不一样,适用的场景也会有一些不同。

  • “How Ray, a Distributed AI Framework, Helps Power ChatGPT” :中提到 ChatGPT 在使用 Ray 能力帮助 ChatGPT 处理一些能力。

图源:https://thenewstack.io/how-ray-a-distributed-ai-framework-helps-power-chatgpt/
  • https://github.com/openai/gym:中也提到使用到了 Ray AIR 中的 RLlib,RLlib 是负责强化学习的库。

  • https://docs.ray.io/en/releases-2.4.0/ray-overview/use-cases.html :在 Ray 的官方的文档站中,也有相关的 topic 在说 OpenAI 怎么使用 Ray 作为 ChatGPT 的训练工具。文中提到,“Ray 是使 OpenAI 能够增强其训练 ChatGPT 和类似模型的能力的关键。Ray 在 OpenAI 最近的所有大型语言模型的底层运行——它也可能是 OpenAI 备受期待的下一步行动(通常称为 GPT-4)背后的框架。在部署 Ray 之前,OpenAI 使用自定义工具的大杂烩来开发早期模型和产品。但随着弱点变得更加明显,该公司转而使用 Ray,OpenAI 总裁 Greg Brockman 在今年早些时候的 Ray 峰会上表示。AI 芯片初创公司 Cerebras Systems 的首席执行官 Andrew Feldman 告诉 Insider:“了解将工作(大型模型)分解并将其分散到许多小芯片上是多么困难,这一点非常重要。” “这是一个非常困难的问题。”


02

相关术语

人工智能生成内容(Artificial Intelligence Generated Content / AI generated content,AIGC):意思是人工智能生成的内容,AIGC 是一种利用人工智能技术自动化地生成各种类型的内容的方式,AIGC 是一个广泛的概念,包括多种类型的内容生成;例如文本、音频、图像、视频等。

大语言模型(Large Language Model,LLM):大语言模型(LLM)是指使用大量文本数据训练的深度学习模型,是一种用于自然语言处理的深度学习模型,它通过大规模的预训练来学习自然语言的表示和语言模式。这些模型可以用于各种任务,如文本生成、文本分类、机器翻译等,以生成或处理自然语言文本。

深度学习(Deep Learning,DL):深度学习是学习样本数据的内在规律和表示层次,这些学习过程中获得的信息,对诸如文字、图像和声音等数据的解释有很大的帮助。它的最终目标是让机器能够像人一样具有分析学习能力,能够识别文字、图像和声音等数据。深度学习更偏向于微观的视角。

强化学习(Reinforcement Learning,RL):又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一,用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题 。区别于深度学习,强化学习更关注于宏观的视角让其变成一个智能体。强化学习的目标是通过试错的方式,学习到在不同环境状态下采取不同动作的最优策略。2022 年开始的 ChatGPT 模型开始使用 PPO 强化学习策略,同时使用基于人类对话的数据进行训练。

深度强化学习(Deep Reinforcement Learning,DRL):将深度学习的感知能力和强化学习的决策能力相结合,是一种更接近人类思维方式的人工智能方法。大语言模型可以与强化学习结合,用于处理自然语言文本、生成回复或作为强化学习中的状态表示和动作选择的一部分。这种结合可以提高智能体在自然语言环境中的表现和交互能力。

分布式计算:分布式计算是一种计算模型和计算范式,它将计算任务分解为多个子任务,并将这些子任务分布到多个计算资源(如计算节点、服务器、计算机集群等)上进行并行处理。这些计算资源可以是物理机器、虚拟机、容器等。分布式计算的关键特点包括:并行处理,资源共享,容错性,可扩展性。分布式计算在很多领域中得到广泛应用,包括大数据处理、机器学习、科学计算、云计算等。它可以显著提高计算速度和效率,并允许处理大规模数据和复杂计算任务。

分布式调度:传统的调度器通常采用集中式的方式,根据全局的资源使用情况进行任务调度。为了实现去中心化,分布式调度器可以将任务分配到不同的机器上完成,从而减轻集中式调度器的工作负载。此外,分布式调度器还具备本地调度的能力,可以缩短任务调度的周期,并且具备优秀的容错能力。

Actor 模型:Actor 模型是一种并发计算模型,用于处理并行和分布式计算任务。它是根据并发计算理论中的 "Actor" 概念提出的。在 Actor 模型中,计算被组织成互相通信的独立实体,称为 "Actor"。每个 Actor 都是一个独立的计算单元,具有自己的状态和行为,并通过消息传递进行通信。Actor 模型在并行计算、分布式系统、并发编程等领域得到广泛应用,例如在分布式计算框架中用于任务调度和协调,以及在并发编程模型中用于实现可伸缩性和并发性。

03

Ray 能力介绍

04

Ray 框架介绍

图源:https://docs.ray.io/en/releases-2.4.0/ray-overview/index.html

目前 Ray 的稳定版本是 v2.4 ,同时 3.0 版本也在紧张的测试中,官方文档已经有 3.0 的 dev 版本的文档。下面从整体上介绍一下 Ray 这个分布式计算框架。

Ray 的框架中最为重要的两个部分是 Ray Core 和 Ray AIR:

  • Ray Core 是底层的分布式的计算框架,使用基于 actor 模型来实现的一套计算框架,它可以将 Python 的一个 Class 或者一个 Function 转成分布式的 actor 和 task,在所有的机器上分布式地进行运行,并且 tasks/actor 之间可以通过分布式的对象存储能力来达到共享的能力。Ray Core 的这些能力为其它的更高层的模块提供了一个基础的框架。

说明:class Counter 在标注了 @ray.remote 之后,同时使用 remote 方法调用,如 counter = Counter.remote(),这里的 counter 在运行时就表现成了一个 actor。而 class 中定义的 function 在使用 remote 方法调用的时候,在运行状态时,就表现成了一个 task。这些 actor 和 task 是可以同时分布在不同机器上,并行的进行运行,而且是异步的方式。

  • Ray AIR 的全称是 Ray AI Runtime,Ray AIR 则是针对机器学习应用场景的扩展和增强。基于 Ray Core,Ray AIR 就是一个分布式的 AI 框架。包含了 AI 各种场景下的一系列的工具包,可以一起使用,也可以分开使用。在熟悉的 AI 训练的每个环节,Ray 都提供了一些常见工具的集成,如 DataSet,Training,Tuning,Serve 这些环节。AI 模型的开发者在开发模型的时候,还是可以使用自己熟悉的 AI 框架,如 pytorch,tensorflow 去开发主业务的代码,只需要稍微调整 code,使用 Ray 集成的对应的 AI 框架的库,包装一下就可以使用上 Ray AIR 所提供的增强分布式训练能力。这个分布式的能力是 Ray 的主要特性之一,可以为不同的 AI 框架提供分布式训练的能力,而不是使用特定 AI 框架自己支持的分布式训练的能力,这样的好处是,可以统一处理分布式的能力。此外,屏蔽开发者在开发模型的时候,还要去考虑分布式训练的一些问题。如下图:

说明:以上举例说明了 tensorflow 在 Ray 中怎么编写自己的模型算法。对于熟悉 tensorflow 研发的,仍可以基于 tensorflow 的包去开发自己的模型,之后使用 Ray 集成 tensorflow 的包去包装模型和训练任务,以及使用 Ray 的计算框架去训练模型。

05

Ray AIR 编程方式

图源:https://docs.ray.io/en/releases-2.4.0/ray-air/getting-started.html

从上图中可以大致了解到,在 Ray 中, AI 模型的整个处理各个环节都是集成了社区常见的 AI 相关的技术框架。包括数据集的处理、模型的训练、超参调优、模型部署等。而且各个环节完全可以无缝串联起来,当然也是可以单独的使用,每个环节的能力本身就是独立的模块。

06

Ray 支持大模型

图源:https://docs.ray.io/en/releases-2.4.0/ray-overview/use-cases.html

Ray 支持将大模型拆分成很多的小的模型分片,将这些小的模型分片调度到不同主机上去运行,来完成分布式训练,这个能力是 Ray 能支持大模型的核心能力之一。同时不仅仅模型可以进行分片,数据集也可以进行分片,这样不同的模型分片使用不同的数据集分片进行分布式的模型训练,可以按需要扩容,充分利用资源,加速训练。

07

Ray 可以为
AIGC 提供的能力

为了能够很好地训练 AIGC 中的大型模型,分布式训练能力是必不可少的。这要求能够对大型模型进行切片,将其分割成许多模型片段。此外,为了满足训练任务的高性能要求,除了需要高性能的硬件,还需要具备高性能的软件框架。最后,在训练过程中,不断增加可用资源的能力,即可扩展性,也是不可或缺的。

Ray 就提供了很多大模型需要的能力。Ray 在设计之初的核心要求就是高性能、低负荷、可横向扩容、稳定性。大概列举一下,不是全部,包括如下方面:

  • Ray Core 本身是构建在 grpc 的基础之上,性能高。

  • Ray Core 提供了基于 Actor 模型的异步并行的技术实现,提高性能。

  • Ray Core 提供了分布式的共享内存的技术,以及分布式对象存储,Actor/Tasks 之间可以共享内存,来保存或者读取依赖的对象。

  • Ray Core 使用了分布式引用计数等技术来保证内存的安全,以此提高系统的稳定性。

  • Ray Core 提供了去中心化的分布式的调度器和对象管理器,可以根据需要进行无缝的扩容。

  • Ray Core 是一个将 Python 语言分布式化的框架。在AI领域,很多的AI框架都是以 Python 为主的,所以 Ray 可以很好地整合这些框架,为其提供分布式的训练的能力。

  • Ray 支持很强的容错能力。

  • Ray AIR 提供了大模型切分成模型分片的支撑能力。举例:以 Alpa 为例,Alpa 能够全自动化的并行运行客户的单设备的 code 在分布式的集群上运行。

  • Ray AIR 提供了数据集切分成数据集分片的能力,以及多 worker 并行运行去处理数据集分片。举例:基于 Embeddings 和 LLM 来实现自己的知识库场景就可以使用 Ray 来加速。

  • Ray AIR 的 Scale 能力是 Ray 的核心能力之一,在很多模块都体现出来了。Ray AIR中提供了TorchTrainer、TensorflowTrainer、HorovodTrainer、XGBoostTrainer、LightGBMTrainer、LightningTrainer、HuggingFaceTrainer 这些类,可以用于支持各种 AI 框架的分布式训练的能力。这些类基本都是基于 ray.train.data_parallel_trainer.DataParallelTrainer 类,来实现各种 AI 框架对数据并行处理的能力。这个 Trainer 会运行 function train_loop_per_worker 在很多 Ray Actors 上。举例:Fine-tune a Transformers model 。

08

Ray 如何提交 Job

在 Ray 中,Actor 和 Task 是归属于一个 Job 的,所以要运行真正的 code,需要提交 Job。Job 提交的时候可以通过 CLI、Python SDK、或者 REST API 去提交,提交的入口是 Head 节点。Head 节点中有 Job 提交的 api 服务。在提交了 Job 之后,Head 节点中的 Driver 会去创建 Actor 这个特殊类型的 Task,以及 Function 类型的 Task,之后调度到 Worker 节点中,由 Worker process 去运行这些 Task,这中间还会涉及到调度等能力,不在这里细化。

09

Ray 云原生能力

Ray 集群可以在非容器化环境中运行,同时社区还提供了基于云原生 Kubernetes 的环境来运行整个 Ray 集群,以及以容器方式运行 Actor 和 Task。在这种方式下,要提交一个 Ray 作业,只需要提交一个符合 RayJob CRD 规范的 CR 对象。这时将创建一个 RayCluster,其中包括 Head 节点和 Worker 节点。同时,还会将要运行的作业代码以 configmap 的方式保存下来。之后,根据 configmap 中的代码,通过传统的提交方式将作业提交给 Ray 集群中的 Head 节点运行。在整个过程中,kuberay-operator 组件是 Ray 在云原生方案中的重要核心组件。

09

Ray 云原生能力提升

Job 应该什么时候运行起来?

在一些大数据、中间件、批调度、并行计算的场景中,对于工作负载的运行调度能力是有一些特殊的需求的,这些需求在 AI 的场景中也是普遍存在的,包括公平分享、组调度、优先级、抢占等场景,在其中要重点实现的包括两个能力,一个任务排队的能力,一个是高级的调度能力。这里重点说说任务排队的问题。任务排队系统需要解决的主要问题是资源管理、优先级等问题,保证 Job 被提交之前,任务是有合适的资源去运行整体的负载,举例 Ray 集群中,如果只有 Head 节点,但是没有 Worker 节点,或者只有 Worker 节点,没有 Head 节点,这些情况下,Job 是不能正常的处理的。

任务排队系统

方案中涉及的任务排队系统可以使用 volcano,Kueue 等,这里以 Kueue 为例。社区里 Kuberay 和 Kueue 都在大力地推进相关的集成能力,很快 pr 就都会合并掉,之后就可以直接在 Kuberay 中使用 Kueue 的能力。从下图中可以看到,Kueue 的处理单位是以 Job 为单位的,默认是支持 Kubernetes 中的 Job 资源对象,为了支持 Ray,Kueue 需要支持 RayJob 这种资源对象。在 Kueue 中,一个 Job 需要提交给一个 local queue,一个 local queue 属于一个 cluster queue,完成 Job 的 enqueue 动作。在 cluster queue 中可以定义期望的资源的类型,资源的配额等,最终在有合适资源的时候满足 Job 的时候,Job 从 cluster queue 中 dequeue,然后就可以进一步的完成 Job 的调度。

任务排队系统和容器平台以及 KubeRay 的关系

Kueue 本身是 Kubernetes 社区中维护的用于解决任务排队的组件,是可以原生的部署在 Kubernetes 中的,用来解决 Kubernetes 在任务排队这个场景的能力。Kueue 处理 Kubernetes 的 Job 和 Ray 中的 RayJob。给这些类型的 Job 提供任务排队的能力。

结论

结合上述的一些方案,以下总结了 KubeRay 结合 Kueue 以及容器平台的完整一点的架构图。主要流程:1. kuberay-operator watch RayJob 资源对象的创建,在 watch RayJob 象之后,会给这个资源对象 spec suspendtrue,这个时 RayJob 就由 Kueue 管;2.kuque 理完之后,发现有合适的资源去运行的时候,会设 RayJob spec suspendfalse,这样就可以进一步处 RayJob3.接下来就会创 RayCluster,以及提 Job去运 Tasks
10

总体架构

LLM 层:主要是 AI 相关的模型的开发的业务相关的能力。

计算框架:主要是 AI 底层运行的 Ray AIR 相关的 lib 以及 Ray Core 的分布式计算框架的能力。

调度增强:围绕 Ray 的云原生能力,在运行 Job 的时候,需要的资源以及保证运行环境的背景下,去控制整个 Job Cluster 的 Pod 启动部署。

容器云:承载了所有运行时的容器环境。

基础设施:主要体现底层物理资源的能力,包括 AI 场景中很重要的 GPU 资源,以及依赖的存储和网络等物理资源。

11

案例

1. Uber:Distributed XGBoost on Ray at Uber

2. Virginia Mason :Improving patient diagnostic and triage with RL: A large-scale COVID case study

3. Predibase:End-to-end AutoML with Ludwig on Ray at Predibase

4. Microsoft:How Microsoft does offline reinforcement learning with RLlib

5. Amazon:Petabyte-scale data catalog management on Ray at Amazon

6. Two Sigma:How Two Sigma gained a 24x speedup with RLlib and Ray

7. Visa: How Visa detects sensitive data in large data using deep learning on Ray

8. Anastasia: How Anastasia accelerated their ML processes 9x with Ray and Anyscale

9. Dendra: Dendra systems scales ecosystem restoration on Ray and Anyscale

10. Intel:Large-scale data analytics and AI pipelines using Spark and Ray at Intel

11. Neural MMO:Building a massively multi-agent research platform with Ray and RLlib

12. Ikigai Labs:How Ikigai Labs Serves Interactive AI Workflows at Scale using Ray Serve

13. Kyligence:Kyligence simplifies big data AI on Spark and Ray

14. Intel:Burger King improves mobile order clickthrough rate recommendation with Ray

15. Ant Group:Ant Group powers their fusion computing with Ray

16. IBM:Scaling and unifying Scikit-learn and Spark pipelines using Ray

17. Widas:Widas implements a automated digital authentication service using Ray Serve

18. IBM:IBM detects geo-anomalies from large-scale arial images with Ray

19. NVIDIA:Large scale data loading and preprocessing with Ray at NVIDIA

20. PathMind:Real life industrial use cases with RLlib and Ray at PathMind

21. Drift Biotechnologies:Machine learning and microbiology in the cloud using Ray

22. Alibaba:Alibaba accelerates large scale tensor and dataframe workloads with Ray

23. RedHat:Powering Open Data Hub with Ray at Red Hat

24. minds.ai:Enterprise scale reinforcement learning with RLlib at minds.ai

25. Amazon:Introducing Amazon Sagemaker Kubeflow reinforcement learning pipelines for robotics

12

总结

以上部分整体介绍了在云原生背景下,可以结合起来一起考虑的方案点。在 AIGC 如火如荼的今天,我相信后面会有更多好的技术、产品、方案会逐步地涌现出来。同时,在企业级的场景下,会有更多的使用场景,来充分体现 AIGC 的价值所在。


参考链接:

[1] https://docs.ray.io/en/releases-2.4.0/index.html

[2] https://thenewstack.io/how-ray-a-distributed-ai-framework-helps-power-chatgpt/

[3] https://www.anyscale.com/user-stories

[4] https://github.com/openai/gym




 本文作者 



熊中祥

「DaoCloud 道客」技术合伙人

云原生技术专家





热门推荐

            

访问以下网址,或点击文末【阅读原文】直接下载

新一代云原生操作系统底座--DCE 5.0 社区版:https://docs.daocloud.io/download/dce5/
任何组织、机构和个人,都能免费体验企业级云原生性能




DaoCloud 公司简介

「DaoCloud 道客」云原生领域的创新领导者,成立于 2014 年底,拥有自主知识产权的核心技术,致力于打造开放的云操作系统为企业数字化转型赋能。产品能力覆盖云原生应用的开发、交付、运维全生命周期,并提供公有云、私有云和混合云等多种交付方式。成立迄今,公司已在金融科技、先进制造、智能汽车、零售网点、城市大脑等多个领域深耕,标杆客户包括交通银行、浦发银行、上汽集团、东风汽车、海尔集团、屈臣氏、金拱门(麦当劳)等。目前,公司已完成了 D 轮超亿元融资,被誉为科技领域准独角兽企业。公司在北京、南京、武汉、深圳、成都设立多家分公司及合资公司,总员工人数超过 350 人,是上海市高新技术企业、上海市“科技小巨人”企业和上海市“专精特新”企业,并入选了科创板培育企业名单。


网址:www.daocloud.io

邮件:info@daocloud.io

电话:400 002 6898



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存