[转载] 强化学习开源框架整理

2023-05-16

转载 https://zhuanlan.zhihu.com/p/582396276

本篇主要是介绍了不同的 RL 开源工作,包括环境开源工作和算法开源工作,同时关注这些开源工作对于多机多卡并行分布式训练的支持。

算法框架

baselines - openai

github: https://github.com/openai/baselines

多机多卡:不支持

OpenAI Baselines是OpenAI的一组高质量RL算法实现,OpenAI是AI尤其是RL研究和开发的领先公司之一。 它的构想是使研究人员可以轻松地比较其RL算法,并以OpenAI的最新技术(即名称)为基准。 该框架包含许多流行代理的实现,例如A2C,DDPG,DQN,PPO2和TRPO。

该框架的缺点是太工程化,套娃严重,想读懂需要话很长时间,修改的话也比较费事。

多GPU训练是不支持,具体原因见链接: https://github.com/openai/baselines/issues/220

stable-baselines3

github:

  • https://github.com/DLR-RM/stable-baselines3
  • https://github.com/hill-a/stable-baselines

多机多卡:不支持

Stable Baselines是一组基于OpenAI Baselines的改进版强化学习(RL: Reinforcement Learning)实现。因为 baselines 不够稳定,于是有了 stable-baselines,接着有了 v2,再有了 PyTorch 版的 v3,目前由 DLR-RM 维护。不仅文档清晰,还提供了很多常用环境和RL算法的调优超参数。

该工作不支持多GPU训练RL任务,他的核心观点是

  • 目前RL的网络都很简单,没必要进行并行训练,并行训练过程中的通信开销反而影响了训练速度。
  • 目前大部分RL任务都是在CPU上进行仿真,大部分时间都花在CPU的推理交互上了,网络并行训练并不会带来很大的提升。

可以参考如下链接:

https://github.com/DLR-RM/stable-baselines3/issues/75
https://github.com/DLR-RM/stable-baselines3/issues/264

FinRL

github: https://github.com/AI4Finance-Foundation/FinRL

多机多卡:不支持

FinRL是一个开源框架,为从业人员提供一套统一框架进行流水线式的DRL交易策略开发,同时也可以帮助初学者快速上手。

多机多卡训练:这个代码不支持 GPU 训练,作者2021年说会很快支持 GPU 训练,但一直没有支持。

spinningup - openai

github:https://github.com/openai/spinningup

多机多卡:不支持

Spinning Up 是大名鼎鼎的Open AI推出的免费强化学习教学项目,旨在降低强化学习的门槛,让初学者能在项目实践的过程中一步一步循序渐进地学习。

优点是写的通俗易懂上手简单,并且效果有保障,而且同时tf和Pytorch的支持;缺点是没有value-based的算法,做DQN系列的就没办法了

Dopamine - google

github: https://github.com/google/dopamine

多机多卡:不支持

谷歌发布了 Dopamine,这是一款灵活的强化学习框架,该框架基于 TensorFlow,主打灵活性、稳定性、复现性,能够提供快速的基准测试。

实现了Distributional DQN的一系列算法,其他算法没有

rlpyt - BAIR

github:https://github.com/astooke/rlpyt

多机多卡:支持

专门基于pytorch实现的rl框架,说是有单机/多机分配资源的黑科技,使用 SyncRl 作为 runner 可以使用多卡进行采样,可以参考 https://github.com/astooke/rlpyt/issues/91

PARL - 百度

github:https://github.com/PaddlePaddle/PARL

多机多卡:支持

百度出品,基于PaddlePaddle的RL框架,其核心卖点一是使用了黑科技可以消除python多线程GIL锁的限制,使得可以高效利用多核CPU来环境并行。经过他们的测试PARL的吞吐效率是比Ray高一些。

缺点是使用这个框架需要使用 paddlepaddle,而不能使用pytorch这些熟悉的框架。

Acme

github: https://github.com/deepmind/acme

多机多卡:支持

Acme 是一个基于 Python 的强化学习研究框架,由谷歌的 DeepMind 于 2020 年开源。它旨在简化新型 RL 代理的开发并加速 RL 研究。根据 DeepMind 自己的声明,这个强化学习和人工智能研究的先锋团队每天都在使用 Acme。

但是缺点也是不能使用pytorch。使用多卡训练具体可以参考:https://github.com/deepmind/acme/issues/188

rl_games

github:https://github.com/Denys88/rl_games

多机多卡:支持

基于 pytorch 实现的一个 RL 算法框架,支持端到端的 GPU 加速的环境,比如 IsaacGym或者Brax。支持多智能体训练。

但是这个库的 example 几乎不能直接跑起来(除了Cartpole这种简单的环境),都需要修改才能跑起来。

该框架使用 ray 和 ddp 来完成分布式强化学习。

rainbow-is-all-you-need

github:https://github.com/Curt-Park/rainbow-is-all-you-need

多机多卡:不支持

这份Pytorch强化学习教程一共有八章,从DQN(Deep Q-Learning)开始,步步深入,最后展示Rainbow到底是什么。不仅有Jupyter Notebook,作者还在Colab上配置好了代码,很适合新手学习。

但是只有 Value based 的方法,没有 Policy Based 的方法。

CleanRL

github:https://github.com/vwxyzjn/cleanrl

多机多卡:目前看起来是支持的

ClearRL的作者是美国Drexel University的计算机博士生,他主要的研究方向是游戏中的人工智能。这也是强化学习应用最好的领域之一了。这个项目从2019年10月份开始,已经更新了两年半的时间了。CleanRL是一个深度强化学习库,它提供了高质量的单文件实现,具有研究用的功能。

RLLib - UC Berkeley

github:https://github.com/ray-project/ray/tree/master/rllib

多机多卡:支持

基于 Ray 的分布式强化学习框架,Ray 是一个面向大规模机器学习和增强学习应用的高性能分布式执行框架。业级的强化学习库,优势在于分布式计算和自动调参,支持 TensorFlow/PyTorch,很多大企业比如谷歌、亚马逊、蚂蚁金服都在用。该框架社区活跃、开源代码更新频繁。

但是这个库太通用了,上手比较困难,它使用的是自己的分布式集群定义,具体参考:https://stefanbschneider.github.io/blog/rllib-private-cluster

ElegantRL

github:https://github.com/AI4Finance-Foundation/ElegantRLR

多机多卡:不支持

ElegantRL 基于Actor-Critic 框架搭建深度强化学习算法,每一个Agent(即DRL 算法)由Actor 网络和Critic 网络组成。

官网说有如下的特点:

  • 可扩展:在多个级别充分利用DRL算法的并行性,使其轻松扩展到云平台上的数百或数千个计算节点
  • 弹性:允许在云上弹性地自动分配计算资源
  • 轻量级:核心代码<1000行
  • 高效:在许多测试情况下(单个GPU/Multi-GPU/GPU云),比Ray RLLib更有效。
  • 稳定:比 stable-baselines3 更稳定

但是我阅读了源码,也实际做了实验,其实目前(2022.11)对于多 GPU 完全不支持。

Deep Reinforcement Learning Algorithms with PyTorch

github:https://github.com/p-christ/Deep-Reinforcement-Learning-Algorithms-with-PyTorch

多机多卡:不支持

深度强化学习算法和环境的 PyTorch 实现,适合学习和研究。

Tianshou - 清华

github:https://github.com/thu-ml/tianshou

多机多卡:目前支持多卡,多机不支持

是纯 基于 PyTorch 代码的强化学习框架,代码里面写了多卡的支持,但是只是把网络使用 DataParallel 包了一下。

环境开源工作

Gym - openai

github: https://github.com/StanfordVL/Gym

OpenAI Gym **是一款用于研发和比较强化学习算法的工具包,提供了标准化的环境接口,是目前十分受欢迎的环境开源工作,包含如下经典环境:

  • 算法环境:包括一些字符串处理等传统计算机方法的实验环境
  • 简单文本环境:包括几个用文本表示的简单游戏
  • 经典控制环境:包括一些简单几何体运动,常用于经典强化学习算法的研究
  • Atari游戏环境:包括数十个Atari 2600游戏,具有像素化的图形界面
  • MuJoCo环境:利用收费的MuJoCo运动引擎进行连续性的控制任务
  • 机械控制环境:关于机械臂的抓取和控制等

基于 Gym 有一些拓展出来的第三方开源环境,具体可以参考:https://github.com/StanfordVL/Gym/blob/master/docs/environments.md

  • gym-anytrading: 用来做单只期货和股票交易的环境
  • GymGo:围棋环境
  • Pybullet:开源的 3D 仿真环境
  • brax:用于大规模刚体仿真的可微分物理引擎,与仅具有单个 TPU 或 GPU 的大型计算集群的性能相匹配

Gymnasium - openai

github: https://github.com/Farama-Foundation/Gymnasium

Gym 迁移过来的,Gym已经交给外部团队了,Gymnasium 从 2022 年 10 月开始由 OpenAI 维护。

目前(2022年11月)的功能和用法与 Gym 一致。

IsaacGym - nvidia

环境的 github:https://github.com/NVIDIA-Omniverse/IsaacGymEnvs

Isaac Gym由英伟达开发,提供了一个高性能的学习平台,使得各种智能体训练能够直接在GPU上进行。

与使用CPU模拟器和GPU神经网络的传统RL训练相比,Isaac Gym大幅度缩减了复杂机器任务在单个GPU上的训练时间,使其训练速度提高了1-2个数量级。

EnvPool - Sea AI Lab

github: https://github.com/sail-sg/envpool

EnvPool 是一个基于 C++ 、高效、通用的强化学习并行环境(vectorized environment)模拟器 ,不仅能够兼容已有的 gym/dm_env API,还支持了多智能体环境。来自 Sea AI Lab 团队

但是他的环境并行是在 CPU 上的并行。他的观点是“基于 GPU 的解决方案虽然可以达到千万 FPS,但并不是所有环境都能使用 CUDA 重写,不能很好兼容生态以及不能复用一些受商业保护的代码。”所以他在 CPU 上进行更加极致的速度优化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[转载] 强化学习开源框架整理 的相关文章

随机推荐

  • ubuntu18.04 安装Pangolin

    按照Github上面的教程走即可 xff0c 非常简单 https github com stevenlovegrove Pangolin 首先要安装一些必要的库 Glew xff1a sudo apt get install libgle
  • freertos 学习 资源整理

    1 freertos 官方网站 freertos 官方网站 https www freertos org index html 源码下载 xff1a https sourceforge net projects freertos 2 如何下
  • openwrt: ipq4019 路由 资料汇总

    参考网站 https openwrt org 代码 https github com openwrt openwrt releases tag v18 06 1 wget https github com openwrt openwrt a
  • IT行业ToB销售为什么这么难

    IT行业ToB销售为什么这么难 华东企业服务IT圈 4天前 背景 xff1a 笔者IT行业从业14年 xff0c 干过售后 售前 销售 创过业 xff0c 属于那种基本出去拜访客户不需要售前那种 xff0c 复杂的技术方案自己操刀才放心 x
  • 【Linux编程】守护进程(daemon)详解与创建

    本文主要参考自 xff1a linux系统编程之进程 xff08 八 xff09 xff1a 守护进程详解及创建 xff0c daemon 使用 一 概述 Daemon xff08 守护进程 xff09 是运行在后台的一种特殊进程 它独立于
  • Android studio svn使用方法

    步骤 一 设置忽略文件 可参考工程目录下的 gitignore文件 iml DS Store externalNativeBuild local properties idea libraries idea modules xml idea
  • linux lsusb命令的安装及简单使用

    在 Linux 中我们可以使用 lsusb 来列出 USB 设备和它的属性 xff0c lsusb 会显示驱动和内部连接到你系统的设备 直接在控制台输入 lsusb 即可 安装 如果无法运行 lsusb xff0c 使用以下命令安装 xff
  • 算法总结

    在2020年的时候 xff0c 我第一次接触了C 43 43 编程 xff0c 那时的我是一位四年级的小学生 xff0c 觉得挺好玩的 xff0c 爸爸就给我推荐了一门课程 程序设计与算法 xff08 一 xff09 C语言程序设计 xff
  • ubuntu16.04安装docker

    ubuntu16 04安装docker 开始安装 开始安装 由于apt官方库里的docker版本可能比较旧 xff0c 所以先卸载可能存在的旧版本 xff1a span class token function sudo span span
  • docker命令中的/bin/bash

    docker run i t tomcat bin bash 中的 bin bash的作用是因为docker后台必须运行一个进程 xff0c 否则容器就会退出 xff0c 在这里表示启动容器后启动bash
  • 如何将文件从本机上传到docker容器

    1 如何从docker容器中下载文件 xff1a docker span class token function cp span container created path span class token operator lt sp
  • libjpeg.so.8: cannot open shared object file: No such file or directory.

    在docker容器里执行carla的PythonAPI报错 xff1a libjpeg so 8 cannot span class token function open span shared object file No such s
  • Docker容器图形界面显示的配置方法

    参考博客 0 环境说明 Ubuntu 16 04 docker 19 03 12 因为要在docker中用pygame xff0c 要用到显示器 xff0c 这个时候需要解决这个Docker 可视化 的问题 原理简介 原理上可以把docke
  • 在docker中运行carla

    参考carla文档 ubuntu18 04 carla0 9 9 docker19 03 12 Docker Installation Docker CE For our tests we used the Docker CE versio
  • Pyglet设置窗口标题

    Pyglet教程 Caption The window s caption appears in its title bar and task bar icon on Windows and some Linux window manage
  • Linux 解决远程连接的 “Gtk-WARNING **: cannot open display;”

    转发 ssh Y username 64 ip 使用 Y 参数实际上是授权了 X11 转发 xff0c 这样就可以看到来自远端的 gtk 图形窗口了 span class token function man span span class
  • android jni调试 - 堆栈分析

    一 环境 xff1a windows rk3399 android 7 1 二 奔溃信息 pid 13544 tid 13639 name no localmeeting gt gt gt com sino localmeeting lt
  • CFileDialog的使用[转]

    由于项目需要 xff0c 查阅了一下CFileDialog类 xff0c 以满足程序自动读取配置文件的需求 xff0c 现在小小记录一下 xff01 CFileDialog类封装了Windows常用的文件对话框 xff0c 提供个一种简单的
  • 记录一下c/c++的几种计时方式

    include lt iostream gt include lt string gt include lt chrono gt void Run for int i 61 0 i lt 10000000 i 43 43 void time
  • [转载] 强化学习开源框架整理

    转载 https zhuanlan zhihu com p 582396276 本篇主要是介绍了不同的 RL 开源工作 xff0c 包括环境开源工作和算法开源工作 xff0c 同时关注这些开源工作对于多机多卡并行分布式训练的支持 算法框架