最近阅读了

Ray: A Distributed Framework for Emerging AI Applications

RLlib: Abstractions for Distributed Reinforcement Learning

两篇文章,然而发现对应的博客解读还是比较少,所以简单总结下这两篇文章,可能还有部分理解不到位的地方请谅解。

首先这是一个开源项目,相关的文档已经可以轻松在网上获得。RLlib: Scalable Reinforcement Learning​ray.readthedocs.ioray-project/ray​github.com

ray是一个针对强化学习及类似学习过程而设计的一个框架,它是为了解决其它框架都无法统一直接地完成强化学习计算的问题而设计的一款可以将强化学习主要计算囊括并分布式化的框架,事实上它并不特别复杂。

首先它将强化学习普遍存在的最重要的几个计算归结为training(模型训练)serving(模型推理) simulation(仿真,这个基本其它框架方案没有满足的,因为它一般是有状态的且大小时间都难以确定,甚至是黑盒)

一般过程,伪代码做过RL的容易读懂:

Ray的主要贡献是、

第一个整合三种计算需求的分布式框架,适合RL

该框架表示并控制这三种计算,主要做到三种功能:

1可伸缩性

2动态负载平衡仿真

3处理大型输入和输出

4一致性(事实上只是通过避免一致性问题来解决),容灾(通过redis数据库),和失败恢复(幂等性的传输只需要重传即可)

另外它只是框架,并不替代tensorflow而是可叠合tensorflow使用,无缝集成。

在目前,Ray还不够完善,但已经可以使用

对于Simulation,因为有可能是黑盒,大小不一,可能有状态(如airsim,openai gym等),所以这类任务看成是粗粒度的(不可分割的),而另外一些如training,serving,它则将其主要视为可以分割的任务(但实际具体的分割还需要自己写,或者直接调用他们写好的RLlib库)这两个分别为:

Task:无状态,可进行细分的任务,优先本地处理,也可轻松移植到空闲服务器上做运算(之所以是无状态的是因为运算内容存在redis中,如果数据不在本机会自动取别的机子取,所以运算实际需要做的是从数据库中取出计算,在将内容存进redis中)

Actors:有状态,粗粒度,异构硬件,异构时间(硬件相关,粗粒度,or黑盒)

相互间调度的方法主要是RPC,对使用者使用方法很简单,用对应的python函数或者注解可以完成,类似与操作系统陷入内核的操作,远程调用执行,一段时间后直接从缓冲区取数据即可,其余的分配任务到远程的行为框架会根据其算法自动完成。

在Ray里,需要将计算抽象成对应计算图进行管理,

中间传输的主要是数据对象(长方形)和远程函数调用信息

边分为三种 数据边、控制边(控制信号),状态边(actor状态的保持)

点分为2种(球型的),task, actor

具体的实际系统层面的话分成两层:应用层(写程序在这层) 系统层(实际调配层),如下图所示

driver就是用户写的调用ray remote的函数,worker就是完成task的工人,actor则是需要完成的actor任务,每个分节点上都有局部调度器,及数据对象存储(一般数据对象只在Node节点上调度,减少总节点的负载,总结点负责全局调度,不存有具体数据,只存储数据在分节点的位置)

GCS:全局redis,调度器要安排在主要链路之外,调整redis内对象和消息队列进行异步调度

GCS大大简化了Ray的总体设计,因为它使系统中的每个组件都处于无状态。这不仅简化了对容错的支持(即故障时,组件只需重新启动并从GCS读取沿袭),而且可以轻松地独立地扩展分布式对象存储和调度程序

自底而上的调度:

一般对于worker和task,最方便且消耗最小的就是直接在自己节点上运算,所以该框架设计task优先在本Node上调度,在性能不足时才会向总调度器请求往别的机子取调度。

还有个小插曲是这个框架设计大量RPC和复制,于是相关大佬对此做了更多的优化,如与redis共享内存等。

更多介绍详见:

最后是一个官方例子(矩阵a+b),嫌麻烦直接贴英文说明

RLlib:

虽然有了ray,但对于某一算法(如DQN,DDPG)一般不了解这个框架的人不知道怎么写,怎么样让task划分并行,于是该实验室就基于Ray这个库实现了多种RL算法形成一个可以方便直接调用的库,包括DQN DDPG等

其设计理念是这样的:

基于ray框架,组件化实现强化学习经典方法

构建了不同形式的计算模型,无导优化,model base,策略优化,多种异步任务

且需要保证可以集中统一控制

对于每个分布式的rl算法,可以编写一个等价的算法,显示逻辑上的集中式程序控制。同时算法子任务交给别机器进行处理。

整体设计大任务,然后单任务分小块并行

rllib将算法的实现分离为特定于算法的策略图的声明和与算法无关的策略优化器(如重要性采样)的选择。

具体子方法算法无关的实现,从而可以互相组合。

如策略优化器负责分布式采样、参数更新和管理重放缓冲区等性能关键任务。

python ray分布式_分布式框架Ray及RLlib简易理解相关推荐

  1. 有望取代Spark,Michael Jordan和Ion Stoica提出下一代分布式实时机器学习框架Ray牛在哪?...

    从MR到Spark再到Ray Michael I. Jordan力荐的Ray 尽在"Ray Summit Pre-Con" 2020年9月21日 09:00-12:10 Ray项目 ...

  2. 精通Python网络爬虫_核心技术框架与项目实战_韦玮.pdf

    精通Python网络爬虫_核心技术框架与项目实战_韦玮 编辑推荐 从技术.工具.实战3个维度讲透Python网络爬虫各项核心技术和主流框架,深度讲解网络爬虫的抓取技术与反爬攻关技巧 内容简介 随着大数 ...

  3. 分布式和非分布式_分布式防御虚假信息

    分布式和非分布式 I spoke recently at Disclosure - a conference started by Marc Rogers, bringing together int ...

  4. python手机充值代码_不用框架,原生使用python做注册接口/登陆接口/充值接口的测试,做的数据/代码分离...

    注意充值时候,cookie的处理方法,还是原来的三种方法 1.操作数据文件  do_exclel.py # -*- conding:utr-8 -*- #@Time :2018/11/8 22:46 ...

  5. java id生成器 分布式_分布式高效唯一ID生成器(sequence)

    分布式高效唯一ID生成器(sequence) 简介 高效GUID产生算法(sequence),基于Snowflake实现64位自增ID算法. Twitter-Snowflake算法产生的背景相当简单, ...

  6. java分布式_分布式锁的四种JAVA实现方式

    前言 作为这一段时间学习分布式锁的总结,本文总结了四种Java分布式锁的实现方式,简单编写了代码,进行模拟实现.相关代码存放在我的github仓库. 为什么要用锁 系统内,有多个消费者,需要对同一共享 ...

  7. base cap 分布式_分布式基础(1):CAP原理、BASE思想和最终一致性

    CAP,BASE和最终一致性是NoSQL数据库存在的三大基石. CAP C: Consistency 一致性 A: Availability 可用性(指的是快速获取数据) P: Tolerance o ...

  8. java activemq 分布式_分布式--ActiveMQ 消息中间件(一)

    1). ActiveMQ ActiveMQ是Apache所提供的一个开源的消息系统,完全采用Java来实现,因此,它能很好地支持J2EE提出的JMS(Java Message Service,即Jav ...

  9. python rpc调用_从0到1:全面理解 RPC 远程调用

    上一篇关于 WSGI 的硬核长文,不知道有多少同学,能够从头看到尾的,不管你们有没有看得很过瘾,反正我是写得很爽,总有一种将一样知识吃透了的错觉. 今天我又给自己挖坑了,打算将 rpc 远程调用的知识 ...

最新文章

  1. java servlet 请求_Java中前台JSP请求Servlet实例(http+Servlet)
  2. 资源|最好的九张机器学习/深度学习代码速查表,附高清下载
  3. python实现RSA算法,对数据进行加密认证
  4. Flask之Flask实例有哪些参数
  5. Tomcat中文乱码解决办法
  6. DOA算法1:MUSIC算法(一)
  7. proteus三输入与非门名字_proteus常用元件中英文对照表
  8. 我的十年十念 ——十年工作感言
  9. python简说(二)list
  10. Java如何处理参数中带特殊符号的请求?
  11. 树莓派 音频本地的录制与播放、远程音频直播
  12. JavaWeb项目搭建准备工作
  13. 沈航组成原理作业——1
  14. IT运维管理的服务内容包括哪些
  15. Compose Android 开发终极挑战赛: 天气应用
  16. 聊聊 effects 与 reducers--React AntDesign Dva
  17. js中奖人员向上滚动或者文章标题向上滚动 无缝衔接
  18. Arcgis For Android 加载天地图(拥有缓存功能)
  19. 视频剪辑PR各种版本
  20. 轻松构建网络负载平衡群集(组图)

热门文章

  1. nuxt webpack配置css,vuecli或nuxt用Webpack的优雅ProgressBar(webpackBar)
  2. mysql查询今日没有时间字段_关于日期及时间字段的查询
  3. 利用php百马百担_百鸡百钱===百马百担====for循环嵌套
  4. 电子产品设计emc风险评估_书籍介绍:EMC设计方法与风险评估技术
  5. C++设计模式详解之适配者模式解析
  6. 条件过滤(商品名称、价格以及商品类别的查询)
  7. CoreOS ignition简介
  8. zlib-1.2.11手册
  9. ifconfig源代码-NetBSD
  10. python正则怎么取反_第11.19节 Python 中正则表达式的扩展功能:前视断言和前视取反...