🤖 roboto_origin_03 Wiki
首页 / RSL-RL / 快速开始与安装配置

本文档面向首次接触 RSL-RL 的开发者,目标是在本地环境中完成安装、理解项目骨架,并跑通一个最小化的训练闭环。阅读完成后,你将掌握从 pip install 到调用 runner.learn() 的完整路径,并清楚下一步该深入哪个模块。

Sources: pyproject.toml, README.md

环境准备与安装

RSL-RL 要求 Python 版本不低于 3.9,核心计算依赖 PyTorch 2.6 以上,同时使用 tensordict 作为结构化张量容器。下表列出了硬性系统要求与关键依赖版本。

依赖项 最低版本 说明
Python 3.9 语言运行时
PyTorch 2.6.0 深度学习框架与自动微分
torchvision 0.5.0 图像相关辅助(部分策略网络需要)
tensordict 0.7.0 环境观测与存储的结构化张量管理
numpy 1.16.4 数值计算基础
GitPython — 训练日志中记录代码仓库 Git 状态
onnx / onnxscript 0.5.4 模型导出与推理部署

Sources: pyproject.toml

安装方式

目前支持两种等价的安装路径:通过 PyPI 直接安装稳定版,或克隆源码后本地可编辑安装。后者适合需要修改框架源码、调试算法或提交贡献的场景。

方式 命令 适用场景
PyPI 安装 pip install rsl-rl-lib 快速使用、不修改源码
可编辑安装 git clone https://github.com/leggedrobotics/rsl_rl && cd rsl_rl && pip install -e . 二次开发、源码调试、贡献代码

执行完安装命令后,可在 Python 解释器中验证:import rsl_rl 无报错即表示安装成功。

Sources: README.md

项目结构概览

RSL-RL 的代码组织遵循“算法—网络—存储—运行器”四层分离原则。初学者无需一次性理解所有子包,但建立顶层地图有助于快速定位问题。

rsl_rl/
├── algorithms/          # 学习算法:PPO、AMP、Distillation
├── modules/             # 策略网络:ActorCritic 及其变体(CNN、RNN、Attention)
├── networks/            # 基础网络单元:MLP、CNN、Memory、Normalization
├── runners/             # 训练主循环:环境交互 + 策略更新
├── storage/             # 数据缓冲区:RolloutStorage、CircularBuffer
├── env/                 # 环境抽象接口
└── utils/               # 日志、监控、工具函数

下图展示了各模块在单次训练迭代中的协作关系。环境产生观测,Runner 调度算法收集经验,存储模块缓存轨迹,最后由算法模块执行梯度更新。

graph LR
    A[VecEnv<br/>向量化环境] -->|get_observations / step| B[Runner<br/>训练运行器]
    B -->|act / process_env_step| C[Algorithm<br/>PPO / AMP / Distillation]
    C -->|读写| D[Storage<br/>RolloutStorage]
    C -->|前向/反向| E[Modules<br/>ActorCritic]
    B -->|记录指标| F[Utils/Logger<br/>TensorBoard / W&B]

Sources: runners/init.py, algorithms/init.py, modules/init.py

最小训练示例

一条可运行的训练流水线只需要三步:准备向量化环境、读取配置构造 Runner、调用 learn() 进入主循环。下图展示了从配置到模型保存的完整动作序列。

flowchart TD
    Start([开始]) --> A[创建 VecEnv 实例]
    A --> B[加载 YAML 配置]
    B --> C[实例化 OnPolicyRunner]
    C --> D{分布式?}
    D -->|是| E[初始化 torch.distributed]
    D -->|否| F[构造 ActorCritic + PPO]
    E --> F
    F --> G[调用 runner.learn<br/>num_learning_iterations]
    G --> H{每 save_interval 迭代}
    H -->|是| I[保存 model_{it}.pt]
    H -->|否| J[继续训练]
    I --> J
    J -->|达到最大迭代| K[保存最终模型]
    K --> End([结束])

最小代码骨架如下。其中 MyVecEnv 是你需要自行实现的向量化环境类,必须继承 rsl_rl.env.VecEnv 并实现 get_observations() 与 step() 两个抽象方法。

import yaml
from rsl_rl.runners import OnPolicyRunner
from my_env import MyVecEnv  # 用户自定义环境

# 1. 加载配置
with open("config.yaml") as f:
    train_cfg = yaml.safe_load(f)["runner"]

# 2. 创建环境
env = MyVecEnv(cfg=env_cfg, num_envs=4096, device="cuda:0")

# 3. 构造运行器
runner = OnPolicyRunner(env, train_cfg, log_dir="./logs", device="cuda:0")

# 4. 开始训练
runner.learn(num_learning_iterations=1500, init_at_random_ep_len=True)

# 5. 保存与加载
runner.save("./model_1500.pt")
runner.load("./model_1500.pt")

Sources: runners/on_policy_runner.py, env/vec_env.py

环境接口契约

VecEnv 是框架与环境之间的唯一契约层。你的环境需要提供以下成员与行为:

成员/方法 类型 说明
num_envs int 并行环境数量
num_actions int 动作空间维度
max_episode_length int / Tensor 单 episode 最大步长
device str / torch.device 运行设备
get_observations() 方法 返回 TensorDict,可包含 policy、critic 等多个观测组
step(actions) 方法 返回 (obs, rewards, dones, extras),其中 extras 需支持 "time_outs" 和 "log" 键

Sources: env/vec_env.py

Runner 类型选择

RSL-RL 目前内置三种运行器,分别对应标准 on-policy 强化学习、对抗动作先验(AMP)以及策略蒸馏场景。初学者通常从 OnPolicyRunner 入手。

Runner 对应算法 适用场景 特殊说明
OnPolicyRunner PPO 算法实现与训练流程 标准机器人 Locomotion / Manipulation 支持 RND 探索奖励与对称性增强
AMPRunner AMP 对抗动作先验算法 模仿参考动作数据 需要额外提供 AMP 观测与参考缓冲区
DistillationRunner 策略蒸馏与师生框架 大教师策略蒸馏到轻量学生策略 必须先 load 教师模型权重才能调用 learn()

Sources: runners/init.py, runners/amp_runner.py, runners/distillation_runner.py

配置文件入门

框架采用 YAML 嵌套字典描述训练超参数,顶层通常分为 runner、policy、algorithm 三大块。下面列出对初学者最关键的配置键。

配置块 关键参数 作用
runner class_name 指定使用 OnPolicyRunner、AMPRunner 或 DistillationRunner
runner num_steps_per_env 每次策略更新前,每个环境采集的步数
runner max_iterations 总策略更新次数
runner logger 日志后端:tensorboard / wandb / neptune
policy class_name 策略网络类:ActorCritic、ActorCriticRecurrent、ActorCriticCNN 等
policy actor_hidden_dims / critic_hidden_dims Actor 与 Critic 的 MLP 隐层维度
policy actor_obs_normalization 是否对输入观测做在线归一化
algorithm class_name 学习算法:PPO、PPOAMP、Distillation
algorithm learning_rate 策略网络学习率
algorithm num_mini_batches 每次 PPO 更新拆分的小批量数量
algorithm desired_kl KL 散度目标值,用于自适应学习率调度

完整配置模板请参考仓库根目录下的 config/example_config.yaml。该文件同时展示了 RND 探索奖励与对称性增强的可选配置,初始权重设为 0.0 或 false 时即关闭对应功能,不会影响基础训练流程。

Sources: config/example_config.yaml

模型保存、加载与推理

OnPolicyRunner 封装了统一的状态字典接口。调用 save() 时,框架会自动保存策略网络权重、优化器状态以及当前迭代次数;如果启用了 RND,也会一并保存 RND 网络与优化器状态。加载时默认恢复优化器状态,便于断点续训;若仅做推理,可将 load_optimizer 设为 false。

# 训练过程中自动保存
# runner.save(os.path.join(log_dir, f"model_{it}.pt"))

# 手动加载并继续训练
runner.load("./logs/model_500.pt", load_optimizer=True)

# 获取推理策略(自动切换 eval 模式)
inference_fn = runner.get_inference_policy(device="cuda:0")
actions = inference_fn(obs)  # 无需梯度,确定性推理

Sources: runners/on_policy_runner.py

下一步阅读建议

完成安装并跑通最小示例后,建议按以下顺序深入:

  1. 若需自定义观测组、理解配置层级,继续阅读 配置文件与参数体系。
  2. 若正在集成 Isaac Lab / Isaac Gym / MuJoCo 等仿真环境,阅读 向量化环境接入指南。
  3. 若希望深入 PPO 的 loss 计算、GAE 估计与自适应 KL 调度,跳转至 PPO 算法实现与训练流程。
  4. 若需要了解循环网络、CNN 观测编码或注意力策略,参考 循环与注意力策略变体 与 CNN 观测编码与特征提取。