🤖 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,可包含 policycritic 等多个观测组
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 嵌套字典描述训练超参数,顶层通常分为 runnerpolicyalgorithm 三大块。下面列出对初学者最关键的配置键。

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

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

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 观测编码与特征提取