使用 LEAPP 导出策略#

本指南介绍如何使用 LEAPP (Lightweight Export Annotations for Policy Pipelines,策略流水线轻量级导出标注)从 Isaac Lab 导出并部署已训练的强化学习策略。LEAPP 导出的主要目的,是将策略与部署所需的输入、输出语义一同打包,让下游用户无需手动重新实现 Isaac Lab 的观测预处理、动作后处理或循环状态处理。

Isaac Lab 的 LEAPP 导出器跟踪策略与仿真之间的数据流,捕获沿途执行的操作,并为导出的策略输入、输出嵌入语义元数据。Isaac Lab 可通过 LeappDeploymentEnv 加载这些导出产物,在仿真中部署。也可以通过 ROS,使用 Isaac ROS Deploy 直接部署到真实机器人,或解析 YAML,自行组织部署流程。

UR10 到达目标的运动对比:左侧为 Isaac Lab 仿真,右侧为真实机器人。

通过 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=ovphysx

  • Isaac 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 专用参数:

参数

默认值

描述

--checkpoint

自动查找本地检查点

指定检查点的路径,或 pretrained ,后者请求与已确定的任务、RL 库、物理后端和渲染后端对应的已发布检查点。

--export_task_name

任务名

导出计算图及输出目录的名称。

--export_method

onnx-dynamo

根据所需产物格式选择导出后端。推荐默认的 onnx-dynamo ,其他选项按需使用。如果某个后端不支持模型,可以尝试其他后端。选项及建议见 LEAPP 导出指南 。

--export_save_path

检查点目录

导出输出的基础目录。

--validation_steps

5

跟踪轨迹运行期间执行的环境步数。设为 0 可跳过验证。

--disable_graph_visualization

False

不生成流水线计算图 PNG。

备注

RSL-RL、RL-Games、skrl 和 Stable-Baselines3 导出器都支持 --checkpoint pretrained ,但并非每种任务与后端组合都有已发布的产物。没有匹配产物时,导出器会提示不可用并退出。此时请在本地训练任务,再省略 --checkpoint 以自动查找,或显式传入检查点路径。检查点可用情况见 预训练检查点 。

工作原理概览#

导出命令执行以下步骤:

  1. 以 num_envs=1 创建环境 ,并加载已训练的检查点。

  2. 为导出 修改环境 。此步骤向环境注入标注,使 LEAPP 能在执行期间识别流水线的张量输入、输出。

  3. 启用 LEAPP 跟踪, 运行一小段轨迹 (由 --validation_steps 控制)。期间,LEAPP 跟踪流水线中的所有张量操作,并自动生成 ONNX 文件。

  4. 编译计算图 ,让下游运行时能加载导出模型及部署元数据,并可选择验证导出模型是否复现被跟踪的输出。

这些修改对策略透明,无需改变训练代码或环境配置。

警告

LEAPP 的设计旨在支持广泛的模型架构,但当前实现存在一些重要限制:

  • 不支持条件依赖运行时张量值的 动态控制流 ,例如由张量决定的 if 、 for 或 while 逻辑。

  • 关键的被跟踪操作应避免使用不支持的第三方库。 PyTorch 操作的支持最完善。跟踪节点内未跨越计算图边界的 NumPy 转换可以被捕获,但外部库调用可能无法跟踪。当前导出流程不支持 Warp 操作。

验证导出结果#

按以下顺序验证:

  1. 运行自动验证。 保持 --validation_steps 大于零,让 LEAPP 重放被跟踪的轨迹,并比较导出产物与原始策略。这能发现转换错误、不支持的操作、输出不一致及常见反馈状态问题。

  2. 检查生成的计算图。 打开计算图 PNG,确认预期输入、输出和反馈边都存在。开发新的导出流程时应保留计算图生成;只有不需要时才使用 --disable_graph_visualization 。

  3. 查看 LEAPP 日志。 验证失败或产物不符合预期时,应先查日志,寻找后端错误、缺失元数据或不支持的模型模式。

除非下游运行时或工作流要求其他格式,否则请使用默认的 onnx-dynamo 后端。后端支持情况因模型而异;某个后端失败时,可尝试能生成合适产物格式的其他后端。

ONNX、JIT 和 PT2 导出格式的详细信息,见 LEAPP 导出指南 。

在 Isaac Lab 中运行导出策略的方法,见 部署指南 。

延伸阅读#