来源:https://zhuanlan.zhihu.com/p/1938339457687356969
引言
本文基于 NVIDIA 在 Hugging Face 发布的官方博客Post-Training Isaac GR00T N1.5 for LeRobot SO-101 Arm,详细介绍如何对 Isaac GR00T N1.5 模型进行后期训练(微调),以适配开源的 LeRobot SO-101 机械臂。
- 核心问题与场景:通用机器人基础模型(如 GR00T)拥有强大的跨环境、跨任务泛化能力,但如何将其高效、低成本地应用到特定的、非预训练的机器人硬件(如经济实惠的 SO-101 机械臂)上,是研究人员和开发者面临的关键挑战。
- 本文价值:本文提供了一个完整的端到端教程,从环境安装、数据准备到模型微调、评估和物理部署,展示了如何利用单个 SO-101 机械臂的遥操作数据,成功适配并部署 GR00T N1.5 模型。这使得广大爱好者、研究人员和工程师能够将先进的人形机器人推理与操作能力,应用到自己的硬件平台上。
NVIDIA Isaac GR00T(通用机器人 00 技术)是一个用于构建机器人基础模型和数据管道的研发平台,旨在加速智能、自适应机器人的开发。近期发布的 Isaac GR00T N1.5 是其首个重大更新,作为一个跨实体的基础模型,它能处理包括语言和图像在内的多模态输入,在不同环境中执行操作任务,并能通过后期训练适配特定的机器人实体、任务和环境。

微调与部署的完整流程
整个过程涵盖了从环境准备到最终在物理机器人上运行模型的全部步骤,可以清晰地划分为五个核心阶段。

GR00T N1.5 的灵活性得益于其独特的 EmbodimentTag 系统。该系统允许模型无缝地为不同的机器人平台进行定制,是实现通用模型向特定硬件适配的关键。

步骤 0:环境安装
在开始之前,请确保你的系统满足官方仓库中列出的先决条件。
克隆 Isaac-GR00T 仓库
首先,克隆官方的 Isaac-GR00T GitHub 仓库并进入该目录。
git clone <https://github.com/NVIDIA/Isaac-GR00T>
cd Isaac-GR00T
创建并激活 Conda 环境
我们使用 Conda 来管理项目依赖,创建一个新的 Python 3.10 环境并激活它。
conda create -n gr00t python=3.10
conda activate gr00t
安装依赖包
安装基础依赖包以及针对性能优化的 flash-attn。
pip install --upgrade setuptools
pip install -e .[base]
pip install --no-build-isolation flash-attn==2.7.1.post4
步骤 1:数据集准备
用户可以使用任何 LeRobot 数据集来微调 GR00T N1.5。本教程以 so101-table-cleanup(桌面清理任务)为例。值得注意的是,SO-100 或 SO-101 机械臂的数据并未包含在 GR00T N1.5 的初始预训练数据中,因此我们需要将其作为一个 new_embodiment(新实体)进行训练。

下载或创建数据集
你可以选择遵循官方指南录制自己的数据集,或直接从 Hugging Face 下载本教程使用的 so101-table-cleanup 数据集。--local-dir 参数指定了数据集在本地的保存路径。
huggingface-cli download \\\\
--repo-type dataset youliangtan/so101-table-cleanup \\\\
--local-dir ./demo_data/so101-table-cleanup
配置模态文件
为了让 GR00T 兼容 LeRobot 数据集,需要一个 modality.json 文件来描述状态和动作的模态信息。对于本教程使用的双摄像头设置,请将官方示例中的配置文件复制到数据集的 meta 目录下。
cp getting_started/examples/so100_dualcam__modality.json ./demo_data/so101-table-cleanup/meta/modality.json
注意:如果你的数据集是单摄像头设置(例如 so100_strawberry_grape),则应使用对应的单摄像头配置文件:
cp getting_started/examples/so100__modality.json ./demo_data/<DATASET_PATH>/meta/modality.json
完成以上步骤后,你可以使用 GR00T 提供的 LeRobotSingleDataset 类来加载数据集,并通过以下脚本进行验证:
python scripts/load_dataset.py \\\\
--dataset-path ./demo_data/so101-table-cleanup \\\\
--plot-state-action \\\\
--video-backend torchvision_av
步骤 2:微调模型
使用 scripts/gr00t_finetune.py 脚本即可开始微调 GR00T N1.5 模型。执行以下命令启动微调过程:
python scripts/gr00t_finetune.py \\\\
--dataset-path ./demo_data/so101-table-cleanup/ \\\\
--num-gpus 1 \\\\
--output-dir ./so101-checkpoints \\\\
--max-steps 10000 \\\\
--data-config so100_dualcam \\\\
--video-backend torchvision_av
参数说明:
| 参数 | 说明 |
|---|---|
| –dataset-path | 指定训练数据集的路径。 |
| –num-gpus | 使用的 GPU 数量。 |
| –output-dir | 训练过程中生成的模型检查点(checkpoint)的保存目录。 |
| –max-steps | 最大训练步数。 |
| –data-config | 数据配置文件,与 modality.json 对应。 |
| –video-backend | 处理视频数据的后端库。 |
提示:默认的微调设置需要约 25GB 的显存(VRAM)。如果你的 GPU 显存不足,可以尝试在命令中添加 --no-tune_diffusion_model 标志,这将跳过对扩散模型的微调,从而显著降低显存消耗。
步骤 3:开环评估
训练完成后,你可以在开环(open-loop)设置下评估并可视化微调后策略的表现。开环评估意味着模型根据初始状态生成一系列动作,但不会接收执行这些动作后的真实世界反馈来调整后续动作。
运行以下命令进行评估:
python scripts/eval_policy.py --plot \\\\
--embodiment_tag new_embodiment \\\\
--model_path <YOUR_CHECKPOINT_PATH> \\\\
--data_config so100_dualcam \\\\
--dataset_path ./demo_data/so101-table-cleanup/ \\\\
--video_backend torchvision_av \\\\
--modality_keys single_arm gripper
-embodiment_tag new_embodiment:明确告知评估脚本,我们正在为一个新的、未在预训练中见过的机器人实体加载策略。-model_path <YOUR_CHECKPOINT_PATH>:替换为你上一步训练保存的模型检查点路径。
至此,你已成功在一个新的机器人实体上完成了 GR00T N1.5 的微调。
步骤 4:物理部署
最后一步是将微调和评估成功的策略部署到真实的 SO-101 机械臂上。部署采用客户端-服务器(Client-Server)架构,一个终端运行推理服务,另一个终端连接机器人并发送指令。

1. 启动推理服务(Server)
在第一个终端中,运行以下命令启动策略推理服务。
python scripts/inference_service.py --server \\\\
--model_path <PATH_TO_YOUR_CHECKPOINT> \\\\
--embodiment-tag new_embodiment \\\\
--data-config so100_dualcam \\\\
--denoising-steps 4
2. 启动评估客户端(Client)
在另一个终端中,运行客户端脚本连接机器人。你需要根据实际情况修改机器人端口、ID、摄像头配置和策略服务器的 IP 地址。
python getting_started/examples/eval_lerobot.py \\\\
--robot.type=so100_follower \\\\
--robot.port=/dev/ttyACM0 \\\\
--robot.id=lil_guy \\\\
--robot.cameras="{ wrist: {type: opencv, index_or_path: 9, width: 640, height: 480, fps: 30}, front: {type: opencv, index_or_path: 15, width: 640, height: 480, fps: 30}}" \\\\
--policy_host=10.112.209.136 \\\\
--lang_instruction="Grab pens and place into pen holder."
由于我们使用了包含多种任务指令的数据集进行微调,你可以通过 --lang_instruction 参数来引导策略执行不同的任务,例如使用数据集中的另一个指令:
“Grab tapes and place into pen holder” (抓住胶带并放入笔筒)。

总结与后续步骤
通过本教程,我们成功地将一个通用的机器人基础模型 GR00T N1.5,适配到了一个低成本的开源机械臂 SO-101 上。这充分展示了机器人基础模型在特定硬件上进行迁移学习的巨大潜力。
准备好开始你的机器人项目了吗?这里有一些关键资源可以帮助你:
- GR00T N1.5 模型:从 Hugging Face 直接下载最新模型。
- 微调资源:在 GitHub 仓库 中查找用于微调的示例数据集和 PyTorch 脚本。
- 贡献数据集:通过向 Hugging Face 贡献你自己的数据集来赋能整个机器人社区。
- LeRobot 黑客松:加入全球社区,参加即将到来的 LeRobot 黑客松,应用你的技能。

评论0