强化学习中仿真环境下大规模并行采样的可行性分析——以仿真环境为例

强化学习中仿真环境下大规模并行采样的可行性分析——以视频游戏为例

仿真环境下大规模并行采样,顾名思义,就是同时并行化运行多个仿真环境并从其进行数据采样、交互等操作,仿真环境的运行基本可以分为CPU上运行和GPU上运行两种,在CPU上运行仿真运行的比较熟悉的有atari游戏的atari_py模块+gym库,使用gym+retro_gym+steam同样可以在cpu上运行,而在GPU上运行仿真环境的暂时我所接触到的有 warp-drive 和 Isaac 两个,其中warp-drive是国外某实验室开发的,其功能比较简单,暂时可以运行的仿真环境只有tag游戏(无画面的游戏),而isaac游戏则是有大型硬件厂商nvidia公司开发的。

下面给出warp-drive 和 isaac这两个仿真环境的相关资料:

https://gitee.com/devilmaycry812839668/warp-drive

NVIDIA公司推出的GPU运行环境下的机器人仿真环境(NVIDIA Isaac Gym)—— 到底实现了什么功能,意义价值又是什么???

===================================

仿真环境,或者说游戏仿真大概的组成为逻辑处理部分和图像渲染显示两部分。 像atari这种CPU上运行的游戏,其逻辑处理部分和图像渲染显示部分都是在CPU上进行的。而我们平时生活中玩的dota之内的游戏基本上都是在CPU上进行逻辑处理,在GPU上进行图像渲染。可以说除了上面我给出的两个完全在GPU上运行的游戏仿真环境,其他的游戏要么就是逻辑处理和图像渲染全部在CPU端进行,要么就像dota这类游戏在CPU端进行逻辑处理,在GPU上进行图像渲染,而上面给出的两个仿真环境:warp-drive 和 isaac 则是将逻辑处理部分也搬到了gpu端。

由于CPU的核心数较少,一般家用CPU的核心也就10个以内,而大型商用CPU的核心数一般也在100以内,如果一个游戏仿真环境在运行的时候需要CPU进行处理那么我们是难以进行大规模仿真环境并行的,而现在使用CPU运行大规模仿真环境的都是使用服务器集群的方式,如使用MPI等构建一个大型的CPU服务器集群。游戏仿真环境运行的时候需要CPU进行处理这一部分包括CPU进行逻辑处理也包括CPU进行图像渲染,这两个部分有一个在CPU上运行都是难以进行大规模仿真环境并行的,而使用MPI构建大规模CPU服务器集群这一操作又需要大量资金做积累,而这又是普通用户难以做到的,为了解决该问题也就有了将仿真环境逻辑处理部分和图像渲染部分全部搬到GPU上运行的尝试,比较成功的也就是上面介绍的这两个仿真环境。

GPU具有几千甚至几万的处理核心,也叫流核心,因此一块GPU也可以同时进行几千甚至几万的并行操作,这也是为什么将仿真环境逻辑处理部分和图像渲染部分全部搬到GPU上后可以轻松实现大规模仿真环境的并行化,但是使用GPU运行仿真环境也存在一定的问题,那就是GPU虽然有上万的处理核心但是逻辑控制核心较少,也就是说GPU可以对数值计算类的任务进行较好的并行化但是对于一些需要复杂逻辑控制的操作却性能较低,可以看到上面给出的两个GPU上运行的仿真环境其逻辑控制部分都比较简单,不需要复杂的逻辑控制,因此可以在GPU上完全运行这两个仿真环境,但是想Atari这样的游戏往往需要较为复杂的逻辑控制,因此是很难将其完全搬到GPU上运行的。

复杂逻辑控制的仿真环境是难以在GPU上运行的,即使将其逻辑控制部分放在CPU上图像渲染在gpu上也是难以进行大规模运行的,单机条件下gpu上大规模仿真环境并行化的前提就是仿真环境需要完全运行在GPU端。如果非要将一些复杂逻辑控制的仿真游戏搬到GPU上我们就需要考虑能否将复杂逻辑控制重新编程为数值计算操作,从而实现GPU上完全运行仿真环境的可能。

上面的仿真环境中warp-drive的代码规模较小,可以作为在GPU上编写仿真环境的入门学习所用。在warp-drive的基础上我们也可以自行编写一些简单的仿真游戏:

如棋牌类游戏(围棋,象棋等),贪吃蛇,走迷宫,搬箱子,五子棋,扫雷,坦克大战,2048,华容道等简单游戏。

其中最为重点的是GPU仿真环境NVIDIA Isaac Gym是可以支持较多的机器人控制环境的,之所以NVIDIA Isaac Gym可以支持多个游戏的逻辑控制是因为NVIDIA公司本身就有最为成熟的GPU端物理逻辑控制核心软件(可以在gpu上运行的物理引擎 physx  等),也正是由于NVIDIA公司在其自身物理引擎基础上进行开发从而实现了isaac完全运行在gpu上。而如果没有成熟的可以在GPU上运行逻辑控制的代码,那么从头开发一个仿真环境的GPU端逻辑控制部分是有很大难度的。但是我们也需要知道NVIDIA公司的引擎组件只能处理某一类问题的逻辑控制,如钢体和流体的物理运动的逻辑控制处理,这也是为什么isaac仿真环境主要运行的仿真任务是机器人控制,而Atari主要的游戏我们难以对其给出统一的逻辑控制代码,因此我们如果要把Atari游戏搬到GPU上运行那么我们需要手动的为每个游戏编写cuda版本的逻辑控制代码。

现阶段比较好用的GPU端仿真环境还是属NVIDIA的ISAAC平台,而大规模仿真环境采样也是主要应用于基于策略的强化学习算法,因为基于策略的强化学习算法其动作空间主要为连续动作,动作空间为离散的环境一般使用异策略的强化学习算法如DQN等,虽然大规模仿真环境采样也能提高异策略算法的性能但是并不是那么必要,而动作空间连续的同策略算法需要对当前策略下的数据分布进行采样,因此大规模的仿真环境采样更加适用。

=========================================

本博客是博主个人学习时的一些记录,不保证是为原创,个别文章加入了转载的源地址还有个别文章是汇总网上多份资料所成,在这之中也必有疏漏未加标注者,如有侵权请与博主联系。
原文地址:https://www.cnblogs.com/devilmaycry812839668/p/15349344.html