新書推薦:
《
甲骨拼合六集
》
售價:NT$
1520.0
《
视觉美食家:商业摄影实战与创意解析
》
售價:NT$
602.0
《
中国经济发展的新阶段:机会与选择
》
售價:NT$
454.0
《
DK月季玫瑰百科
》
售價:NT$
959.0
《
为你想要的生活
》
售價:NT$
301.0
《
关键改变:如何实现自我蜕变
》
售價:NT$
352.0
《
超加工人群:为什么有些食物让人一吃就停不下来
》
售價:NT$
454.0
《
历史的教训(浓缩《文明的故事》精华,总结历史教训的独特见解)
》
售價:NT$
286.0
編輯推薦:
Ray是开源分布式计算框架,简化了扩展计算密集型Python工作负载的过程。通过本书,Python程序员、数据工程师和数据科学家将学会如何在本地利用Ray并启动计算集群。你将能够使用Ray来大规模构建和运行机器学习程序。三位作者展示了如何使用Ray构建机器学习应用程序。你将了解Ray如何融入当前的机器学习工具,并了解Ray与这些工具紧密集成的方法。分布式计算很难,但Ray让一切困难迎刃而解。通过学习本书,你将:? 了解如何使用Ray Core构建分布式应用程序。? 使用Ray Tune进行超参数优化。? 使用Ray RLlib库进行强化学习。? 使用Ray Train库管理分布式训练。? 使用Ray Datasets进行数据处理。? 了解如何使用Ray Clusters以及如何使用Ray Serve为模型提供服务。? 使用Ray AIR创建端到端机器学习应用程序。
內容簡介:
Ray是开源分布式计算框架,简化了扩展计算密集型Python工作负载的过程。本书展示了如何使用Ray构建机器学习应用程序,介绍了Ray如何融入当前的机器学习工具,以及Ray如何与这些工具紧密集成。本书前3章介绍了Ray作为分布式Python框架的基础知识,并提供了应用示例;第4-10章介绍了Ray高级库(Ray RLlib、Ray Tune、Ray Dataset、Ray Train、Ray Serve、Ray Cluster、Ray AIR),并展示如何使用高级库创建应用程序;第11章对Ray的生态进行了总结,并指导读者继续学习。
關於作者:
Max Pumperla是一位现居德国汉堡的数据科学家和软件工程师。作为一名活跃的开源贡献者,他是多个Python包的维护者、机器学习书籍的作者,并多次在国际会议上发表演讲。他目前在Anyscale担任软件工程师。在担任Pathmind公司的产品负责人时,他使用Ray RLlib、Serve和Tune开发了用于大规模产业应用的强化学习解决方案。Max曾是Skymind的DL4J核心开发者,他拓展了Keras生态,并且是Hyperopt的维护者。
目錄 :
目录
序1
前言3
第1章 Ray概述11
1.1 Ray是什么12
1.1.1 Ray的渊源12
1.1.2 Ray的设计原则14
1.1.3 Ray的三层架构:内核、库、生态15
1.2 分布式计算框架16
1.3 数据科学库套件18
1.3.1 Ray AIR和数据科学工作流19
1.3.2 处理数据20
1.3.3 训练模型22
1.3.4 调优超参数26
1.3.5 部署模型28
1.4 Ray的生态30
1.5 总结31
第2章 Ray Core入门32
2.1 Ray Core简介33
2.1.1 Ray API的第一个示例34
2.1.2 Ray Core API概述44
2.2 理解Ray的系统组件45
2.2.1 在节点上调度和执行任务45
2.2.2 主节点48
2.2.3 分布式调度和执行48
2.3 利用Ray创建简单的MapReduce示例50
2.3.1 映射和打乱文档数据52
2.3.2 利用约简进行单词统计54
2.4 总结56
第3章 创建第一个分布式应用程序57
3.1 强化学习入门57
3.2 创建简易的迷宫问题59
3.3 创建模拟63
3.4 训练强化学习模型66
3.5 创建分布式Ray应用程序70
3.6 回顾强化学习术语72
3.7 总结74
第4章 利用Ray RLlib进行强化学习75
4.1 RLlib概述76
4.2 RLlib入门76
4.2.1 创建Gym环境77
4.2.2 运行RLlib CLI79
4.2.3 使用RLlib Python API80
4.3 配置RLlib实验87
4.3.1 资源配置89
4.3.2 配置rollout worker89
4.3.3 配置环境90
4.4 使用RLlib环境90
4.4.1 RLlib环境概述91
4.4.2 使用多智能体92
4.4.3 使用策略服务器和客户端96
4.5 高级概念99
4.5.1 创建高级环境99
4.5.2 应用课程学习101
4.5.3 使用离线数据103
4.5.4 其他高级主题104
4.6 总结105
第5章 利用Ray Tune进行超参数调优106
5.1 调优超参数106
5.1.1 使用Ray创建随机搜索示例107
5.1.2 调优超参数的难点109
5.2 Ray Tune入门110
5.2.1 Tune的原理111
5.2.2 配置和运行Tune115
5.3 使用Tune进行机器学习120
5.3.1 结合使用RLlib和Tune120
5.3.2 调优Keras模型121
5.4 总结124
第6章 利用Ray进行数据处理125
6.1 Ray Dataset126
6.1.1 Ray Dataset基础127
6.1.2 利用Ray Dataset进行计算130
6.1.3 数据集管道131
6.1.4 示例:并行训练分类器副本134
6.2 外部集成库137
6.3 创建ML管道140
6.4 总结142
第7章 利用Ray Train进行分布式训练143
7.1 分布式模型训练基础143
7.2 基于示例介绍Ray Train145
7.2.1 预测纽约出租车的大额小费145
7.2.2 加载、预处理、特征化146
7.2.3 定义深度学习模型148
7.2.4 示例:利用Ray Train进行分布式训练148
7.2.5 分布式批量推理151
7.3 Ray Train训练器152
7.3.1 迁移到Ray Train154
7.3.2 扩展训练器156
7.3.3 利用Ray Train进行预处理156
7.3.4 将训练器和Ray Tune集成158
7.3.5 使用回调函数监控训练160
7.4 总结160
第8章 利用Ray Serve进行在线推理162
8.1 在线推理的主要特点163
8.1.1 ML模型属于计算密集型163
8.1.2 ML模型无法独立使用164
8.2 Ray Serve入门164
8.2.1 Ray Serve概述165
8.2.2 定义基础HTTP端点166
8.2.3 扩展和资源分配169
8.2.4 批处理请求170
8.2.5 多模型推理图172
8.3 端到端示例:创建基于NLP的API176
8.3.1 获取内容和预处理177
8.3.2 NLP模型178
8.3.3 HTTP处理和驱动逻辑179
8.3.4 整合181
8.4 总结182
第9章 Ray集群183
9.1 手动创建Ray Cluster184
9.2 在Kubernetes上进行部署186
9.2.1 设置KubeRay集群187
9.2.2 与KubeRay集群交互188
9.2.3 公开KubeRay191
9.2.4 配置KubeRay191
9.2.5 配置KubeRay日志194
9.3 使用Ray集群启动器195
9.3.1 配置Ray集群195
9.3.2 使用集群启动器CLI196
9.3.3 与Ray Cluster交互196
9.4 使用云集群197
9.4.1 AWS197
9.4.2 其他云服务198
9.5 自动扩展199
9.6 总结199
第10章 Ray AIR入门201
10.1 为什么使用AIR201
10.2 AIR核心概念202
10.2.1 Ray Dataset和预处理器204
10.2.2 训练器205
10.2.3 调优器和检查点207
10.2.4 批预测器208
10.2.5 部署209
10.3 适合AIR的任务212
10.3.1 AIR任务执行215
10.3.2 AIR内存管理216
10.3.3 AIR故障模型217
10.3.4 自动扩展AIR任务218
10.4 总结218
第11章 Ray生态及其他220
11.1 蓬勃的生态221
11.1.1 数据加载和处理221
11.1.2 模型训练223
11.1.3 模型服务227
11.1.4 创建自定义集成230
11.1.5 Ray集成概述231
11.2 Ray和其他系统232
11.2.1 分布式Python框架232
11.2.2 Ray AIR和更广泛的ML生态233
11.2.3 将AIR集成到ML平台235
11.3 继续学习236
11.4 总结237
內容試閱 :
前言
分布式计算是当下非常热门的技术。回顾计算的发展历程,不禁让人感叹越来 越多的公司将工作负载编辑注分布在计算机集群上。人们开发出了高效的计算方法 来做到这一点,与此同时,扩展计算也变得越来越必要。这是因为虽然单台计算 机的速度不断提高,但人们对大规模计算的需求仍然超出了单台机器的算力。
扩展计算不仅是必要的,而且极具挑战性,而Ray的出现大大简化了开发工作量。Ray使普通开发者也能轻松进行分布式计算,并且可以毫不费力地将 Python 脚本扩展到多个节点。Ray 擅长处理数据密集型和计算密集型的计算任务(如数据预处理和模型训练),非常适合需要扩展的机器学习(Machine Learning ,ML)计算任务。虽然在当前的技术环境下不借助 Ray 也可以扩展这 两种类型的任务,但开发者可能需要为每种类型的任务使用不同的 API 和分布 式系统。而且,管理多个分布式系统可能会导致混乱和低效。
Ray 2.0于2022年8月发布,新增了Ray AI Runtime(AIR)功能,进一步提升了Ray在复杂机器学习计算任务上的能力。AIR 是由库和工具组成的集合,可 在单个分布式系统中轻松构建和部署端到端的机器学习应用程序。借助 AIR, 即使处理最复杂的工作流,也可以将其表示为单个 Python 脚本。这意味着用户 可以预先在本地运行程序,从而大大提升调试和开发的效率。因为可以使用持续增强的Ray机器学习库和第三方集成,所以数据科学家从 Ray 受益良多。Ray AIR 能帮助用户快速实现想法原型,并更从容地从开发过渡到生产环境。与许多其他分布式系统不同,Ray 原生支持 GPU,这对于机器学习工程师尤为重要。为了支持数据工程师,Ray还与Kubernetes等工具紧密集成,并可以在多云环境中部署。
此外,用户还可以将Ray作为统一的计算层,以提供计算任务的扩展性、容错性、调度和编排。换言之,学习 Ray 对于各个岗位都具有非常大的价值。
目标读者
很可能你选择阅读本书的原因是你对Ray的某些功能感兴趣。也许你是一名分布式系统工程师,想了解Ray的引擎是如何工作的;也许你是软件开发者,对 新技术感兴趣;或者,你是一名数据工程师,想评估Ray并与类似工具进行比 较;又或者,你是机器学习工程师或数据科学家,需要找到扩展实验的途径。
无论你身处什么岗位,充分利用本书的关键都是熟练掌握Python编程。本书示 例是用Python编写的,因此读者需要具备一定的 Python 知识。正如Python爱好者的口头禅—“明确胜于含蓄”,我们也在这里明确指出,读者需要熟练使 用系统命令行,遇到问题时知道如何获取帮助,还要掌握设置编程环境的方法。
如果你以前没有接触过分布式系统,不用担心,因为本书涵盖零基础入门分布 式系统所需的全部知识。除此之外,你可以在笔记本计算机上运行书中展示的 大部分示例代码。不过,涵盖基础知识意味着无法对分布式系统的细节进行深 入讲解。本书的重点是帮助开发者顺利掌握 Ray,特别是如何在数据科学和机 器学习实战中应用它。
本书后面章节的内容需要读者对机器学习有一定了解,但并不强求具备机器学 习领域的经验。具体而言,读者应该对机器学习范式以及它与传统编程的区 别有基本了解。读者还应掌握 NumPy 和 Pandas 的基础知识。此外,读者需要 能流畅阅读 TensorFlow 和 PyTorch 示例。在 API 层面上,了解代码的执行流 程就足够了,读者不需要知道如何编写模型。本书使用两个主流深度学习库 (TensorFlow 和 PyTorch)的示例进行讲解,无论读者偏好哪个框架,都可以使 用 Ray 来开发机器学习项目。
本书涵盖很多高级机器学习主题,但主要关注 Ray 以及如何使用它。书中讨论的机器学习示例对你来说可能是新的,可能需要多读几遍,但你仍然可以专注于Ray的API以及如何在实践中使用 API。了解了阅读本书的要求,如下是你 能从本书获得的知识:
? 如果你是数据科学家,Ray可为你提供创建分布式机器学习应用程序的新途 径。你将学会如何在大规模集群中选择超参数,掌握大规模模型训练的实用 知识,并学习先进的强化学习库。
? 如果你是数据工程师,你将学会使用 Ray Data set 进行大规模数据导入,利用Dask on Ray等工具改进管道,并学会如何高效部署模型并进行扩展。
? 如果你是工程师,你将了解 Ray 的底层工作原理,如何在云端运行和扩展Ray集群,以及如何使用Ray与其他项目进行集成。
无论身处什么岗位,读者都可以学习以上所有主题。希望通过阅读本书,你能 够掌握 Ray 的所有功能。
本书目标
本书的目标是帮助刚接触Ray的读者快速掌握并使用Ray。为了让读者理解Ray的底层核心思想,并掌握Ray的主要模块,我们精心选择了内容。阅读完 本书后,你将能够自如地探索比书中内容更复杂的主题。
另外,读者应该知道,本书不是为了提供尽可能多的信息,比如 API 参考或权 威指南。本书也不是使用手册或案例宝典,不能帮助你解决具体任务。本书的 重点是帮助读者学习和理解Ray,通过有趣的示例入门Ray。
软件的发展和淘汰速度很快,但软件背后的基本概念通常变化不大,甚至可以跨越多个版本。本书试图在讲解知识和提供具体代码示例之间取得平衡。即使 示例代码发生了更新,你在本书中的所学所得也并不是徒劳无功的。
虽然Ray的官方文档越来越完善,但我们相信专业的技术图书拥有项目文档难以企及的优势。优秀的技术书籍能激发读者对项目本身的兴趣,让原本没有兴趣的读者翻阅项目的API文档。希望本书也能成为广受欢迎的技术书籍。
本书内容
本书内容经过精心安排,引导读者从Ray的核心概念逐渐深入复杂主题。本书涉及的概念大多附有示例代码,你可以访问 GitHub 仓库(https://oreil.ly/ learning_ray_repo)获取。
本书前3章通过实际示例介绍Ray作为分布式Python框架的基础知识。第 4~10 章介绍Ray高级库,并展示如何使用高级库创建应用程序。第11章对Ray的生态进行总结,并指导读者继续学习。
第 1 章系统介绍 Ray 的三层架构,即内核、库和生态。在本章中,读者将使用 Ray 的库运行首个示例,以初步了解 Ray 的功能。
第 2 章详细介绍 Ray 的基础知识,包括 Ray 的核心 API。该章还会介绍 Ray 的 任务和执行器是如何流畅地扩展 Python 函数和类的。读者还将了解 Ray 的系统 组件以及它们如何协同工作。
第 3 章使用 Ray Core 实现一个分布式强化学习应用程序。读者将从头开始实现 这个应用程序,并观察 Ray 在分发 Python 代码方面的灵活性。
第 4 章简要介绍强化学习,并展示 Ray 如何用 RLlib 实现重要概念。除了展示 若干示例,我们还将深入探讨课程学习( Curriculum Learning ,CL)和使用离 线数据等高级主题。
第 5 章介绍高效调优超参数难在何处、Ray Tune 的工作原理,以及如何在实践 中将其应用于机器学习项目。
第 6 章介绍 Ray Dataset,以及如何将其应用于其他数据处理系统。你还将学习 如何与第三方工具(例如 Dask on Ray)进行集成。
第 7 章介绍分布式模型训练的基础知识,并展示如何使用 Ray Train 与 PyTorch 等 ML 框架。该章还展示如何向模型添加自定义预处理器,如何使用回调函数 监控训练过程,以及如何使用 Tune 调优模型的超参数。
第 8 章介绍如何部署训练好的ML模型,并使用API端点进行查询。该章还介绍 Ray Serve 如何处理在线推理及其架构,并展示如何在实践中使用 Ray Serve。
第 9 章讨论如何配置、启动和扩展 Ray 集群以用于具体应用程序。你将学习 Ray 的集群启动器命令和自动扩展器,以及如何在云端设置集群。该章还将展 示如何在 Kubernetes 上部署 Ray 以及使用其他集群管理器。
第 10 章介绍 ML 计算任务的统一工具集 Ray AIR,它为训练模型或访问自定义 数据源提供了许多第三方集成。
第 11 章介绍 Ray 生态中有趣的插件和扩展。
如何使用代码示例
读者可在本书的 GitHub 仓库( https://oreil.ly/learning_ray_repo)下载所有代 码。GitHub 仓库包含每章代码笔记的notebook 文件夹。通过代码笔记,读者可 以边阅读边运行,也可以根据指导在其他时间运行代码。
对于书中的示例,读者需要安装 Python 3.7 或更高版本。在创作本书时,Ray 对 Python 3.10 的支持只是试验性的,因此建议不要使用高于 3.9 的 Python 版 本译注。所有代码示例都假定读者安装了 Ray,并且每章都包含特定要求。所有 示例都在 Ray 2.2.0 上进行了测试,建议读者在整本书中使用该版本。
推荐序—让分布式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