【AICon】探索八个行业创新案例,教你在教育、金融、医疗、法律等领域实践大模型技术! >>> 了解详情
写点什么

伯克利开源 Ray Tune:大规模 AI 实验利器

  • 2020-02-26
  • 本文字数:3744 字

    阅读完需:约 12 分钟

伯克利开源Ray Tune:大规模AI实验利器

在本文中,我们将跟大家分享开发两个重要软件库Ray TuneRay Cluster Launcher 的经验, 这两个库现在支持很多流行的开源 AI 库,很多BAIR研究人员用它们来执行大规模 AI 实验。



随着 AI 研究变得越来越注重计算,很多 AI 研究人员的时间和资源都越来越紧缺。现在,很多研究人员依赖 AWS 或谷歌计算平台等云供应商,以获取训练大型模型所需的大量计算资源。

理解研究基础设施

为了更全面地理解这些内容,我们首先来看看业界的标准机器学习工作流(图 1)。



图 1 展示了业界典型的机器学习模型开发工作流


典型的“研究”工作流实际是步骤 2 和 3 之间的紧密循环,大致如图 2 所示。



图 2 展示了用于研究的典型机器学习模型开发工作流。该研究工作流通常是业界工作流的一个分支。


该研究工作流在很大程度上是个迭代的过程,通常受到实验执行步骤(如图 2 中的 B 所示)的制约。通常,一个“实验”包括多个训练作业或“试验”,其中每个试验都是训练单个模型的任务。每个试验可能使用一组不同的配置参数(超参数)或不同的种子来训练一个模型。


在伯克利,我们看到转向云的 AI 研究人员花费大量时间来编写自己的实验执行工具,这些工具整理云供应商的 API 以启动实例、设置依赖项和启动实验。


不幸的是,除了开发这些工具所要投入的大量时间以外,这些临时的解决方法还常常在功能上受到限制:


  • 简化的架构:每个试验通常在单独的节点上启动,没有任何集中控制逻辑。这让研究人员难以实施优化技术,如基于群体的训练(Population-based Training)贝叶斯优化(Bayesian Optimization),这些技术需要在不同的运行之间进行协调。

  • 缺乏故障处理:如果实例失败,那么训练作业的结果会永远丢失。研究人员常常在电子表格上跟踪实时实验来手动管理故障转移,但是,这么做既费时又容易出错。

  • 没有竞价性实例折扣(Spot Instance Discount):缺乏容错能力也意味着放弃云供应商提供的竞价性实例折扣(最高可达90%)。


总之,在云资源上测试和管理分布式实验既费力又容易出错。因此,采用易于使用的框架以在执行和研究之间架起桥梁可以大大加快研究过程。来自 BAIR 的几个实验室成员协作构建了两个互补的工具,用于在云中进行 AI 实验:


Ray Tune:用于训练和超函数调优的容错框架。具体来说,Ray Tune(或简称“Tune”):


  1. 协调并行作业以支持并行超参数优化

  2. 自动检查点,并在机器有故障时恢复训练作业。

  3. 提供了很多最先进的超参数搜索算法,如基于群体的训练( Population-based Training)和HyperBand


Ray Cluster Launcher:一个实用程序,用于管理 AWS、GCP 和 Kubernetes 之间的资源调配和集群配置。

Ray Tune

为了克服这些临时实验执行工具的缺点,我们构建了 Tune,利用了 Ray Actor API 并添加故障处理来解决问题。

基于 Actor 的训练

很多用于超参数优化的技术需要一个框架来监视所有并发训练作业的指标并控制训练执行。为了解决这个问题,Tune 使用一种 master-worker 架构来集中决策,并使用 Ray Actor API 的分布式 worker 来通信。


什么是 Ray Actor API?Ray 提供一个API从一个 Python 类来创建一个“actor”。这使得类和对象可以在并行和分布式设置中使用 。



Tune 使用一个可训练的(Trainable)类接口来定义一个 actor 类,这个类专门用于训练模型。该接口公开了如_train、_stop、_save 和_restore 等方法,这些方法允许 Tune 监视中间的训练指标并杀死效果不佳的试验。


class NewTrainable(tune.Trainable):    def _setup(self, config):        ...    def _train(self):        """Run 1 step of training (e.g., one epoch).        Returns:            A dict of training metrics.        """        ...    def _save(self, checkpoint_dir):        ...    def _restore(self, checkpoint_path):        ...
复制代码


更重要的是,通过利用 Actor API,我们可以在 Tune 中实施并行超参数优化模式,如HyperBand和并行贝叶斯优化,而这些是研究人员以前使用的实验执行工具无法做到的。

容错

云供应商常常以很大的折扣提供“可抢占的实例”(如,竞价型实例)。大幅度的折扣使得研究人员可以显著地降低其云计算成本。但是,缺点是云供应商可以在任何时候终止或停止运转我们的机器,导致我们丢失训练进度。


为了可以使用竞价型实例,我们构建了 Tune 以在集群不同的机器中自动地建立检查点并恢复训练作业,这样,实验将对抢占和集群大小的调整具有弹性。


# Tune will resume training jobs from the last checkpoint# Tune将从最新的检查点恢复训练作业# even if machines are removed.#即使机器已被删除。analysis = tune.run(    NewTrainable,    checkpoint_freq=5,  # Checkpoint every 5 epochs    config={"lr": tune.grid_search([0.001, 0.01, 0.1])},)
复制代码

它是如何工作的?


如果在某个节点丢失的时候,有个训练作业仍在其上执行且该训练作业(试验)的检查点存在,那么,Tune 将一直等到有可用资源可用,以再次执行该试验。


如果该试验被放置在一个不同的节点上,那么,Tune 将自动把之前的检查点文件推送到那个节点并恢复状态,即使失败,该试验也可以从最新的检查点恢复。

Ray Cluster Launcher

上面,我们描述了为自动化集群设置过程而整理云供应商 API 的痛苦之处。但是,即使有了用于分解集群的工具,研究人员还是必须经过繁琐的工作流才能进行实验:



为了简化一下这个过程,我们构建了 Ray Cluster Launcher,这个工具会调配资源并自动调整资源大小,并且在 AWS EC2、GCP 和 Kubernetes 上启动一个 Ray 集群。然后,我们把以上用于进行一个实验的步骤抽象成一个简短的配置文件和一个命令:


# CLUSTER.yamlcluster_name: tune-defaultprovider: {type: aws, region: us-west-2}auth: {ssh_user: ubuntu}min_workers: 0max_workers: 2# Deep Learning AMI (Ubuntu) Version 21.0head_node: {    InstanceType: c4.2xlarge,    ImageId: ami-0b294f219d14e6a82}worker_nodes: {    InstanceType: c4.2xlarge,    ImageId: ami-0b294f219d14e6a82}setup_commands: # Set up each node.    - pip install ray numpy pandasfile_mounts: {  '/home/ubuntu/files':'my_files/',}
复制代码


下面的命令用来启动一个集群、上传并运行一个用于分布式超参数调整的脚本,然后关闭该集群。


$ ray submit CLUSTER.yaml --start --stop tune_experiment.py \--args="--address=auto"
复制代码


研究人员现在使用 Ray Tune 和 Ray Cluster Launcher 同时在数十台 GPU 机器上启动数百个并行作业。Ray Tune的分布式实验文档页面展示了如何执行该操作。

总结

在过去的一年中,我们一直和 BAIR 不同的团队合作,以更好地让研究人员利用云。我们必须让 Ray Tune 和 Ray Cluster Launcher 变得足够通用,以支持大量研究代码库,与此同时,要把上手门槛降到人人可以在几分钟内尝试一下的程度。


# An example Ray Tune script for PyTorch.import torch.optim as optimfrom ray import tunefrom ray.tune.examples.mnist_pytorch import (    get_data_loaders, ConvNet, train, test)class TrainMNIST(tune.Trainable):    def _setup(self, config):        self.train_loader, self.test_loader = get_data_loaders()        self.model = ConvNet()        self.optimizer = optim.SGD(            self.model.parameters(), lr=config.get("lr", 0.01))    def _train(self):        train(self.model, self.optimizer, self.train_loader)        acc = test(self.model, self.test_loader)        return {"mean_accuracy": acc}    def _save(self, checkpoint_dir):        checkpoint_path = os.path.join(checkpoint_dir, "model.pth")        torch.save(self.model.state_dict(), checkpoint_path)        return checkpoint_path    def _restore(self, checkpoint_path):        self.model.load_state_dict(torch.load(checkpoint_path))analysis = tune.run(    TrainMNIST,    stop={"training_iteration": 50},    config={"lr": tune.grid_search([0.001, 0.01, 0.1])})print("Best hyperparameters: ", analysis.get_best_config(    metric="mean_accuracy"))# Get a dataframe for analyzing trial results.df = analysis.dataframe()
复制代码


Tune 已经成长为一个流行的超参数调整开源项目。很多其他流行的研究项目也在使用它,从基于群体的数据增强( Population-based Data Augmentation)项目到用于AllenNLP的超参数调整( Hyperparameter Tuning)以及 AnalyticsZoo 的AutoML


BAIR 的很多开源项目现在都依赖 Ray Tune 和 Ray Cluster Launcher 的组合来编排和执行分布式实验,其中包括 rail-berkeley 的softlearning、HumanCompatibleAI 的对抗策略(adversarial-policies),以及流项目(flow-project)的流。


来,动手尝试一下Ray Tune和 Ray Cluster Launcher 吧!

相关链接


原文链接:


Large Scale Training at BAIR with Ray Tune


公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2020-02-26 19:003848

评论

发布
暂无评论
发现更多内容

企业即时通讯解决方案,WorkPlus助力高效沟通与协作

WorkPlus

企业即时通讯

公共卫生的未来:智慧公厕来了

光明源智慧厕所

智慧厕所 智慧公厕

重磅发布|博睿数据IT运维最佳实践白皮书

博睿数据

运维 可观测性 白皮书

打造次世代分析型数据库(四):几十张表关联?小Case!

腾讯云大数据

数据库

企业沟通平台私有部署,让沟通更高效数据更安全

WorkPlus

专业私有化视频会议软件,WorkPlus Meet助力企业构建高效协作的沟通平台

WorkPlus

根据人类反馈进行强化学习的5大关键步骤

澳鹏Appen

大模型 数据训练 生成式AI LLM RLHF

支持私有化部署的WorkPlus,助您构建定制化的即时通讯平台

WorkPlus

面试官:你工作了3年了,这道算法题你都答不出来?

高端章鱼哥

面试 算法 LeetCode

基于低代码平台少量编码完成软件开发

互联网工科生

系统开发 低代码开发 JNPF

低代码开发框架 助力企业打造新时代技术底座

力软低代码开发平台

DeFi 集成:扩大加密货币交易平台开发的视野

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 NFT开发 区块拉开发

腾讯大牛耗时1个月整理的"JVM学习笔记"深入底层,面面俱到!

小小怪下士

Java JVM

基于Java+vue开发的企业级人力资源管理系统

金陵老街

开辟ICT新视野 直通华为云专家:一堂华为云Astro低代码启蒙课 ——华为云HCSD校园沙龙之西安站

华为云PaaS服务小智

云计算 软件开发 低代码 华为云

Docker 入门教程(简明易懂、零基础篇)

程序员万金游

#运维 #后端 #docker

2023 Bonree ONE 秋季产品发布会:亮点抢先看!

博睿数据

运维 可观测性

PDF Squeezer mac(pdf文档大小压缩软件) v4.3.7永久激活版

mac

苹果mac Windows软件 PDF Squeezer 文件压缩软件

2000字说清音视频在社交娱乐场景中的应用!

X2Rtc

音视频 RTC 社交娱乐 融合通信

2023-09-27:用go语言,在一个 n x n 的国际象棋棋盘上,一个骑士从单元格 (row, column) 开始, 并尝试进行 k 次移动。行和列是 从 0 开始 的,所以左上单元格是 (0

福大大架构师每日一题

福大大架构师每日一题

IM系统,WorkPlus如何成为企业即时通讯协作的首选?

WorkPlus

IM聊天系统

如何选择适合企业的移动应用管理平台?

WorkPlus

pycharm pro for mac(Python编辑开发软件) v2023.2.1中文激活版

mac

pycharm 苹果mac Windows软件 集成开发软件

玩转 CODING 自动化助手,助力高效研发!

CODING DevOps

腾讯云数据库再获顶会认可,论文入选VLDB2023

Geek_2d6073

Sovit2D组态设计 Web Scada烟气脱硫工艺流程

2D3D前端可视化开发

物联网 组态软件 工业控制 工业自动化 烟气脱硫

软件测试 | AI大模型应用开发实训营来啦~ 大模型学习资料免费领

测试人

人工智能 程序员 AI 软件测试 大数据模型

免费但很全能,Amazon CodeWhisperer 让编程更快

科技热闻

袋鼠云代码检查服务,揭秘高质量代码背后的秘密

袋鼠云数栈

大数据 数据中台 代码检查

产品解读 | 数据服务平台:KDP

KaiwuDB

一文教你理解Kafka offset

越长大越悲伤

kafka

伯克利开源Ray Tune:大规模AI实验利器_开源_伯克利BAIR博客_InfoQ精选文章