Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Ray:AI的分布式系统

Ray:AI的分布式系统

作者头像
用户1045622
发布于 2018-02-05 07:14:20
发布于 2018-02-05 07:14:20
2.3K00
代码可运行
举报
运行总次数:0
代码可运行

随着机器学习的算法和技术的进步,越来越多的机器学习应用程序需要多台机器,并且必须利用并行性。但是,在集群上进行机器学习的基础设施仍然是特设的。尽管针对特定用例(如 参数服务器或超参数搜索)和AI(人工智能)之外的高质量分布式系统(如HadoopSpark)提供了良好的解决方案,但在边界开发算法的从业者往往从头构建自己的系统基础架构。这相当于多余的努力。

举例来说,采取一个概念上简单的算法,如强化学习的进化策略。该算法大约有十几行伪代码,其Python实现并不多。但是,在较大的机器或集群上高效地运行算法需要更多的软件工程。作者的实现涉及数千行代码,并且必须定义通信协议,消息序列化和反序列化策略以及各种数据处理策略。

Ray(高性能分布式执行框架)的其中一个目标是使从业者能够将一个运行在笔记本电脑上的原型算法,用相对较少的代码行使之成为一个高性能的分布式应用程序并在集群(或多个单核机器)上高效运行。这样的框架应该包括手动优化系统的性能优势,而不需要用户对调度,数据传输和机器故障进行推理。

开源的AI框架

深度学习框架的关系: Ray与TensorFlow,PyTorch和MXNet等深度学习框架完全兼容,在许多应用中与Ray一起使用一个或多个深度学习框架是很自然的(例如,我们的强化学习库大量地使用TensorFlow和PyTorch)。

与其他分布式系统的关系:目前使用了许多流行的分布式系统,但是其中大多数并不是用AI应用程序构建的,且缺乏支持所需的性能以及表示AI应用程序的API(应用程序编程接口)。目前的分布式系统中缺少以下功能(在各种组合中):

  • 支持毫秒级任务和每秒数百万个任务
  • 嵌套并行(任务内并行任务,例如,超参数搜索内部的并行模拟)(见下图)
  • 在运行时动态确定任意任务依赖关系(例如,为了避免等待缓慢的工作人员)
  • 在共享可变状态下运行的任务(例如,神经网络权重或模拟器)
  • 支持异构资源(CPU,GPU等)

一个嵌套并行的简单例子。一个应用程序运行两个并行的实验(每个都是一个长期运行的任务),每个实验运行一些并行的模拟(每个都是一个任务)。

有两种使用Ray的主要方法:通过其较低级别的API和更高级别的库。较高级别的库建立在较低级别的API之上。目前这些包括Ray RLlib,一个可扩展的强化学习库和Ray.tune,一个高效的分布式超参数搜索库。

Ray低级API

Ray API的目标是自然地表达非常普遍的计算模式和应用程序,而不局限于像MapReduce这样的固定模式。

动态任务图

Ray应用程序或作业中的基础基元是一个动态任务图。这与TensorFlow中的计算图非常不同。在TensorFlow中,一个计算图代表一个神经网络,并且在单个应用程序中执行多次,而在Ray中,任务图代表整个应用程序,并且只执行一次。任务图不是事先知道的。它是在应用程序运行时动态构建的,执行一个任务可能会触发创建更多任务。

一个计算图的例子。白色的椭圆形表示任务,蓝色的方框表示对象。箭头表示任务取决于对象或任务创建对象。

任意的Python函数都可以作为任务执行,并且可以任意地依赖于其他任务的输出。这在下面的例子中说明。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 定义两个远程函数。 调用这些函数创造任务
# 这是远程执行的。

@ray.remote
def multiply(x, y):
    return np.dot(x, y)

@ray.remote
def zeros(size):
    return np.zeros(size)

# 并行启动两个任务。这些立即返回预期结果,且
# 任务在后台执行。
x_id  zeros.remote((100, 100))
y_id = zeros.remote((100, 100))

# 开始第三个任务。在前两个任务完成之前,不会安排这一任务.
z_id = multiply.remote(x_id, y_id)

# 得到结果。直到第三个任务完成才可以得到。
z = ray.get(z_id)

Actors

只有上述远程功能和任务不能完成的一件事情是让多个任务在相同的共享可变状态下运行。这出现在机器学习中的多处上下文中,其中共享状态可以是模拟器的状态、神经网络的权重、或完全其他的东西。Ray使用actor抽象来封装多个任务间共享的可变状态。下面是一个如何用Atari模拟器做到这一点的虚构示例。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import gym

@ray.remote
class Simulator(object):
    def __init__(self):
        self.env = gym.make("Pong-v0")
        self.env.reset()

    def step(self, action):
        return self.env.step(action)

# 创建一个模拟器,这将启动一个远程进程为
# 该actor运行所有方法。
simuator = Simulator.remote()

observations = []
for _ in range(4):
    # 在模拟器中执行操作0.此调用不阻塞并且
    # 返回一个预期结果
    observations.append(simulator.step.remote(0))

虽然简单,一个actor可以用非常灵活的方式使用。例如,actor可以封装模拟器或神经网络策略,并可用于分布式培训(如 使用参数服务器)或在实时应用程序中进行策略服务。

左:一个为许多客户端进程提供预测/操作的actor。 右:多个参数服务器actor使用多个工作进程执行分布式培训。

参数服务器示例

一个参数服务器可以被实现为Ray actor,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@ray.remote
class ParameterServer(object):
    def __init__(self, keys, values):
        # 这些值将会发生改变,因此我们需要创建一个本地副本。
        values = [value.copy() for value in values]
        self.parameters = dict(zip(keys, values))

    def get(self, keys):
        return [self.parameters[key] for key in keys]

    def update(self, keys, values):
        # 这个更新函数使现有的值增加,但是更新
        # 函数可以被任意定义
        for key, value in zip(keys, values):
            self.parameters[key] += value

看一个更完整的例子

要实例化参数服务器,请执行以下操作。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
parameter_server = ParameterServer.remote(initial_keys, initial_values)

要创建连续检索和更新参数的四个长时间运行的工作进程,请执行以下操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@ray.remote
def worker_task(parameter_server):
    while True:
        keys = ['key1', 'key2', 'key3']
        # 获取最新的参数。
        values = ray.get(parameter_server.get.remote(keys))
        # 计算一些需更新参数。
        updates = …
        # 更新参数。
        parameter_server.update.remote(keys, updates)

# 启动四个长期任务。
for _ in range(4):
    worker_task.remote(parameter_server)

Ray高级库

Ray RLlib是一个可扩展的强化学习库,可在许多机器上运行。它可以通过示例培训脚本以及Python API使用。它目前包括以下的实现:

  • A3C(异步的优势行动者评论家算法)
  • DQN(Deep Q-Network)
  • 进化策略
  • PPO(近端策略优化)

我们正在努力增加更多的算法。RLlib与OpenAI体育馆完全兼容。

Ray.tune是一个高效的分布式超参数搜索库。它提供了用于深度学习,强化学习和其他计算密集型任务的Python API。下面是个说明用法的虚构示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from ray.tune import register_trainable, grid_search, run_experiments

# 优化功能。超参数是在配置
# 参数。
def my_func(config, reporter):
    import time, numpy as np
    i = 0
    while True:
        reporter(timesteps_total=i, mean_accuracy=(i ** config['alpha']))
        i += config['beta']
        time.sleep(0.01)

register_trainable('my_func', my_func)

run_experiments({
    'my_experiment': {
        'run': 'my_func',
        'resources': {'cpu': 1, 'gpu': 0},
        'stop': {'mean_accuracy': 100},
        'config': {
            'alpha': grid_search([0.2, 0.4, 0.6]),
            'beta': grid_search([1, 2]),
        },
    }
})

正在进行的结果可以使用Tensorboard和rllab的VisKit(或者您可以直接阅读JSON日志)等工具进行实时可视化。Ray.tune支持网格搜索、随机搜索和更复杂的早期停止算法,如HyperBand。

更多信息

有关Ray的更多信息,请查看以下链接。

Ray可以用pip install ray安装。我们鼓励你尝试Ray,看看你的想法。如果您对我们有任何反馈意见,请通过我们的邮件列表ray-dev@googlegroups.com告诉我们。

评论
登录后参与评论
暂无评论
推荐阅读
Ray:AI的分布式系统
随着机器学习算法和技术的进步,越来越多的机器学习应用程序需要多台机器,而且必须利用并行性。但是,在集群上进行机器学习的基础设施仍然是专门设置的。尽管针对特定用例(如参数服务器或超参数搜索)和AI之外的高质量分布式系统(如Hadoop或Spark)提供了良好的解决方案,但在边界开发算法的从业者往往从头构建自己的系统基础架构。这些努力相当于是多余的。
QiqiHe
2018/02/05
2.9K0
Ray:AI的分布式系统
开源 | 伯克利AI分布式框架Ray,兼容TensorFlow、PyTorch与MXNet
选自BAIR Blog 机器之心编译 参与:李泽南、刘晓坤 不久之前,机器之心推荐了一篇论文,介绍 UC Berkeley 研究员发布的分布式系统 Ray(参见:学界 | Michael Jodan 等人提出新型分布式框架 Ray:实时动态学习的开端》。开发者称,Ray 专门为人工智能应用设计,通过这款框架,运行于笔记本电脑上的原型算法仅需加入数行代码就可以转化为高效的分布式计算应用。近日,该框架已被开源。在本文中,伯克利官方 AI 博客对开源框架 Ray 做了详细介绍。 GitHub 链接:https:/
机器之心
2018/05/10
2.3K0
使用Ray并行化你的强化学习算法(一)
强化学习算法的并行化可以有效提高算法的效率。并行化可以使单机多cpu的资源得到充分利用,并行化也可以将算法中各个部分独立运行,从而提高运行效率,如将环境交互部分和训练网络部分分开。我们这里介绍如何使用分布式框架Ray以最简单的方式实现算法的并行化。
CreateAMind
2019/12/19
4.8K0
Ray,面向新兴AI应用的分布式框架
下一代AI应用需要不断和环境进行交互,并且在交互中学习。这些应用暴露了新的系统需求:性能和弹性。本文提出了Ray解决上述问题。
陆道峰
2020/08/20
2K0
使用 Ray 用 15 行 Python 代码实现一个参数服务器
参数服务器是很多机器学习应用的核心部分。其核心作用是存放机器学习模型的参数(如,神经网络的权重)和提供服务将参数传给客户端(客户端通常是处理数据和计算参数更新的 workers)
用户1107453
2018/09/29
1.8K0
深度强化学习框架Ray|RLLib|Tune学习笔记
通过拿到远程函数的ID,可以在集群的任何地方,通过get(ID)获取该函数返回值
SL_World
2021/09/18
3.8K0
简单的方式创建分布式应用程序
面对计算密集型的任务,除了多进程,就是分布式计算,如何用 Python 实现分布式计算呢?今天分享一个很简单的方法,那就是借助于 Ray。
somenzz
2021/09/14
1.2K0
UC Berkeley提出新型分布式执行框架Ray:有望取代Spark
译者|马卓奇 编辑|Natalie AI 前线导读:下一代人工智能应用程序需要不断地与环境交互,并从这些交互中学习。这对系统的性能和灵活性提出了新的要求,而现有的机器学习计算框架大多无法满足这些要求。为此,UC Berkeley AMP 实验室开发了一个高性能分布式执行框架 Ray,并于近日在 Arxiv 上发表了相关论文:《Ray: A Distributed Framework for Emerging AI Applications》。 更多干货内容请关注微信公众号“AI 前线”,(ID:ai-f
企鹅号小编
2018/01/16
1.8K0
UC Berkeley提出新型分布式执行框架Ray:有望取代Spark
学界 | UC Berkeley提出新型分布式框架Ray:实时动态学习的开端
选自arXiv 机器之心编译 参与:路雪、刘晓坤 为应对新型 AI 应用不断提高的性能需求,近日 Michael Jordan 等人提出了一个新型的分布式框架 Ray,主要针对当前集群计算框架无法满足高吞吐量和低延迟需求的问题,以及很多模拟框架局限于静态计算图的缺点,并指出强化学习范式可以自然地结合该框架。 人工智能在一些现实世界应用中正逐渐发展为主力技术。然而,到目前为止,这些应用大部分都是基于相当受限的监督学习范式,其中模型是离线学习的,然后提供在线预测。随着人工智能领域的成熟,使用比标准的监督学习设
机器之心
2018/05/11
9940
使用Ray并行化你的强化学习算法(三)
我们先看算法的核心部分:model,包含了TensorFlow建图,计算loss,训练和测试。
CreateAMind
2019/12/19
1.7K0
使用Ray并行化你的强化学习算法(三)
高性能分布式执行框架——Ray
Ray是UC Berkeley RISELab新推出的高性能分布式执行框架,它使用了和传统分布式计算系统不一样的架构和对分布式计算的抽象方式,具有比Spark更优异的计算性能。
Florian
2018/08/21
5.7K0
高性能分布式执行框架——Ray
继Spark之后,UC Berkeley 推出新一代高性能深度学习引擎——Ray
继 Spark 之后,UC Berkeley AMP 实验室又推出一重磅高性能AI计算引擎——Ray,号称支持每秒数百万次任务调度。那么它是怎么做到的呢?在试用之后,简单总结一下:
木鸟杂记
2021/09/26
1.2K0
强化学习异步分布式训练实现
本文介绍基于Tensorflow的强化学习off policy算法的分布式实现,包括多机共享replay buffer。分布式 TensorFlow 允许我们在多台机器上运行一个模型,所以训练速度或加速效果能显著地提升。
CreateAMind
2019/08/09
1.9K1
分布式计算框架--Ray
Ray是一个高性能的分布式计算框架,在AI和大模型领域得到了广泛应用,OpenAI的训练底层框架就是Ray。Ray提供了统一的分布式计算抽象,可以像在本机上执行python函数或类的实例,而不用关注该函数或实例在哪些机器上执行。
aaronwjzhao
2025/04/30
5310
Ray和RLlib用于快速并行强化学习
Ray不仅仅是一个用于多处理的库,Ray的真正力量来自于RLlib和Tune库,它们利用了强化学习的这种能力。它使你能够将训练扩展到大型分布式服务器,或者利用并行化特性来更有效地使用你自己的笔记本电脑进行训练。
磐创AI
2020/07/02
3.2K0
Ray和RLlib用于快速并行强化学习
PaddlePaddle升级解读 | PARL1.1一个修饰符实现并行强化学习算法
WAVE SUMMIT 2019深度学习开发者峰会,基于PaddlePaddle打造的深度强化学习框架PARL发布了聚焦于并行的1.1版本。本篇文章为大家带来PARL在并行算法优化方面的最新进展。
用户1386409
2019/06/06
7920
PaddlePaddle升级解读 | PARL1.1一个修饰符实现并行强化学习算法
分布式计算框架:Spark、Dask、Ray
随着计算技术的发展,有些应用需要非常巨大的计算能力才能完成,如果采用集中式计算,需要耗费相当长的时间来完成。
zhangjiqun
2024/12/14
1.9K0
分布式计算框架:Spark、Dask、Ray
单机超越分布式?!强化学习新姿势,并行环境模拟器EnvPool实现速度成本双赢
机器之心专栏 机器之心编辑部 在训练强化学习智能体的时候,你是否为训练速度过慢而发愁?又是否对昂贵的大规模分布式系统加速望而却步?来自 Sea AI Lab 团队的最新研究结果表明,其实鱼和熊掌可以兼得:对于强化学习标准环境 Atari 与 Mujoco,如果希望在短时间内完成训练,需要采用数百个 CPU 核心的大规模分布式解决方案;而使用 EnvPool,只需要一台游戏本就能完成相同体量的训练任务,并且用时不到 5 分钟,极大地降低了训练成本。 目前,EnvPool 项目已在 GitHub 开源,收获超
机器之心
2022/07/12
1.2K0
单机超越分布式?!强化学习新姿势,并行环境模拟器EnvPool实现速度成本双赢
从 Ray 到 Chronos:在 Ray 上使用 BigDL 构建端到端 AI 用例
作者 | Wesley Du, Junwei Deng, Kai Huang, Shan Yu and Shane Huang 作者是英特尔人工智能和分析团队的解决方案架构师,该团队一直致力于 BigDL 的开发。数据科学家和数据工程师可以使用 BigDL 轻松构建端到端的分布式 AI 应用。 1 介绍   Ray 是一个能够非常快速和简单地去构建分布式应用的框架。BigDL 是一个在分布式大数据上构建可扩展端到端 AI 的开源框架,它能利用 Ray 及其本地库(Native Libraries)来支
深度学习与Python
2023/04/01
9050
从 Ray 到 Chronos:在 Ray 上使用 BigDL 构建端到端 AI 用例
深度强化学习库的设计思想带你深入了解DRL:从环境、网络更新、经验池、经验池、算法基类分离度、分布式、多进程等方面评价
大部分深度强化学习 DRL 算法(主要是策略梯度 policy gradient、Actor-Critic Methods)可以抽象成上面这种 **DDPG-style RL training pipeline。**它的可拓展性非常好,且方便拓展,与稳定训练。
汀丶人工智能
2023/10/11
2K0
深度强化学习库的设计思想带你深入了解DRL:从环境、网络更新、经验池、经验池、算法基类分离度、分布式、多进程等方面评价
推荐阅读
相关推荐
Ray:AI的分布式系统
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验