• Real Distributed APEX


    Google DeepMind 开源的强化学习库tf2rl(https://github.com/keiohta/tf2rl)涵盖了几乎所有主流算法。其中off-policy算法主要是使用APEX作为分布式训练的算法和框架支撑。

    但是APEX的框架仍然是单机版本的多explorer模式,无法扩展到跨机器的Real Distributed 模式,跨机器的目的是打破单一机器上的资源瓶颈,创造更多的Actor。

    强化学习收敛速度的瓶颈主要是Actor产生样本的速率,openai的env里,由于是模拟环境,单actor能达到每秒上百个样本。公司中的项目几乎不可能达到这种速率,所以增加Actor的数量是提高收敛速度的重要手段,那么我们就需要实现跨机器的分布式强化学习。

    APEX

    APEX的框架结构比较简单,可以套用任何off-policy的算法,涵盖离散动作空间算法DQN (including DDQN, Prior. DQN, Duel. DQN, Distrib. DQN, Noisy DQN),也包括处理连续动作空间的策略梯度算法,例如DDPG(including TD3, BiResDDPG),SAC。

    框架图:

    代码框架图:

    从代码框架中可以看出:

    1.multiprocessing.Process启动所有角色的节点

    2.样本通过multiprocessing的跨进程对象global_rb来修改,因此使用跨进程锁Lock

    3.参数同步使用multiprocessing里的Queue通信,每个Actor分配一个独占的Queue

    APEX_Distributed

    了解了APEX的代码结构后,如何修改就变的简单了,我们只要用分布式系统的常用方法替换掉进程间通信的方式即可。可以使用的中间件,例如消息队列、数据库都可以。

    360质量工程部采用的是redis的pubsub订阅消息队列以及数据结构,消息订阅松散式的结构可能会丢失数据(例如订阅早启动问题),但是对于长时间的运行影响很小。

    其他分布式训练框架

    阿里开源的EasyRL也是一个选择,但是考虑到更新和维护的及时程度,所以没有使用,其主要改进点是实现了基于tensorflow distributed的多Learner学习节点。

    并且其中列出了与很多其他开源框架的对比,有兴趣可以参考https://github.com/alibaba/EasyRL

    EasyRL的结构图:

    2.多Learner的学习节点,提高并行学习的速度。

    Real Distributed APEX也可以使用tensorflow的ParameterServerStrategy的模式,实现多Learner的并发学习。

    结果预期

    本文并没有列出具体的代码,后续可能会公开代码方案(其实并不复杂)

    改进框架只是第一步,后续我们会继续探索使用强化学习实现类人的智能测试,期望有兴趣的同学一起加入进来!

  • 相关阅读:
    httpclient
    【eslint 插件开发】禁用 location 跳转外部链接
    springboot调用第三方接口json转换成对象
    深刻解析数据库技术的要点以及应对策略 (软件设计师笔记)
    LeetCode 754. 到达终点数字
    PHPhotoLibrary 获取相册权限注意事项
    C/C++、Qt开发,跨平台CMake判断当前平台是Linux还是Windows,操作系统判断
    高可用Kuberbetes部署Prometheus + Grafana
    Redis的RDB持久化
    【计算机网络实验】TCP和UDP传输过程仿真与分析
  • 原文地址:https://blog.csdn.net/Hogwartstester/article/details/127047721