【转载】 【WarpDrive】GPU加速RL: 一块V100运行上千个智能体、数千个环境,这个「曲率引擎」框架实现RL百倍提速
原文地址:
https://mp.weixin.qq.com/s/Vw39k2PteEIGLRhmh2raLQ
============================================
官网:http://www.neurondance.com/论坛:http://deeprl.neurondance.com/文章来源: 机器之心
排版:OpenDeepRL
在强化学习研究中,一个实验就要跑数天或数周,有没有更快的方法?近日,来自 SalesForce 的研究者提出了一种名为 WarpDrive(曲率引擎)的开源框架,它可以在一个 V100 GPU 上并行运行、训练数千个强化学习环境和上千个智能体。实验结果表明,与 CPU+GPU 的 RL 实现相比,WarpDrive 靠一个 GPU 实现的 RL 要快几个数量级。
深度强化学习是一种训练 AI 智能体的强大方法。然而,如何将强化学习应用于多个智能体或高维状态、观察结果、行动空间等复杂场景仍然是一个具有挑战性的问题。多智能体系统是强化学习研究和应用的前沿,尤其是那些存在多个智能体交互的系统。它们对于解决经济、自动驾驶、对话智能体、机器人学以及其他很多领域的工程和科学问题具有重要意义。
在这一问题中,训练智能体的时间是一大挑战。如果训练的智能体比较多,一个强化学习实验往往要花费数天或数周才能完成。主要原因在于:在在线训练中,强化学习需要反复运行模拟、训练智能体模型。此外,学习所需的重复次数会随着问题的复杂度呈指数级增长。这在无模型设置中是最突出的,在这种设置中,强化学习智能体在训练时通常对当前的模拟或任务没有任何初始知识。由于深度强化学习实现通常将基于 CPU 的模拟和 GPU 神经网络模型结合在一起,现实世界中的训练时间可能会非常长。
为了提高强化学习系统的吞吐量,来自 Salesforce 的研究者提出了一种名为 WarpDrive 的开源框架,来构建极其快速的(多智能体)深度强化学习(MADRL)pipeline。
-
论文链接:https://arxiv.org/pdf/2108.13976.pdf
-
项目地址:https://github.com/salesforce/warp-drive
WarpDrive 在一个 GPU 上端到端地运行整个 MADRL 工作流,使用单个数据存储进行模拟 roll-out、推理和训练。这将最小化通信和复制的成本,显著提升模拟采样和学习速率。WarpDrive 还利用 GPU 的并行能力,并行地运行模拟和每次模拟中的智能体。综合来看,这些设计选择使得运行数千个并发模拟成为可能,每个模拟包含数千个智能体,在非常大的批次上进行训练。
论文中的基准测试表明,与混合 CPU 模拟和 GPU 模型的一般实现相比,WarpDrive 实现的 RL 要快几个数量级。比如,在有 2000 个模拟、1000 个智能体的 Tag 模拟中,WarpDrive 的吞吐量实现了至少 100 倍的性能提升。
此外,研究者还将 WarpDrive 构建得非常灵活、易用、易扩展,并在现有库的基础上进行构建和补充,如 PyCUDA 和 PyTorch。在这个初始版本中,WarpDrive 使用在 CUDA C 中实现的 step 和 reset 方法的模拟,使用 OpenAI gym-API 风格。这使得用户在实现模拟的时候能够使用 CUDA 编程的全部特征集。WarpDrive 在 PyCUDA 的基础上构建,可以方便地访问用 CUDA C 编写的 GPU 数据和模拟方法。它还提供了一个轻量级的 Python 包装器来自动构建 gym 风格的环境对象,实现模拟 API。因此,WarpDrive 可以让用户轻松地创建和扩展自定义 RL pipeline,以最大化 GPU 的用途。
作者表示,WarpDrive 这一名字的灵感来自科幻小说中的超光速宇宙飞船推进系统——曲率引擎,后者可以通过对时空本身的改造来驱动飞船。
在这篇论文中,研究者概述了 WarpDrive 的设计,并展示了它在基准模拟中的吞吐量和可扩展性。最后,他们总结了未来的发展方向。
用 WarpDrive 加速强化学习
WarpDrive 提供了一个框架和一些高质量的工具,帮助用户快速构建快捷而灵活的多智能体强化学习系统。图 3 显示了 WarpDrive 的一个基本用例。
接下来,研究者自下而上地介绍了 WarpDrive 的设计和组件,以及它们在加速强化学习方面的作用。
CUDA 计算
WarpDrive 专注于 CUDA(Compute Unified Device Architecture),这是一个流行的平台和编程模型,允许用户在(CUDAenabled)GPU 硬件上运行程序。CUDA 程序也被称为计算 kernel。CUDA API 可以直接访问 GPU 的虚拟指令集和并行计算元素。
GPU 的一个关键特性是它们可以并行运行许多计算线程。线程组成线程块,多个线程块组成一个网格结构。一个 CUDA kernel 可以访问并定义这些线程的并行计算,见下图 2。
DataManager 和 FunctionManager
图 2 显示了 WarpDrive 框架的一些细节。所有在 GPU 上运行的 CUDA 程序都需要通过 CPU 触发。按照 CUDA 的规则,CPU 被称为主机(host),GPU 被称为设备。任何 CUDA 程序的执行都包括三个主要步骤:
-
主机到设备的传输(push):将输入数据从主机内存复制到设备内存,例如在训练开始时。
-
加载 CUDA 函数,在 GPU 上执行并缓存数据以提高性能。
-
设备到主机的传输(pull):将数据从设备内存复制回主机,例如训练结束的时候。
按照这个模式,WarpDrive 实现了两个重要的 Python 类(驻留在 CPU 上)——DataManager 和 FunctionManager,以方便主机和设备之间所有与 RL 相关的通信和交互。DataManager 提供了一个简易 API 来处理与 RL 相关的主机和设备之间的所有数据传输(pull 和 push)。FunctionManager 允许用户从 CPU 调用 CUDA kernel,并在 GPU 上执行它们。
WarpDrive RL 工作流
使用 WarpDrive,在 GPU 上收集 rollout 和训练模型的一个典型 RL 工作流如下所示:
1. 初始化并重置环境对象后,将主机上的所有数据复制到设备上。DataManager 提供 API 方法来执行此 push 操作。从主机复制到设备的数据可能包括环境配置参数、在第一次重置结束时创建的数据数组,以及观察、动作、奖励和「完成」标志的占位符。DataManager 还帮助维护变量的副本,这些变量需要在每次重置时重新初始化。在这点之后,就不再从主机向设备推送数据了。
2. FunctionManager 提供 API 方法来初始化和调用 CUDA C kernel 函数,这些函数用于从主机节点执行环境步骤。这些函数只在设备上执行,所有的数据数组都被就地修改。出于可视化或分析的目的,主机可能会不时地拉取(pulled)数据,但所有数据本质上只能在训练期间驻留在 GPU 上。
3.WarpDrive 还包含一个 Sampler 类,用于对动作进行采样,以便逐步遍历环境。使用策略模型计算出的概率对动作进行抽样。WarpDrive 的采样器在每个智能体线程上并行运行,运行速度比等效的 PyTorch 实现快 2 倍。详见实验部分。
4. 在 GPU 中,研究者并行执行多个环境副本。每个环境运行在一个单独的线程块上。由于一个典型的 GPU 有数千个块,在一个 GPU 上并行执行数千个环境也是可行的。
5. 任何环境都可能达到终端状态并被「完成」。WarpDrive 提供了一个 EnvironmentReset 类,用于自动识别和重置那些已完成的环境。此时,那些环境也被重置并给出(新的)初始数据。例如,它们可能使用在初始重置时复制的初始数据数组。
6. 在每个环境中,每个智能体还可以在智能体独占(agent-exclusive)的线程上执行它自己的逻辑。图 2 显示了一个示例,其中智能体 i、j 和 k 分别在单个线程 i、j 和 k 上并行操作。这在多智能体 RL 中非常有用,因为可以完全将智能体操作并行化,因此模拟时间复杂度保持不变,即使智能体数量增加(达到可用线程的数量)。
7. 一旦从几个环境和智能体中收集到的数据被送到训练数据 batch 中,也可以用 WarpDrive 执行端到端训练。这次推出的 WarpDrive 包括一个示例训练脚本和 Trainer 类,它目前实现了 Advantage Actor Critic(A2C)、近端策略优化(PPO)RL 算法和一个全连接神经网络策略模型。Trainer 基于 PyTorch 构建,并从 CPU 主机调用所有 CUDA kernel 和 PyTorch 操作。然而,PyTorch 可以直接访问和解释以 torch 形式存储在设备上的 WarpDrive 数据 batch(状态、动作、奖励和完成标志)。这使得用户可以计算损失并修改模型参数,同时消除数据复制。考虑到 WarpDrive 的模块化特性,这一框架很容易扩展。
这些设计选择使得 WarpDrive 非常高效。
实验结果
研究者使用 Tag 游戏演示了 WarpDrive 的工作流,并对其性能进行了测试。他们比较了以下两种情况的性能:
-
使用 CPU-simulations + GPU-agent 的模型;
-
在单个 Nvidia V100 GPU 上运行 WarpDrive。
测试结果表明,与使用 CPU-simulation + GPU-agent 的模型相比,WarpDrive 的吞吐量要高几个数量级。
原文来源:
https://mp.weixin.qq.com/s/LjJ5b1gtt8-DFqihaTZ2hw?
完
总结3: 《强化学习导论》代码/习题答案大全
总结6: 万字总结 || 强化学习之路
完
第119篇: 29页中文材料详述模仿学习完整过程
第118篇:【总结】170道强化学习面试题目汇总
第117篇:【Mava】一个分布式MARL研究框架
第116篇:CORL: 基于变量序和RL的因果发现算法
第115篇:人工强化学习未来的发展方向
第114篇:使用新的物理模拟引擎加速强化学习
第113篇:如何降低深度强化学习研究的计算成本
第112篇:基于Novelty-Pursuit的高效探索方法
第111篇:Reward is enough奖励机制。
第110篇:163篇ICML2021强化学习领域论文汇总
第109篇:【Easy-RL】200页强化学习总结笔记
第108篇:清华大学李升波老师《强化学习与控制》
第107篇:阿里巴巴2022届强化学习实习生招聘
第106篇:奖励机制不合理:内卷,如何解决?
第105篇:FinRL: 一个量化金融自动交易RL库
第104篇:RPG: 通过奖励发现多智能体多样性策略
第103篇:解决MAPPO(Multi-Agent PPO)技巧
第102篇:82篇AAAI2021强化学习论文接收列表
第101篇:OpenAI科学家提出全新强化学习算法
第100篇:Alchemy: 元强化学习(meta-RL)基准环境
第98篇:全面总结(值函数与优势函数)的估计方法
第97篇:MuZero算法过程详细解读
第96篇: 值分布强化学习(Distributional RL)总结
第95篇:如何提高"强化学习算法模型"的泛化能力?
第94篇:多智能体强化学习《星际争霸II》研究
第93篇:MuZero在Atari基准上取得了新SOTA效果
第91篇:详解用TD3算法通关BipedalWalker环境
第88篇:分层强化学习(HRL)全面总结
第85篇:279页总结"基于模型的强化学习方法"
第84篇:阿里强化学习领域研究助理/实习生招聘
第83篇:180篇NIPS2020顶会强化学习论文
第81篇:《综述》多智能体强化学习算法理论研究
第80篇:强化学习《奖励函数设计》详细解读
第79篇: 诺亚方舟开源高性能强化学习库“刑天”
第77篇:深度强化学习工程师/研究员面试指南
第75篇:Distributional Soft Actor-Critic算法
第74篇:【中文公益公开课】RLChina2020
第73篇:Tensorflow2.0实现29种深度强化学习算法
第72篇:【万字长文】解决强化学习"稀疏奖励"
第71篇:【公开课】高级强化学习专题
第70篇:DeepMind发布"离线强化学习基准“
第66篇:分布式强化学习框架Acme,并行性加强
第65篇:DQN系列(3): 优先级经验回放(PER)
第64篇:UC Berkeley开源RAD来改进强化学习算法
第61篇:David Sliver 亲自讲解AlphaGo、Zero
第59篇:Agent57在所有经典Atari 游戏中吊打人类
第58篇:清华开源「天授」强化学习平台
第57篇:Google发布"强化学习"框架"SEED RL"
第53篇:TRPO/PPO提出者John Schulman谈科研
第52篇:《强化学习》可复现性和稳健性,如何解决?
第51篇:强化学习和最优控制的《十个关键点》
第50篇:微软全球深度强化学习开源项目开放申请
第49篇:DeepMind发布强化学习库 RLax
第48篇:AlphaStar过程详解笔记
第47篇:Exploration-Exploitation难题解决方法
第45篇:DQN系列(1): Double Q-learning
第44篇:科研界最全工具汇总
第42篇:深度强化学习入门到精通资料综述
第41篇:顶会征稿 || ICAPS2020: DeepRL
第40篇:实习生招聘 || 华为诺亚方舟实验室
第39篇:滴滴实习生|| 深度强化学习方向
第37篇:Call For Papers# IJCNN2020-DeepRL
第36篇:复现"深度强化学习"论文的经验之谈
第35篇:α-Rank算法之DeepMind及Huawei改进
第34篇:从Paper到Coding, DRL挑战34类游戏
第31篇:强化学习,路在何方?
第30篇:强化学习的三种范例
第29篇:框架ES-MAML:进化策略的元学习方法
第28篇:138页“策略优化”PPT--Pieter Abbeel
第27篇:迁移学习在强化学习中的应用及最新进展
第26篇:深入理解Hindsight Experience Replay
第25篇:10项【深度强化学习】赛事汇总
第24篇:DRL实验中到底需要多少个随机种子?
第23篇:142页"ICML会议"强化学习笔记
第22篇:通过深度强化学习实现通用量子控制
第21篇:《深度强化学习》面试题汇总
第20篇:《深度强化学习》招聘汇总(13家企业)
第19篇:解决反馈稀疏问题之HER原理与代码实现
第17篇:AI Paper | 几个实用工具推荐
第16篇:AI领域:如何做优秀研究并写高水平论文?
第15篇:DeepMind开源三大新框架!第14篇:61篇NIPS2019DeepRL论文及部分解读第13篇:OpenSpiel(28种DRL环境+24种DRL算法)第12篇:模块化和快速原型设计Huskarl DRL框架第11篇:DRL在Unity自行车环境中配置与实践第10篇:解读72篇DeepMind深度强化学习论文第9篇:《AutoML》:一份自动化调参的指导第8篇:ReinforceJS库(动态展示DP、TD、DQN)第7篇:10年NIPS顶会DRL论文(100多篇)汇总
第6篇:ICML2019-深度强化学习文章汇总第5篇:深度强化学习在阿里巴巴的技术演进第4篇:深度强化学习十大原则第3篇:“超参数”自动化设置方法---DeepHyper第2篇:深度强化学习的加速方法第1篇:深入浅出解读"多巴胺(Dopamine)论文"、环境配置和实例分析
posted on 2021-09-23 21:22 Angry_Panda 阅读(485) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异