基于 IsaacLab 的强化学习训练#
本示例提供了在 IsaacLab 环境中使用 RLinf 框架的完整指南, 介绍如何通过强化学习对 gr00t n1.5 算法进行微调。内容覆盖从环境搭建、核心算法设计到训练配置、评估与可视化的全过程, 并提供可复现的命令与配置片段。
下文也包含了对 openpi π0.5 算法进行微调的相应流程。
本示例的主要目标是训练一个具备机器人操作能力的模型:
视觉理解:处理来自机器人相机的 RGB 图像。
语言理解:理解自然语言形式的任务描述。
动作生成:输出精确的机器人动作(位置、旋转、夹爪控制)。
强化学习:通过环境反馈,使用 PPO 优化策略。
环境#
IsaacLab 环境
IsaacLab 是一个高度可定制的仿真平台,允许用户创建自定义环境与任务。
本示例使用 RLinf 自定义环境 Isaac-Stack-Cube-Franka-IK-Rel-Visuomotor-Rewarded-v0 进行强化学习训练。
如需使用该自定义环境,请按照 依赖安装 章节完成环境配置;该环境已默认集成在 RLinf 源码对应的 IsaacLab 库中。
环境:IsaacLab 仿真平台
任务:控制 Franka 机械臂按蓝、红、绿顺序(自下而上)堆叠方块
观测:第三人称相机与机械臂腕部相机的 RGB 图像
动作空间:7 维连续动作
3D 位置控制(x, y, z)
3D 旋转控制(roll, pitch, yaw)
夹爪控制(开/合)
任务描述
Stack the red block on the blue block, then stack the green block on the red block.
数据结构
图像:来自主视角与腕部视角的 RGB 张量
[batch_size, H, W, 3]``(``H与W由环境配置中的相机分辨率决定,例如examples/embodiment/config/env/isaaclab_stack_cube.yaml中的256x256)任务描述:自然语言指令
状态:末端执行器的位置、姿态与夹爪状态
奖励:0-1 的稀疏成功/失败奖励
添加自定义任务
如需添加自定义任务,通常需要以下三步:
自定义 IsaacLab 环境:可参考 IsaacLab-Examples 中的可用环境;自定义环境项目可参考 IsaacLab-Quickstart。
在 RLinf 中配置训练环境:参考
rlinf/envs/isaaclab/tasks/stack_cube.py,将自定义脚本放到rlinf/envs/isaaclab/tasks,并在rlinf/envs/isaaclab/__init__.py中添加相关代码。配置任务 ID:参考
examples/embodiment/config/env/isaaclab_stack_cube.yaml,修改init_params.id为自定义 IsaacLab 任务 ID,并确保examples/embodiment/config/isaaclab_franka_stack_cube_ppo_gr00t.yaml文件开头的defaults引用了正确的环境配置。
算法#
核心算法组件
PPO(Proximal Policy Optimization,默认)
使用 GAE(Generalized Advantage Estimation)进行优势估计
策略裁剪(ratio limits)
价值函数裁剪
熵正则化
GRPO(Group Relative Policy Optimization,未测试)
对每个状态/提示,策略生成 G 个独立动作
通过减去组内平均奖励来计算每个动作的优势
Gr00t n1.5 依赖安装#
1. 克隆 RLinf 仓库#
# 国内用户可使用以下地址提高下载速度:
# git clone https://ghfast.top/github.com/RLinf/RLinf.git
git clone https://github.com/RLinf/RLinf.git
cd RLinf
2. 安装依赖#
选项 1:Docker 镜像
使用 Docker 镜像运行实验。
docker run -it --rm --gpus all \
--shm-size 20g \
--network host \
--name rlinf \
-v .:/workspace/RLinf \
rlinf/rlinf:agentic-rlinf0.2-isaaclab
# 国内用户如需镜像加速,可使用:
# docker.1ms.run/rlinf/rlinf:agentic-rlinf0.2-isaaclab
选项 2:自定义环境
直接在本地环境中安装依赖:
# 国内用户可在 install.sh 中添加 --use-mirror 以加速依赖下载
bash requirements/install.sh embodied --model gr00t --env isaaclab
source .venv/bin/activate
3. Isaac Sim 下载#
使用 IsaacLab 前需要先下载并配置 Isaac Sim:
mkdir -p isaac_sim
cd isaac_sim
wget https://download.isaacsim.omniverse.nvidia.com/isaac-sim-standalone-5.1.0-linux-x86_64.zip
unzip isaac-sim-standalone-5.1.0-linux-x86_64.zip
rm isaac-sim-standalone-5.1.0-linux-x86_64.zip
下载完成后,通过以下方式设置环境变量:
source ./setup_conda_env.sh
警告
每次打开新终端并使用 Isaac Sim 时都需要执行该步骤。
Gr00t n1.5 模型下载#
cd /path/to/save/model
# 下载 IsaacLab stack_cube few-shot SFT 模型
# 方法 1:使用 git clone
git lfs install
git clone https://huggingface.co/RLinf/RLinf-Gr00t-SFT-Stack-cube
# 方法 2:使用 huggingface-hub
# 国内用户可设置:
# export HF_ENDPOINT=https://hf-mirror.com
pip install huggingface-hub
hf download RLinf/RLinf-Gr00t-SFT-Stack-cube --local-dir RLinf-Gr00t-SFT-Stack-cube
为了使模型能够通过强化学习进一步提升性能,我们在 IsaacLab 环境中采集了 stack cube 任务的人类演示数据,并以 GR00T N1.5 作为基础模型进行了监督微调,从而获得了具备基础成功率的起始模型。
数据集已开源到 HuggingFace:IsaacLab-Stack-Cube-Data
Gr00t N1.5 运行脚本#
本示例默认配置文件为 examples/embodiment/config/isaaclab_franka_stack_cube_ppo_gr00t.yaml。
你可以修改该配置文件以调整训练设置,例如 GPU 分配、训练超参数与日志记录选项。
1. 关键集群配置
你可以灵活配置 env、rollout 与 actor 组件使用的 GPU 数量。
此外,通过在配置中设置 pipeline_stage_num = 2,可以实现 rollout 与 env 之间的流水线重叠,提高 rollout 效率。
cluster:
num_nodes: 1
component_placement:
env: 0-3
rollout: 4-7
actor: 0-7
rollout:
pipeline_stage_num: 2
也可以重新配置布局为完全共享,即 env、rollout、actor 全部共享所有 GPU。
cluster:
num_nodes: 1
component_placement:
env,rollout,actor: all
也可以重新配置为完全分离,即各组件使用独立 GPU、互不干扰,从而无需使用 offload 功能。
cluster:
num_nodes: 1
component_placement:
env: 0-1
rollout: 2-5
actor: 6-7
2. 配置模型路径
请在配置文件中更新 model_path,将其指向模型下载目录。
3. 启动命令
在 IsaacLab 环境中使用 PPO 训练 gr00t n1.5:
bash examples/embodiment/run_embodiment.sh isaaclab_franka_stack_cube_ppo_gr00t
在 IsaacLab 环境中评估 gr00t n1.5:
bash examples/embodiment/eval_embodiment.sh isaaclab_franka_stack_cube_ppo_gr00t
Openpi π0.5 依赖安装#
1. 克隆 RLinf 仓库#
# 国内用户可使用以下地址提高下载速度:
# git clone https://ghfast.top/github.com/RLinf/RLinf.git
git clone https://github.com/RLinf/RLinf.git
cd RLinf
2. 安装依赖#
选项 1:Docker 镜像
使用 Docker 镜像运行实验。
docker run -it --rm --gpus all \
--shm-size 32g \
--network host \
--name rlinf \
-v .:/workspace/RLinf \
rlinf/rlinf:agentic-rlinf0.2-isaaclab
# 国内用户如需镜像加速,可使用:
# docker.1ms.run/rlinf/rlinf:agentic-rlinf0.2-isaaclab
请通过镜像内置的 switch_env 工具切换到对应的虚拟环境:
source switch_env openpi
选项 2:自定义环境
直接在本地环境中安装依赖:
# 国内用户可在 install.sh 中添加 --use-mirror 以加速依赖下载
bash requirements/install.sh embodied --model openpi --env isaaclab
source .venv/bin/activate
3. Isaac Sim 下载#
使用 IsaacLab 前需要先下载并配置 Isaac Sim:
mkdir -p isaac_sim
cd isaac_sim
wget https://download.isaacsim.omniverse.nvidia.com/isaac-sim-standalone-5.1.0-linux-x86_64.zip
unzip isaac-sim-standalone-5.1.0-linux-x86_64.zip
rm isaac-sim-standalone-5.1.0-linux-x86_64.zip
下载完成后,通过以下方式设置环境变量:
source ./setup_conda_env.sh
警告
每次打开新终端并使用 Isaac Sim 时都需要执行该步骤。
Openpi π0.5 模型下载#
cd /path/to/save/model
# 下载 IsaacLab stack_cube few-shot SFT 模型
# 方法 1:使用 git clone
git lfs install
git clone https://huggingface.co/YifWRobotics/RLinf-pi05-SFT-Stack-cube
# 方法 2:使用 huggingface-hub
# 国内用户可设置:
# export HF_ENDPOINT=https://hf-mirror.com
pip install huggingface-hub
hf download YifWRobotics/RLinf-pi05-SFT-Stack-cube --local-dir RLinf-pi05-SFT-Stack-cube
为了使模型能够通过强化学习进一步提升性能,我们在 IsaacLab 环境中采集了 stack cube 任务的人类演示数据,并以 openpi π0.5 作为基础模型进行了监督微调,从而获得了具备基础成功率的起始模型。
数据集已开源到 HuggingFace:IsaacLab-Stack-Cube-Data
Openpi π0.5 运行脚本#
1. 关键集群配置
与 gr00t n1.5 对应部分相同。
2. 配置模型路径
请在配置文件中更新 model_path,将其指向模型下载目录。
3. 启动命令
在 IsaacLab 环境中使用 PPO 训练 openpi π0.5:
bash examples/embodiment/run_embodiment.sh isaaclab_franka_stack_cube_ppo_openpi_pi05
在 IsaacLab 环境中评估 openpi π0.5:
bash examples/embodiment/eval_embodiment.sh isaaclab_franka_stack_cube_ppo_openpi_pi05
可视化与结果#
1. TensorBoard 日志
# 启动 TensorBoard
tensorboard --logdir ./logs --port 6006
2. 关键监控指标
训练指标
train/actor/approx_kl:近似 KL 散度train/actor/clip_fraction:裁剪比例train/actor/clipped_ratio:裁剪后的比率train/actor/dual_cliped_ratio:双裁剪比率train/actor/entropy_loss:熵损失train/actor/grad_norm:梯度范数train/actor/lr:学习率train/actor/policy_loss:策略损失train/actor/total_loss:总损失train/critic/explained_variance:解释方差train/critic/lr:学习率train/critic/value_clip_ratio:价值裁剪比率train/critic/value_loss:价值损失
Rollout 指标
rollout/advantages_max:最大优势值rollout/advantages_mean:平均优势值rollout/advantages_min:最小优势值rollout/returns_max:最大回合回报rollout/returns_mean:平均回合回报rollout/returns_min:最小回合回报rollout/rewards:奖励
环境指标
env/episode_len:平均回合长度env/num_trajectories:轨迹数量env/return:平均回合回报env/reward:平均步奖励env/success_once:任务成功率
3. 视频生成
video_cfg:
save_video: True
info_on_video: True
video_base_dir: ${runner.logger.log_path}/video/train
4. WandB 集成
runner:
task_type: embodied
logger:
log_path: "../results"
project_name: rlinf
experiment_name: "isaaclab_franka_stack_cube_ppo_gr00t" # "isaaclab_franka_stack_cube_ppo_openpi_pi05"
logger_backends: ["tensorboard", "wandb"] # tensorboard, wandb, swanlab
强化学习结果#
下表汇总了不同训练阶段的任务成功率提升:
模型阶段 |
成功率 |
|---|---|
Gr00t n1.5 基础模型(无 SFT) |
0.0 |
Gr00t n1.5 SFT 模型 |
0.654 |
Gr00t n1.5 RL 微调模型(SFT + RL) |
0.897 |
Openpi π0.5 SFT 模型 |
0.859 |
Openpi π0.5 RL 微调模型(SFT + RL) |
0.953 |
致谢#
感谢 许明辉 和 杨楠 对 gr00t n1.5 示例的贡献与支持! 感谢 Yifan Wu 对 openpi π0.5 示例的贡献与支持!