Ray和RLlib用于快速并行强化学习

BitExplorerPro
• 阅读 2783

作者|Christian Hubbs
编译|VK
来源|Towards Data Science

Ray不仅仅是一个用于多处理的库,Ray的真正力量来自于RLlib和Tune库,它们利用了强化学习的这种能力。它使你能够将训练扩展到大型分布式服务器,或者利用并行化特性来更有效地使用你自己的笔记本电脑进行训练。

我们展示了如何使用Ray和RLlib在OpenAI Gym上构建一个自定义的强化学习环境。

一个RLlib教程

一旦你用pip install ray[rllib]安装了Ray和RLlib,你就可以用命令行中的一个命令来训练你的第一个RL代理:

rllib train --run=A2C --env=CartPole-v0

这将告诉你的计算机在CartPole环境使用Advantage Actor Critic Algorithm (A2C) 算法训练。A2C和许多其他算法已经内置在库中,这意味着你不必担心自己实现这些算法的细节。

这是非常棒的,特别是如果你想使用标准的环境和算法来训练。然而,如果你想做得更多,你就得挖得更深一些。

RLlib代理

可以通过ray.rllib.agents访问的各种算法。在这里,你可以找到在PyTorch和Tensorflow中的不同实现:https://github.com/ray-projec...

这些都是使用算法的trainer方法访问的。例如,如果你想使用如上所示的A2C,你可以运行:

import ray
from ray.rllib import agents
ray.init()
trainer = agents.a3c.A2CTrainer(env='CartPole-v0')

如果你想尝试DQN,你可以调用:

trainer = agents.dqn.DQNTrainer(env='CartPole-v0') #深度Q网络

所有算法都遵循相同的基本结构,从小写字母algo缩写到大写字母algo缩写,然后是"Trainer"。

更改超参数就将配置信息的dict传递给config参数。一个快速了解你有什么可用的调用trainer.config以打印出可用于所选算法的选项。一些例子包括:

  • fcnet_hiddens控制隐藏单元和隐藏层的数量(用一个叫model的字典传递到config,然后是一个列表,我将在下面展示一个例子)。
  • vf_share_layers确定你是否拥有一个具有多个输出头的神经网络(https://www.datahubbs.com/two...,或者独立的值和策略网络。
  • num_workers设置并行化的处理器数量。
  • num_gpus来设置你将使用的GPU数量。

从网络有各种回调和多代理的设置(通常位于model的字典中)

例如:为CartPole训练PPO

我想展示一个快速的例子来让你开始,并向你展示如何在一个标准的,OpenAI Gym环境下工作。

选择你的IDE

import ray
from ray.rllib import agents
ray.init() # 如果已经调用,跳过或设置为忽略
config = {'gamma': 0.9,
          'lr': 1e-2,
          'num_workers': 4,
          'train_batch_size': 1000,
          'model': {
              'fcnet_hiddens': [128, 128]
          }}
trainer = agents.ppo.PPOTrainer(env='CartPole-v0', config=config)
results = trainer.train()

config字典更改了上述值的默认值。你可以看到我们如何通过在config字典中嵌套一个名为model的字典来影响网络中的层数和节点数。一旦我们指定了配置,在trainer对象上调用train()方法将把环境发送给worker并开始收集数据。一旦收集了足够的数据(根据上面的设置收集了1,000个样本),模型就会更新并将输出发送到一个名为results的新字典中。

如果你想要运行多个更新,你可以设置一个训练循环来连续调用给定次数的迭代的train()方法,或者直到达到某个其他阈值。

定制你的RL环境

OpenAI Gym及其所有扩展都很棒,但如果你正在寻找RL的新应用程序或在你的公司中使用它,则需要使用自定义环境。

不幸的是,Ray(0.9)的当前版本明确声明它与gym不兼容。值得庆幸的是,使用helper函数可以使自定义gym环境与Ray一起工作。

让我们假设你有一个名为MyEnv-v0的环境,因此你可以像在任何其他gym环境中调用,我们使用gym.make('MyEnv-v0')调用。

要从Ray调用自定义环境,你需要将其封装到一个函数中,该函数将返回environment类,而不是实例化的对象。

def env_creator(env_name):
    if env_name == 'MyEnv-v0':
        from custom_gym.envs.custom_env import CustomEnv0 as env
    elif env_name == 'MyEnv-v1':
        from custom_gym.envs.custom_env import CustomEnv1 as env
    else:
        raise NotImplementedError
    return env

从这里,你可以设置代理并在这个新环境中对其进行训练,只需对训练器进行轻微的修改。

env_name = 'MyEnv-v0'
config = {
    # 不管你想要什么样的配置设置….
    }
trainer = agents.ppo.PPOTrainer(
    env=env_creator(env_name), 
    config=config)
max_training_episodes = 10000
while True:
    results = trainer.train()
    # 输入你喜欢的任何停止条件
    if results['episodes_total'] >= max_training_episodes:
        break
print('Mean Rewards:\t{:.1f}'.format(results['episode_reward_mean']))

注意,在上面,我们使用env_creator调用环境,其他一切保持不变。

使用自定义环境的技巧

如果你习惯于从环境构建自己的模型到网络和算法,那么在使用Ray时需要了解一些特性。

首先,Ray遵循OpenAI Gym API,这意味着你的环境需要有step()和reset()方法,以及指定的observation_space和action_space属性。关于后两个方面,我一直有点懒,因为我可以简单地定义网络输入和输出维度,而不必考虑输入值的范围,例如,gym.spaces方法需要的范围。Ray检查了所有输入,以确保它们都在指定的范围内

在建立你的行动和观察空间时,使用BoxDiscreteTupleMultiDiscreteMultiBinary不能工作(目前),并将导致运行崩溃。相反,在Tuple函数中包装BoxDiscrete

可以的话,利用自定义预处理。Ray对你的状态输入做了一些假设,这些假设通常工作得很好,但是它也使你能够自定义预处理步骤,这可能有助于你的训练。

超越RLlib

Ray可以极大地加快训练速度,使深度强化学习更容易开始。RLlib不是结束(我们只是在这里触及了它的基本功能)。还有一个库,称为Tune,它使你能够调整模型的超参数,并为你管理所有重要的数据收集和后端工作。

原文链接:https://towardsdatascience.co...

欢迎关注磐创AI博客站:
http://panchuang.net/

sklearn机器学习中文官方文档:
http://sklearn123.com/

欢迎关注磐创博客资源汇总站:
http://docs.panchuang.net/

点赞
收藏
评论区
推荐文章
深度学习技术开发与应用
关键点1.强化学习的发展历程2.马尔可夫决策过程3.动态规划4.无模型预测学习5.无模型控制学习6.价值函数逼近7.策略梯度方法8.深度强化学习DQN算法系列9.深度策略梯度DDPG,PPO等第一天9:0012:0014:0017:00一、强化学习概述1.强化学习介绍2.强化学习与其它机器学习的不同3.强化学习发展历史4.强化学习典
不是海碗 不是海碗
2年前
ChatGPT 到底强大在哪里?(文末有彩蛋)
ChatGPT是由OpenAI开发的一个人工智能聊天机器人程序,于2022年11月推出。该程序使用基于GPT3.5架构的大型语言模型并通过强化学习进行训练。ChatGPT以文字方式交互,而除了可以通过人类自然对话方式进行交互,还可以用于相对复杂的语言工作,包括自动文本生成、自动问答、自动摘要等在内的多种任务。
深度强化学习
2022年数字信息化培训项目系列各企、事业单位:随着科技的快速发展,人工智能俨然成了当今社会的关注焦点。而在人工智能的发展上,深度学习、强化学习、迁移学习等成为了科学界、工业界研究和应用的热点。在实际研究和应用过程当中,研究人员逐渐发现了深度学习单独应用的缺点,如没有决策能力,不可推理等。而深度强化学习,作为一种崭新的机器学习方法,同时具有感知能力和决策能力
不是海碗 不是海碗
2年前
不要慌,我们谈一谈如何用好 ChatGPT
ChatGPT是由OpenAI开发的一个人工智能聊天机器人程序,于2022年11月推出。该程序使用基于GPT3.5架构的大型语言模型并通过强化学习进行训练。ChatGPT以文字方式交互,而除了可以通过人类自然对话方式进行交互,还可以用于相对复杂的语言工作,包括自动文本生成、自动问答、自动摘要等在内的多种任务。
Stella981 Stella981
3年前
Python之joblib:joblib库的简介、安装、使用方法之详细攻略
Python之joblib:joblib库的简介、安装、使用方法之详细攻略目录joblib库的简介joblib库的安装joblib库的使用方法1、输出值的透明快速磁盘缓存2、令人尴尬的并行助手:使它容易编写可读并行代码和调试它迅3、快速压缩持久化joblib库的简介    
Wesley13 Wesley13
3年前
AI小白必读:深度学习、迁移学习、强化学习别再傻傻分不清
摘要:诸多关于人工智能的流行词汇萦绕在我们耳边,比如深度学习(DeepLearning)、强化学习(ReinforcementLearning)、迁移学习(TransferLearning),不少人对这些高频词汇的含义及其背后的关系感到困惑,今天就为大家理清它们之间的关系和区别。一.深度学习:
Stella981 Stella981
3年前
Dask教程
Dask介绍Dask是一款用于分析计算的灵活并行计算库。Dask由两部分组成:针对计算优化的动态任务调度。这与Airflow,Luigi,Celery或Make类似,但针对交互式计算工作负载进行了优化。“大数据”集合,像并行数组,数据框和列表一样,它们将通用接口(如NumPy,Pandas或Python迭代器)扩展到大于内存或分
Stella981 Stella981
3年前
Mars Remote API 轻松分布式执行 Python 函数
Mars是一个并行和分布式Python框架,能轻松把单机大家耳熟能详的的numpy、pandas、scikitlearn等库,以及Python函数利用多核或者多机加速。这其中,并行和分布式Python函数主要利用MarsRemoteAPI。启动Mars分布式环境可以参考:1.命令行方式在集群中部署。2.Kube
Stella981 Stella981
3年前
Ray,面向新兴AI应用的分布式框架
!(https://oscimg.oschina.net/oscnet/5875203a3c4d4977bf2aeaa6192e053c.png)下一代AI应用需要不断和环境进行交互,并且在交互中学习。这些应用暴露了新的系统需求:性能和弹性。本文提出了Ray解决上述问题。Ray实现了动态执行引擎,可以表达任务并行和actor模型计算任务。
Wesley13 Wesley13
3年前
DRDS 柔性事务漫谈
_摘要:_ 在阿里巴巴,“柔性事务”已经是重构分布式事务的标准方法,覆盖了商品、交易、支付各个大规模应用场景,并且经受了双十一的考验。DRDS 是阿里云提供的一款分布式数据库产品,它的原型是在阿里内部使用了10年的数据库中间件TDDL。DRDS在TDDL提供的数据切分和SQL路由能力上,强化了分布式查询,事务和水平扩容能力。
高耸入云 高耸入云
1年前
LLM成功不可或缺的RLHF基于人类反馈的强化学习是如何运作的?OJAC近屿智能带你揭秘
基于人类反馈的强化学习(RLHF,ReinforcementLearningfromHumanFeedback)是人工智能(AI)领域的一个新兴研究领域,它将强化学习技术与人类反馈相结合,以训练能够学习复杂任务的个体。该方法在提高人工智能系统的性能方面显示
BitExplorerPro
BitExplorerPro
Lv1
海上生明月,天涯共此时。
文章
3
粉丝
0
获赞
0