使用 LEAPP 导出策略#
本指南介绍如何使用 LEAPP (Lightweight Export Annotations for Policy Pipelines,策略流水线轻量级导出标注)从 Isaac Lab 导出并部署已训练的强化学习策略。LEAPP 导出的主要目的,是将策略与部署所需的输入、输出语义一同打包,让下游用户无需手动重新实现 Isaac Lab 的观测预处理、动作后处理或循环状态处理。
Isaac Lab 的 LEAPP 导出器跟踪策略与仿真之间的数据流,捕获沿途执行的操作,并为导出的策略输入、输出嵌入语义元数据。Isaac Lab 可通过 LeappDeploymentEnv 加载这些导出产物,在仿真中部署。也可以通过 ROS,使用 Isaac ROS Deploy 直接部署到真实机器人,或解析 YAML,自行组织部署流程。
通过 LEAPP 导出的 Isaac-Reach-UR10 策略部署到真实机器人。#
支持的工作流#
基于管理器的 RL 环境: 导出通过
rsl_rl、rl_games、skrl或sb3训练的策略,并使用LeappDeploymentEnv在 Isaac Lab 中运行。Direct RL 环境: 添加 LEAPP 标注后导出 RSL-RL 策略,见 Direct 工作流导出指南 。
LeappDeploymentEnv不支持这类策略。物理后端: 根据任务支持情况,使用 Isaac Sim PhysX、Newton MJWarp 或 OV PhysX 导出。后端及配置应与训练时一致。
备注
LEAPP 的更多信息见 LEAPP 文档 。
先决条件#
这一导出流程需要 leapp 、Python >= 3.10 及 PyTorch >= 2.6。 leapp 是专用的可选额外依赖,不包含在 --extra all 中。
额外依赖的选择方式与 isaaclab train 相同:每次 uv run 都添加 --extra leapp ,以及与任务匹配的后端额外依赖。 --extra 使集成可用, physics=... 为任务选择该集成:
Newton (不依赖 Kit):
--extra leapp(无需 Isaac Sim 额外依赖)OV PhysX :
--extra ovphysx --extra leapp,配合physics=ovphysxIsaac Sim PhysX :
--extra isaacsim --extra leapp,配合physics=isaacsim_physx
训练和回放使用的完整额外依赖机制,见 安装并运行第一个任务 及 可选依赖组 。
快速开始#
先导出已训练策略,再在 Isaac Lab 中启动导出的策略:
uv run --extra leapp isaaclab leapp export --rl_library <RL_LIBRARY> \
--task <TASK_NAME> physics=newton_mjwarp
uv run --extra leapp isaaclab leapp deploy \
--task <TASK_NAME> \
--pipeline <PATH_TO_EXPORTED_LEAPP_YAML> \
--viz newton_gl physics=newton_mjwarp
下文介绍如何选择其他 RL 库、配置导出并验证生成的产物。
为什么使用 LEAPP 导出#
运行导出命令后,会在检查点所在目录(或自定义路径)生成一个独立完整的导出目录,包含:
导出的模型文件 :根据所选后端,为
.onnx(默认)或.pt文件。导出元数据 :LEAPP 记录下游部署运行时所需的语义信息和连接关系,包括策略执行频率。
初始值 :
.safetensors文件,存储循环隐藏状态或上一动作等反馈状态的初始值。计算图可视化 :流水线的
.png示意图,可选择不生成。
导出产物封装策略,以及 Isaac Lab 中执行的所有观测预处理和动作后处理,部署框架无需重新实现这些逻辑。
LEAPP 生成产物及 API 的详细说明,见 LEAPP 文档 。
导出策略#
备注
导出需要已训练的检查点。通常先按 安装并运行第一个任务 和 强化学习 训练策略,导出命令随后会自动查找本地最新的匹配运行。如果希望跳过训练直接开始,RSL-RL 可传入 --checkpoint pretrained ,下载支持的核心任务与后端组合对应的已发布策略(可用范围有限,见 预训练检查点 )。
使用 --rl_library 选择生成检查点的 RL 库。支持 rsl_rl 、 rl_games 、 skrl 和 sb3 。导出默认无界面运行,请使用与训练时相同的后端额外依赖及 physics=... 选择项。在非交互式 shell 中启动 Isaac Sim Kit 时,应设置 EULA 环境变量,避免启动时等待确认:
# Newton backend (kitless)
uv run --extra leapp isaaclab leapp export --rl_library <rl_library> \
--task <TASK_NAME> physics=newton_mjwarp
# OV PhysX backend
uv run --extra ovphysx --extra leapp isaaclab leapp export --rl_library <rl_library> \
--task <TASK_NAME> physics=ovphysx
# Isaac Sim PhysX backend
OMNI_KIT_ACCEPT_EULA=Y ACCEPT_EULA=Y uv run --extra isaacsim --extra leapp isaaclab leapp export \
--rl_library <rl_library> \
--task <TASK_NAME> physics=isaacsim_physx
:: Newton backend (kitless)
uv run --extra leapp isaaclab leapp export --rl_library <rl_library> ^
--task <TASK_NAME> physics=newton_mjwarp
:: OV PhysX backend
uv run --extra ovphysx --extra leapp isaaclab leapp export --rl_library <rl_library> ^
--task <TASK_NAME> physics=ovphysx
:: Isaac Sim PhysX backend
set OMNI_KIT_ACCEPT_EULA=Y
set ACCEPT_EULA=Y
uv run --extra isaacsim --extra leapp isaaclab leapp export --rl_library <rl_library> ^
--task <TASK_NAME> physics=isaacsim_physx
省略 --checkpoint 时,导出器根据所选任务的智能体配置,在最新的匹配本地运行中查找默认检查点,因此无需在命令中写死实验目录或训练迭代次数。要导出指定模型,请传入 --checkpoint <PATH_TO_CHECKPOINT> 。
例如,导出在 Isaac Sim PhysX 上通过 RSL-RL 训练的 Humanoid 策略:
OMNI_KIT_ACCEPT_EULA=Y ACCEPT_EULA=Y uv run --extra isaacsim --extra leapp isaaclab leapp export \
--rl_library rsl_rl \
--task Isaac-Humanoid physics=isaacsim_physx
set OMNI_KIT_ACCEPT_EULA=Y
set ACCEPT_EULA=Y
uv run --extra isaacsim --extra leapp isaaclab leapp export --rl_library rsl_rl ^
--task Isaac-Humanoid physics=isaacsim_physx
默认情况下,导出产物保存到检查点所在目录,导出的计算图以任务名命名。
命令行选项#
除了后端及启动器参数(见 add_launcher_args() ),导出命令还接受以下通用 LEAPP 专用参数:
参数 |
默认值 |
描述 |
|---|---|---|
|
自动查找本地检查点 |
指定检查点的路径,或 |
|
任务名 |
导出计算图及输出目录的名称。 |
|
|
根据所需产物格式选择导出后端。推荐默认的 |
|
检查点目录 |
导出输出的基础目录。 |
|
|
跟踪轨迹运行期间执行的环境步数。设为 |
|
|
不生成流水线计算图 PNG。 |
备注
RSL-RL、RL-Games、skrl 和 Stable-Baselines3 导出器都支持 --checkpoint pretrained ,但并非每种任务与后端组合都有已发布的产物。没有匹配产物时,导出器会提示不可用并退出。此时请在本地训练任务,再省略 --checkpoint 以自动查找,或显式传入检查点路径。检查点可用情况见 预训练检查点 。
工作原理概览#
导出命令执行以下步骤:
以
num_envs=1创建环境 ,并加载已训练的检查点。为导出 修改环境 。此步骤向环境注入标注,使 LEAPP 能在执行期间识别流水线的张量输入、输出。
启用 LEAPP 跟踪, 运行一小段轨迹 (由
--validation_steps控制)。期间,LEAPP 跟踪流水线中的所有张量操作,并自动生成 ONNX 文件。编译计算图 ,让下游运行时能加载导出模型及部署元数据,并可选择验证导出模型是否复现被跟踪的输出。
这些修改对策略透明,无需改变训练代码或环境配置。
警告
LEAPP 的设计旨在支持广泛的模型架构,但当前实现存在一些重要限制:
不支持条件依赖运行时张量值的 动态控制流 ,例如由张量决定的
if、for或while逻辑。关键的被跟踪操作应避免使用不支持的第三方库。 PyTorch 操作的支持最完善。跟踪节点内未跨越计算图边界的 NumPy 转换可以被捕获,但外部库调用可能无法跟踪。当前导出流程不支持 Warp 操作。
验证导出结果#
按以下顺序验证:
运行自动验证。 保持
--validation_steps大于零,让 LEAPP 重放被跟踪的轨迹,并比较导出产物与原始策略。这能发现转换错误、不支持的操作、输出不一致及常见反馈状态问题。检查生成的计算图。 打开计算图 PNG,确认预期输入、输出和反馈边都存在。开发新的导出流程时应保留计算图生成;只有不需要时才使用
--disable_graph_visualization。查看 LEAPP 日志。 验证失败或产物不符合预期时,应先查日志,寻找后端错误、缺失元数据或不支持的模型模式。
除非下游运行时或工作流要求其他格式,否则请使用默认的 onnx-dynamo 后端。后端支持情况因模型而异;某个后端失败时,可尝试能生成合适产物格式的其他后端。
ONNX、JIT 和 PT2 导出格式的详细信息,见 LEAPP 导出指南 。
在 Isaac Lab 中运行导出策略的方法,见 部署指南 。