转载 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:
多机多卡:不支持
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 上进行更加极致的速度优化。