Project Icon

warp-drive

GPU驱动的高效多智能体强化学习框架

WarpDrive是一款开源的强化学习框架,专为GPU环境优化。它支持单GPU或多GPU上的端到端多智能体强化学习,通过充分利用GPU并行计算能力,显著提升训练速度。WarpDrive通过减少CPU和GPU间的数据传输,并在多智能体和多环境副本间并行运行模拟,大幅提高了计算效率。这使得同时运行海量并发模拟成为可能,实现了比传统CPU方案高出百倍的训练吞吐量。

WarpDrive:在GPU上实现极快的端到端单代理或多代理深度强化学习

WarpDrive是一个灵活、轻量级且易于使用的开源强化学习(RL)框架,可在单个或多个GPU(图形处理单元)上实现端到端多代理RL。

利用GPU的极致并行能力,WarpDrive 能够实现比CPU模拟+GPU模型实现快几个数量级的RL。它非常高效,因为它避免了CPU和GPU之间的来回数据复制,并能跨多个代理和多个环境副本并行运行模拟。这些共同使用户能够运行数千甚至数百万个并发模拟,并在极大规模的经验批次上进行训练,实现比基于CPU的对应方案至少100倍的吞吐量。

下表直观展示了Warpdrive的主要特性和在各个维度上的可扩展性。

支持并发性版本
环境单个 ✅ 多个 ✅每GPU 1至1000个1.0+
代理单个 ✅ 多个 ✅每环境1至1024个1.0+
代理跨块多个 ✅每块1024个1.6+
离散动作单个 ✅ 多个 ✅-1.0+
连续动作单个 ✅ 多个 ✅-2.7+
在线策略梯度A2C ✅ PPO ✅-1.0+
离线策略梯度DDPG ✅-2.7+
自动缩放-1.3+
分布式模拟1 GPU ✅ 2-16 GPU节点 ✅-1.4+
环境后端CUDA C ✅-1.0+
环境后端CUDA C ✅ Numba ✅-2.0+
训练后端Pytorch ✅-1.0+

环境

  1. "捉迷藏"游戏:在"捉迷藏"游戏中,追捕者试图追赶并标记逃跑者。这些游戏相当复杂,适合用于基准测试和测试,涉及线程同步、共享内存、数千个交互代理的高维索引等。下面我们展示了使用WarpDrive为不同追捕者:逃跑者速度比训练的多代理RL策略。这些环境可以在单个GPU上以每秒数百万步的速度运行,并在仅仅几个小时内完成训练

  1. 基于WarpDrive开发了复杂的两级多代理环境,如新冠疫情环境和气候变化环境,您可以在真实世界问题和合作中查看示例。

  1. 经典控制:我们包含了[gym.classic_control](https://github.com/salesforce/warp-drive/blob/master/ https://github.com/openai/gym/tree/master/gym/envs/classic_control)中的环境。在WarpDrive中,单代理是多代理环境的特殊情况。由于每个环境只有一个代理,可扩展性更高。
Screenshot 2023-12-19 at 10 02 51 PM

  1. 催化反应路径:我们包含了将量子密度泛函理论转换为强化学习表示的环境,使得能够从嘈杂的化学系统中自动搜索最优化学反应路径。您可以在真实世界问题和合作中查看示例。
Screenshot 2023-09-19 at 10 23 56 AM

吞吐量、可扩展性和收敛性

多代理

下面,我们比较了在N1 16-CPU节点和单个A100 GPU(使用WarpDrive)上的训练速度,环境为100名逃跑者和5名追捕者的捉迷藏游戏。在相同的环境配置和训练参数下,使用GPU上的WarpDrive比CPU快约10倍。两种情况都并行运行60个环境副本。在CPU节点上使用更多环境是不可行的,因为数据复制会变得过于昂贵。使用WarpDrive,可以将环境副本数量至少增加10倍,实现更快的训练。

单代理

下面,我们比较了在单个A100 GPU(使用WarpDrive)上的训练速度,分别针对(上)Cartpole-v1和(下)Acrobot-v1,并行运行10、100、1K和10K个环境副本,训练3000个周期(超参数相同)。您可以看到通过WarpDrive扩展的大量环境实现了惊人的收敛性和速度。

代码结构

WarpDrive提供了CUDA(或Numba)+ Python框架和便利工具,使您能够快速构建快速、灵活且大规模分布式的多代理RL系统。下图从底层到顶层说明了WarpDrive的设计和组件概览。用户只需在CUDA环境层编写CUDA或Numba步进函数,而其余部分是纯Python接口。我们提供了循序渐进的教程,帮助您掌握工作流程。

Python接口

WarpDrive提供了工具,只需几行代码就能快速构建和训练多代理RL系统。 以下是一个简短示例,用于训练追捕者和逃跑者代理:

# 通过EnvWrapper创建一个包装的环境对象
# 确保env_backend设置为'pycuda'或'numba'(以便在GPU上运行)
env_wrapper = EnvWrapper(
    TagContinuous(**run_config["env"]),
    num_envs=run_config["trainer"]["num_envs"], 
    env_backend="pycuda"
)
# 代理可以共享策略模型:此字典将策略模型名称映射到代理ID。
policy_tag_to_agent_id_map = {
    "tagger": list(env_wrapper.env.taggers),
    "runner": list(env_wrapper.env.runners),
}

# 创建训练器对象
trainer = Trainer(
    env_wrapper=env_wrapper,
    config=run_config,
    policy_tag_to_agent_id_map=policy_tag_to_agent_id_map,
)

# 开始训练!
trainer.train()

论文和引用 WarpDrive

我们的论文发表在《机器学习研究杂志》(JMLR) https://jmlr.org/papers/v23/22-0185.html。您也可以在我们的白皮书中找到更多详细信息:https://arxiv.org/abs/2108.13976

如果您在研究或应用中使用 WarpDrive,请使用以下 BibTeX 进行引用:

@article{JMLR:v23:22-0185,
  author  = {Tian Lan and Sunil Srinivasa and Huan Wang and Stephan Zheng},
  title   = {WarpDrive: Fast End-to-End Deep Multi-Agent Reinforcement Learning on a GPU},
  journal = {Journal of Machine Learning Research},
  year    = {2022},
  volume  = {23},
  number  = {316},
  pages   = {1--6},
  url     = {http://jmlr.org/papers/v23/22-0185.html}
}

@misc{lan2021warpdrive,
  title={WarpDrive: Extremely Fast End-to-End Deep Multi-Agent Reinforcement Learning on a GPU}, 
  author={Tian Lan and Sunil Srinivasa and Huan Wang and Caiming Xiong and Silvio Savarese and Stephan Zheng},
  year={2021},
  eprint={2108.13976},
  archivePrefix={arXiv},
  primaryClass={cs.LG}
}

教程和快速入门

教程

通过在 Colab 或 NGC 容器上运行这些教程来熟悉 WarpDrive!

您也可以在本地运行这些教程,但您需要安装了 nvcc 编译器的 GPU 机器 和兼容的 Nvidia GPU 驱动程序。您还需要安装 Jupyter。 有关安装说明,请参阅 https://jupyter.readthedocs.io/en/latest/install.html

示例训练脚本

我们提供了一些示例脚本,供您快速开始端到端训练。 例如,如果您想使用 2 个 GPU 和 CUDA C 后端训练 tag_continuous 环境(10 个标记器和 100 个跑步者)

python example_training_script_pycuda.py -e tag_continuous -n 2

或者切换到 JIT 编译的 Numba 后端,使用 1 个 GPU

python example_training_script_numba.py -e tag_continuous

您可以在这里找到完整的参考文档。

实际问题和合作

安装说明

要开始使用,您需要安装 Python 3.7+nvcc 编译器, 并有兼容的 Nvidia GPU CUDA 驱动程序。

可以按照 Nvidia 的说明在此处安装 CUDA(包括 nvcc):https://developer.nvidia.com/cuda-downloads

Docker 镜像

V100 GPU:您可以参考 示例 Dockerfile 来配置您的系统。 A100 GPU:我们的最新镜像由NVIDIA NGC发布和维护。我们建议您从NGC目录下载最新镜像。

如果您想构建自定义环境,我们建议您访问Nvidia Docker Hub下载与您系统兼容的CUDA和cuDNN镜像。 您应该能够使用命令行工具来监控系统中的NVIDIA GPU设备:

nvidia-smi

并看到类似这样的输出

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.51.06    Driver Version: 450.51.06    CUDA Version: 11.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Tesla V100-SXM2...  Off  | 00000000:00:04.0 Off |                    0 |
| N/A   37C    P0    32W / 300W |      0MiB / 16160MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

在这个快照中,您可以看到我们正在使用Tesla V100 GPU和CUDA版本11.0。

使用Pip安装

您可以使用Python包管理器安装WarpDrive:

pip install rl_warp_drive

从源代码安装

  1. 将此仓库克隆到您的机器上:

    git clone https://www.github.com/salesforce/warp-drive
    
  2. 可选,但建议首次尝试时使用: 创建一个新的conda环境(下面命名为"warp_drive")并激活它:

    conda create --name warp_drive python=3.7 --yes
    conda activate warp_drive
    
  3. 作为可编辑的Python包安装:

    cd warp_drive
    pip install -e .
    

测试您的安装

您可以直接从Python命令调用来测试所有模块和端到端训练工作流。

python warp_drive/utils/unittests/run_unittests_pycuda.py
python warp_drive/utils/unittests/run_unittests_numba.py
python warp_drive/utils/unittests/run_trainer_tests.py

了解更多

欲了解更多信息,请查看我们的博客白皮书和代码文档

如果您对扩展此框架感兴趣,或有任何问题,请使用此邀请链接加入AI Economist Slack频道。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号