RLlib 集成
RLlib 集成带来了 Ray/RLlib 库和 Carla 之间的支持,允许轻松使用 Carla 环境进行训练和推理。Ray 是一个开源框架,为构建分布式应用程序提供了简单、通用的 API。Ray 与 RLlib(一个可扩展的强化学习库)和 Tune(一个可扩展的超参数调整库)打包在一起。
RLlib 集成允许用户创建和使用 Carla 作为 Ray 的环境,并将该环境用于训练和推理目的。该集成可以在本地使用,也可以通过 AWS 在云中使用。
在本指南中,我们将概述在本地和 AWS 上运行 RLlib 集成所需的要求、集成存储库的结构、如何使用该库的概述,以及如何使用 Carla 设置 Ray 实验的示例一个环境。
在你开始之前
- 从 GitHub 下载 RLlib 集成或直接克隆仓库:
git clone https://github.com/carla-simulator/rllib-integration.git
- 要求会有所不同,具体取决于您是在本地运行还是在 AWS 上运行:
本地运行的要求
- 安装 Carla 的软件包版本 并导入 附加资源 。推荐的版本是 Carla 0.9.11 ,因为集成是使用此版本设计和测试的。其他版本可能兼容,但尚未经过充分测试,因此请自行决定使用这些版本。
- 导航到 RLlib 集成存储库的根文件夹并安装 Python 要求:
pip3 install -r requirements.txt
- 通过运行以下命令设置环境变量以查找 Carla 包或添加
CARLA_ROOT=path/to/carla
到您的.bashrc
文件中:
export CARLA_ROOT=path/to/carla
在 AWS 云上运行的要求
- 在 RLlib 集成存储库中找到的安装脚本中会自动满足在 AWS 上运行的要求。在“在 AWS 上运行” 部分中查找更多详细信息。
RLlib 存储库结构
存储库分为三个目录:
rllib_integration
包含与 Carla 相关的所有基础设施以及如何设置 Carla 服务器、客户端和参与者。这提供了所有训练和测试实验必须遵循的基本结构。aws
具有在 AWS 实例中运行所需的文件。aws_helper.py
提供了多种可简化 EC2 实例管理的功能,包括实例创建以及发送和接收数据。- 根目录中的
dqn_example
和dqn_*
文件提供了一个易于理解的示例,说明如何使用 Carla 作为环境来设置 Ray 实验。
创建您自己的实验
本节概述了如何创建您自己的实验。更具体的示例请参见下一节“DQN 示例” 。
您将需要创建至少四个文件:
- 实验类
- 环境配置
- 训练和推理脚本
1. 实验类
要使用 Carla 环境,您需要定义训练实验。Ray 要求环境返回一系列特定信息。您可以在 rllib-integration/rllib_integration/carla_env.py
中查看有关 Carla 环境的详细信息。
Ray 所需的信息取决于您的具体实验,因此所有实验都应继承自BaseExperiment
。此类包含您自己的实验需要覆盖的所有函数。这些都是与训练的行动、观察和奖励相关的功能。
2. 环境配置
实验应该通过.yaml
文件进行配置。通过配置文件传递的任何设置都将覆盖默认设置。下面解释了不同默认设置的位置。
配置文件有三个主要用途:
- 设置大部分 Carla 服务器和客户端设置,例如超时或地图质量。请参阅 此处 的默认值。
- 设置特定于您的实验的变量,以及指定城镇条件以及自我车辆及其传感器的生成。默认设置可在 此处 找到,并提供如何设置传感器的示例。
- 配置特定于 Ray 的训练 设置。这些设置与所使用的特定训练器相关。如果您使用的是内置模型,则可以在此处应用其设置。
3. 训练和推理脚本
最后一步是创建您自己的训练和推理脚本。这部分完全由您决定,并且依赖于 Ray API。如果您想创建自己的特定模型,请查看 Ray 的自定义模型文档 。
DQN 示例
本节以上一节为基础,展示如何使用 BirdView pseudosensor 伪传感器和 Ray 的 DQNTrainer 进行 RLlib 集成的具体示例。
DQN示例的结构如下:
- 实验类:
DQNExperiment
,覆盖BaseExperiment
类的方法。 - 配置文件:
dqn_example/dqn_config.yaml
- 训练文件:
dqn_train.py
- 推理文件:
- 有 Ray:
dqn_inference_ray.py
- 没有 Ray:
dqn_inference.py
- 有 Ray:
要在本地运行该示例:
-
安装 pytorch:
pip3 install -r dqn_example/dqn_requirements.txt
-
运行训练文件:
python3 dqn_train.py dqn_example/dqn_config.yaml --name dqn
在 AWS 上运行
本节介绍如何使用 RLlib 集成在 AWS EC2 实例上自动运行训练和推理。为了处理实例的缩放,我们使用Ray autoscaler API。
配置 AWS
您需要正确配置 boto3 环境。请点击 此处 了解更多信息。
创建训练 AMI
使用提供的 aws_helper.py
脚本通过运行以下命令自动创建训练所需的映像,并传入基础映像的名称和 install.sh
在以下位置 rllib-integration/aws/install
找到的安装脚本:
python3 aws_helper.py create-image --name <AMI-name> --installation-scripts <installation-scripts> --instance-type <instance-type> --volume-size <volume-size>
配置集群
创建图像后,将会输出带有图像信息的输出。要使用 Ray 自动缩放器,请使用输出中的信息更新 autoscaler configuration file 中的<ImageId>
和 <SecurityGroupIds>
设置。
运行训练
创建镜像后,您可以使用 Ray 的 API 在集群上运行训练:
-
初始化集群:
ray up <autoscaler_configuration_file>
-
(可选)如果集群初始化后本地代码被修改,请执行以下命令更新:
ray rsync-up <autoscaler_configuration_file> <path_to_local_folder> <path_to_remote_folder>
-
运行训练:
ray submit <autoscaler_configuration_file> <training_file>
-
(可选)监控集群状态:
ray attach <autoscaler_configuration_file> watch -n 1 ray status
-
关闭集群:
ray down <autoscaler_configuration_file>
在 AWS 上运行 DQN 示例
要在 AWS 上运行 DQN 示例:
-
通过将
dqn_example/dqn_autoscaler.yaml
配置传递给以下命令来创建映像:python3 aws_helper.py create-image --name <AMI-name> --installation-scripts install/install.sh --instance-type <instance-type> --volume-size <volume-size>
-
使用上一个命令
dqn_autoscaler.yaml
提供的信息更新<ImageId>
和<SecurityGroupIds>
设置。 -
初始化集群:
ray up dqn_example/dqn_autoscaler.yaml
-
(可选)使用本地更改更新远程文件:
ray rsync-up dqn_example/dqn_autoscaler.yaml dqn_example . ray rsync-up dqn_example/dqn_autoscaler.yaml rllib_integration .
-
运行训练:
ray submit dqn_example/dqn_autoscaler.yaml dqn_train.py -- dqn_example/dqn_config.yaml --auto
6.(可选)监控集群状态:
ray attach dqn_example/dqn_autoscaler.yaml
watch -n 1 ray status
- 关闭集群:
ray down dqn_example/dqn_autoscaler.yaml
本指南概述了如何在 AWS 和本地计算机上安装和运行 RLlib 集成。如果您对本指南有任何疑问或遇到任何问题,请随时在 论坛 中发帖或在 GitHub 上提出问题。