基于Python的分布式高可用扩展引擎Ray 0.2.0发布

来源:互联网 发布:ubuntu卸载程序命令 编辑:程序博客网 时间:2024/05/18 00:21

翻译自https://ray-project.github.io/2017/09/30/ray-0.2-release.html

Ray是为python机器学习、深度学习而开发的高可用、高性能的分布式框架,目前已经发布到0.2.0版本(注:2017-11-1已经发布了0.2.2),下面是版本发布说明
我们很高兴发布Ray 0.2版本发布,本次发布包括以下信息:
* Plasma 对象存储性能的重大提升
* 增加基于Jpuyter 的web UI页面
* 开始可扩展增强学习库的开发
* 行为容错处理

Plasma

自从上次发布后,Plasma对象已经从Ray项目的基础代码移出,Plasma已经成为Apache Arrow项目的一部分,所以他可以在其他大型高可用型内存计算项目单独使用。此外,我们的基于Arrow的序列化库已经移动到pyarrow了。
在0.2版本中,我们提高了写对象的吞吐量至15Gb/s(从单一客户端写),实现这种性能要求需要巨大的页面(减少TLB缓存未命中),可以看这里的指导意见。
对象被写入速度是是一个关键指标,比如,他是A3C和许多其他算法的瓶颈。
你可以通过下面的方法来测试性能瓶颈

import numpy as npimport rayray.init()x = np.ones(10 ** 9, dtype=np.uint8)# Measure the time required to write 1GB to the Plasma store.%time x_id = ray.put(x)

Web UI

我们基于Jupyter-notebook建立了web UI框架,方便立即和调试应用的性能。查看如何使用这个框架,这个UI包括一个基于chrome tracing的任务时间线,我们可以看到任务在哪执行,任务执行了多久,还有任务之间的依赖情况,下面是任务的可视化样例。
任务执行的可视化效果

这种类型的可视化可以很方便查看问题、任务,以及任务的平衡情况。
上面的可视化效果中的任务可以在通过下面的脚本生成出来

import rayimport timeray.init()@ray.remotedef f(x):    time.sleep(0.001)    return 1@ray.remotedef g(*ys):    return 1time.sleep(1)x = 1for _ in range(3):    ys = [f.remote(x) for _ in range(8)]    x = g.remote(*ys)

RLlib

我们开始开发基于Ray的可扩展增强学习库,到目前为止,它包括如下算法:
* 近端优化(PPO)
* 深度学习(QDN)
* 异步优化(A3C)
* 进化策略(ES)
其中DQN、A3C、ES都是基于OpenAI baselines,可以通过下面的方法来使用

# On a single machine.python ray/python/ray/rllib/train.py --alg=PPO \                                     --env=CartPole-v0# On a cluster.python ray/python/ray/rllib/train.py --alg=PPO \                                     --env=CartPole-v0 \                                     --redis-address=<head-node-ip>:6379

这个使用PPO算法来训练一个策略来控制CartPole环境中的客户端。
在亚马逊云上的一组15个m4.16xlarge实例和一个p2.16xlarge实例上利用运行这个(在Humanoid-v1环境训练行走机器人)应用,我们在35分钟内获得超过6000的奖励。推出的产品在512个物理内核上并行化,策略优化在6个GPU上并行化。此实验的相关超参数在 这里。
这个RL库还在开发中,我们正在寻找包括更多的算法实现。

行为容错

我们已经为actor启用了容错功能,如下所示。如果机器发生故障,则在其他机器上重新创建在该机器上运行的行为,并且重播先前在这些演员上执行的任务,以重新创建故障机器的状态。我们正在努力通过使检查点恢复行为状态来提高恢复速度。请参阅Ray中容错的概述。

阅读全文
0 0