推荐序——让分布式AI触手可及

2017年年中,蚂蚁集团技术管理团队参加了一次加州大学伯克利分校的技术论坛,然后将刚刚开源不久的Ray带回了公司。数年后的今天,Ray已经在蚂蚁集团生产环境落地超过100万CPU核的业务,在机器学习、模型推理与服务、搜索推荐系统等方面有了广泛的应用。作为国内最早一批Ray开发者,我们在业内的技术交流中经常被问道:“你们为什么在这么早期就决定投入Ray这个开源项目中?是什么原因让团队下定决心?”从我个人的角度来看,我们最初是被Ray清爽的API设计所吸引了。Ray是一个基础设施层的引擎和编程框架,面向的主要是程序员群体。Ray清爽、简洁的API设计可以说是分布式系统或者应用开发者的福音。Ray Core的API从设计之初到现在,基本上没有改变过,也从侧面证明了Ray创始团队对这套API的优秀设计。

有人说,是OpenAI带火了Ray(Ray被OpenAI公司应用于ChatGPT大模型系统)。但从多年的Ray内核开发者视角来看,Ray多年来围绕其核心抽象积累的底层能力、原生库,以及AI生态一直在帮助数以万计的AI系统和应用开发者解决分布式难题,而大模型是一个助推器,在高速增长的Scaling需求面前,Ray的优势被更多的开发者发现和挖掘。

如果去GitHub看Ray的介绍,我们会发现Ray的定义是:“Ray is a unified framework for scaling AI...”。没错,“unified”翻译过来是“统一的”或“一体的”,可以准确地描述Ray的定位。在中文社区,我们更喜欢将这种能力叫作“通用分布式”。Ray的“通用分布式”能力来源于Ray独特的计算引擎抽象和API设计。如果说Spark是围绕数据集(RDD)进行抽象,PyTorch是围绕模型(Tensor)进行抽象,那么Ray就是从最基本的面向对象的编程语言进行抽象和设计。大部分应用程序都可以通过面向对象编程语言进行实现,这帮助Ray找到了一个更加底层的切面,相比于其他计算引擎,Ray可以被用于更广泛的场景。这一点相信大家通过本书学习到Ray Core的两个核心概念Task和Actor后就会深有体会。

Ray看起来很云原生,因为Ray依赖K8s做容器化部署、云资源弹性、服务部署等,这是当前Ray集群和应用运维最主流、最成熟的方式;Ray看起来又很不云原生,因为它确实是一个二层调度系统,定义了一套云上应用的新玩儿法,资源、环境等声明与应用程序高度融合。Ray从定位上并不对标K8s,但资源调度确实是Ray Core底层最核心的能力之一,因此大家也经常将两者拿来比较。单纯从资源调度的角度来看,Ray最大的特色是轻量化。相比于Pod(作为K8s的交付物),Ray的交付物是由一个进程或者线程承载的远程实例。在最好的情况下,Ray的调度仅仅是一个RPC的开销。因此,Ray非常适合那些对调度时延敏感的业务以及高频创建的小(或短)任务,这也是Ray是在强化学习场景诞生的原因。

优秀的研发体验是Ray能吸引大量国内外开发者的另一个原因。在AI领域,基础设施的易用性对于ML工程师或算法工程师来说显得尤为重要,特别是在大模型时代,一个能够屏蔽底层复杂性、帮助用户快速开发和验证算法或模型的框架会受到追捧。基于Task和Actor的设计,Ray可以在不改变用户单机编程习惯的前提下,无缝地从单机编程走向分布式编程,这就是一种优秀的研发体验。我们曾经做过一个实验:分别以云原生的方式和Ray的方式开发一个复杂的分布式系统,并对比两种方式的不同。从最终结果来看,Ray可以将云原生开发中的Python、ProtoBuf、Dockerfile、Go和YAML等5种编程语言的代码压缩到仅1/10行的纯Python代码。

经过多年的发展,围绕Ray社区已经形成了一个庞大的AI生态,为用户提供开箱即用的AI基础设施。Ray做AI生态有一个天然的优势,就是它“与框架无关”(framework agnostic)的设计。以AI pipeline的角度来看,数据处理、训练、推理与服务等上层Libs的设计都是framework agnostic的。比如训练,你可以在Ray上很方便地使用主流的训练框架(PyTorch、TensorFlow、XGBoost等),没有原生支持的框架也可以很方便地通过Ray Core接口进行集成。当主流的AI框架都可以在Ray中集成时,它们会被Ray有效地融合在一起,产生“化学反应”。典型的融合(比如“数据处理+推理”的融合)在Ray社区造就了经典的离线批量推理的Case。早期蚂蚁集团提出的融合计算也是得益于Ray这种天然的“胶水”能力。

说回这本书,本书的作者均为Ray开源社区的核心贡献者,在Ray的系统和设计方面有着多年的积累,他们呈现了一本全面且高质量的Ray入门书籍。本书内容根据Ray的架构进行组织,既适合按顺序通读,也适合读者根据自身的需求阅读相应的章节。作为一个开发框架,Ray提供的Libs有丰富的组件和接口,强烈建议读者边阅读边动手。Ray的开源社区非常活跃,当你通过本书对Ray有了全面的了解之后,建议关注开源社区最新的发布和文档,获取Ray最新的特性和用法。

好了,快来开启一段分布式机器学习之旅,让分布式AI触手可及!

宋顾杨

蚂蚁集团Ray团队开源负责人

Ray开源社区Committer