NVIDIA Isaac GR00T N1 - 世界首个通用人形机器人基础模型实战

0. 概述与简介

关于UCloud(优刻得)旗下的compshare算力共享平台
UCloud(优刻得)是中国知名的中立云计算服务商,科创板上市,中国云计算第一股。
Compshare GPU算力平台隶属于UCloud,专注于提供高性价4090算力资源,配备独立IP,支持按时、按天、按月灵活计费,支持github、huggingface访问加速。
使用下方链接注册可获得20元算力金,免费体验10小时4090云算力,此外还有3090和P40,价格每小时只需要8毛,赠送的算礼金够用一整天。
https://www.compshare.cn/?ytag=GPU_lovelyyoshino_Lcsdn_csdn_display

NVIDIA Isaac GR00T N1是全球首个用于通用人形机器人推理和技能的开源基础模型。这种跨实体模型可以接收多模态输入,包括语言和图像,以在各种环境中执行操作任务。GR00T的名称源自"Generalized Robot Operations and Telemetry",代表着其通用化的操作能力和遥测数据处理能力。

GR00T N1 基于广泛的人形机器人数据集进行训练,这些数据集包括真实捕获的数据、使用NVIDIA Isaac GR00T Blueprint组件生成的合成数据,以及互联网规模的视频数据。通过训练后的适应过程,它可以针对特定的机器人实体、任务和环境进行优化。

在这里插入图片描述

作为一个真正的基础模型,GR00T N1不仅限于特定的机器人平台或任务,而是提供了一个通用框架,可以通过少量的特定任务数据进行微调,从而适应各种不同的机器人系统和应用场景。这种通用性和适应性使其成为机器人研究和应用开发的强大工具。

目前相关镜像已经存入GR00T-NIVIDIA中了。

在这里插入图片描述

1. 模型架构与工作原理

GR00T N1的神经网络架构是视觉-语言基础模型与扩散变换器头部的结合,后者用于对连续动作进行去噪。整体架构如下:

  1. 多模态输入处理
    • 视觉模块处理视频和图像输入
    • 语言模块处理文本指令和描述
    • 状态编码器处理机器人的当前状态信息
  2. 基础模型核心
    • 结合了大型视觉-语言模型的架构
    • 具有跨模态注意力机制,能够在不同输入模态之间建立关联
  3. 扩散变换器头部
    • 采用扩散模型,通过逐步去噪过程生成精确的连续动作
    • 实现从高层次指令到低层次动作的有效映射
  4. 跨实体适应层
    • 允许模型适应不同的机器人形态和配置
    • 通过特定的标记和参数,实现跨机器人平台的知识迁移

GR00T N1的工作流程如下:

  1. 用户需要收集机器人演示数据,格式为(视频、状态、动作)三元组
  2. 将演示数据转换为LeRobot兼容的数据模式
  3. 使用提供的配置示例为不同机器人实体设置不同的训练配置
  4. 利用提供的脚本微调预训练的GR00T N1模型
  5. Gr00tPolicy连接到机器人控制器,在目标硬件上执行动作

这种架构使GR00T N1能够理解复杂的场景和指令,并将其转化为精确的机器人动作序列,实现高度灵活和适应性强的机器人控制。

在这里插入图片描述

2. 系统要求与环境准备

在开始使用NVIDIA Isaac GR00T N1之前,请确保您的系统满足以下要求:

2.1 硬件要求

  • GPU
    • 微调:推荐使用H100、L40、RTX 4090或A6000 GPU
    • 推理:RTX 4090或A6000已经过测试并能良好运行
  • 内存:建议至少16GB RAM,对于大型数据集的处理推荐32GB或更高
  • 存储:至少50GB可用空间用于模型、代码和示例数据

2.2 软件要求

  • 操作系统:已在Ubuntu 20.04和22.04上测试
  • CUDA版本:12.4(这是确保flash-attn模块正常工作的关键)
  • Python版本:3.10
  • 系统依赖:ffmpeg、libsm6、libxext6

2.3 准备工作

在开始安装之前,请确保:

  1. 检查您的CUDA版本,如果尚未安装CUDA 12.4,请按照NVIDIA官方指南进行安装:
    # 检查当前CUDA版本
    nvcc --version
    
    # 如果需要安装或更新CUDA,请按照NVIDIA官方指南操作
    wget https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda_12.4.0_550.54.14_linux.run
    sudo sh cuda_12.4.0_550.54.14_linux.run
    
  2. 安装必要的系统依赖:
    sudo apt-get update
    sudo apt-get install ffmpeg libsm6 libxext6 -y
    
  3. 确保您的GPU驱动程序是最新的,并且与CUDA 12.4兼容。可以使用以下命令检查GPU驱动程序版本:
    nvidia-smi
    

遵循这些准备工作将确保您的系统已准备好安装和运行NVIDIA Isaac GR00T N1。

在这里插入图片描述

3. 详细安装指南

以下是安装NVIDIA Isaac GR00T N1的详细步骤:

3.1 克隆代码库

首先,从GitHub上克隆Isaac-GR00T代码库:

git clone https://github.com/NVIDIA/Isaac-GR00T
cd Isaac-GR00T

3.2 创建并配置Conda环境

我们推荐使用Conda来管理Python环境,这有助于避免依赖冲突:

# 安装Miniconda(如果尚未安装)
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
# 按照提示完成安装

# 创建新的Conda环境
conda create -n gr00t python=3.10
conda activate gr00t

3.3 安装项目依赖

现在,在激活的Conda环境中安装GR00T所需的依赖项:

# 升级setuptools
pip install --upgrade setuptools

# 安装项目及其依赖
pip install -e .

# 特别注意:安装flash-attn时禁用构建隔离,以确保与CUDA正确兼容
pip install --no-build-isolation flash-attn==2.7.1.post4

特别提示:

  • flash-attn的安装可能会比较耗时,因为它需要编译CUDA扩展
  • 如果遇到与CUDA相关的错误,请确保您的CUDA版本正确,并且已经按照上述说明安装了正确的版本
  • 对于某些系统,可能需要安装额外的编译工具,如build-essentialninja-build

在这里插入图片描述


3.4 下载示例数据(可选)

为了方便开始尝试,您可以下载提供的示例数据集:

# 如果您希望使用更完整的数据集,可以从huggingface下载
huggingface-cli download nvidia/PhysicalAI-Robotics-GR00T-X-Embodiment-Sim \
  --repo-type dataset \
  --include "gr1_arms_only.CanSort/**" \
  --local-dir $HOME/gr00t_dataset

也可以直接使用代码库中包含的小型示例数据集(位于demo_data/robot_sim.PickNPlace目录)。

在这里插入图片描述

至此,您已经完成了NVIDIA Isaac GR00T N1的安装。下一步可以开始探索如何使用模型进行推理和微调。

4. 入门指南

4.1 数据格式与加载

GR00T N1使用特定的数据格式进行训练和推理,了解这种格式对于成功应用模型至关重要。

LeRobot兼容数据架构

GR00T N1使用基于Huggingface LeRobot的扩展数据模式,加入了更详细的模态和注释。这种格式的主要特点包括:

  • 数据组织:数据以(视频、状态、动作)三元组的形式组织
  • 文件结构:遵循特定的目录结构,包括元数据和每个示例的数据
  • 模态定义:通过modality.json文件明确定义不同的输入和输出模态

示例数据结构:

.
├── data
│   └── chunk-000
│       ├── episode_000000.parquet
│       ├── episode_000001.parquet
│       ├── episode_000002.parquet
│       ├── episode_000003.parquet
│       └── episode_000004.parquet
├── meta
│   ├── episodes.jsonl
│   ├── info.json
│   ├── modality.json
│   ├── stats.json
│   └── tasks.jsonl
└── videos
    └── chunk-000
        └── observation.images.ego_view
            ├── episode_000000.mp4
            ├── episode_000001.mp4
            ├── episode_000002.mp4
            ├── episode_000003.mp4
            └── episode_000004.mp4

完整的数据架构说明可在getting_started/LeRobot_compatible_data_schema.md中找到。这里我们也帮助梳理一下

1. meta/episodes.jsonl

{
    "episode_index": 0,
    "tasks": ["pick the squash from the counter and place it in the plate", "valid"],
    "length": 416
}
  • 记录每个操作场景的基本信息
  • length: 场景持续的帧数
  • tasks: 包含任务描述和有效性标记

2. meta/tasks.jsonl

{
    "task_index": 0,
    "task": "pick the squash from the counter and place it in the plate"
}
  • 存储所有任务的详细描述
  • 与 parquet 文件中的 task_index 对应

3. data/chunk-000/episode_*.parquet

每个 parquet 文件包含以下字段:

{
    "observation.state": [...],     // 状态数组
    "action": [...],               // 动作数组
    "timestamp": 0.049999,        // 时间戳
    "annotation.human.action.task_description": 0,  // 任务描述索引
    "task_index": 0,              // 任务索引
    "annotation.human.validity": 1, // 有效性标记
    "episode_index": 0,           // 场景索引
    "index": 0,                   // 全局观测索引
    "next.reward": 0,             // 下一步奖励
    "next.done": false            // 场景是否结束
}

4. meta/modality.json

{
    "state": {
        "left_arm": {
            "start": 0,
            "end": 7
        },
        // ... 其他状态定义
    },
    "action": {
        "left_arm": {
            "start": 0,
            "end": 7
        },
        // ... 其他动作定义
    },
    "video": {
        "ego_view": {
            "original_key": "observation.images.ego_view"
        }
    },
    "annotation": {
        "human.action.task_description": {},
        "human.validity": {}
    }
}
  • 定义了状态和动作数组的结构
  • 指定视频观测的映射关系
  • 声明数据集中的注释类型

特点

  1. 标准化数据格式:遵循 LeRobot V2.0 规范。其他内容可以参考LeRobot 机器人大脑的输入输出(五)lerobot开源项目的主从臂采集数据(操作记录)
  2. 完整的任务记录:包含状态、动作、视觉和注释信息
  3. 模块化组织:清晰的目录结构便于管理和访问
  4. 丰富的元数据:通过 modality.json 提供详细的数据解释
数据加载示例

以下是加载数据集的Python代码示例:

from gr00t.data.dataset import LeRobotSingleDataset
from gr00t.data.embodiment_tags import EmbodimentTag
from gr00t.experiment.data_config import DATA_CONFIG_MAP

# 获取数据配置
data_config = DATA_CONFIG_MAP["gr1_arms_only"]

# 获取模态配置和转换
modality_config = data_config.modality_config()
transforms = data_config.transform()

# 创建LeRobotSingleDataset对象加载数据
dataset = LeRobotSingleDataset(
    dataset_path="demo_data/robot_sim.PickNPlace",
    modality_configs=modality_config,
    transforms=None,  # 可以选择不应用任何转换
    embodiment_tag=EmbodimentTag.GR1,  # 使用的实体标签
)

# 访问数据示例
sample = dataset[5]

为了更深入地了解数据加载过程,您可以:

在这里插入图片描述

关键概念解释
  • 模态配置(Modality Config):定义数据集中使用的模态(例如视频、状态、动作)的配置对象
  • 实体标签(Embodiment Tag):定义使用的机器人实体,预训练模型支持特定标签,如GR1
  • 转换配置(Transform Config):定义在数据加载过程中应用于数据的转换

4.2 模型推理

一旦数据准备好,您可以使用预训练的GR00T N1模型进行推理。这一过程涉及加载模型并使用它来预测机器人动作。

基本推理流程

以下是使用预训练模型进行推理的基本代码:

from gr00t.model.policy import Gr00tPolicy
from gr00t.data.embodiment_tags import EmbodimentTag

# 1. 加载模态配置和转换(与上面数据加载部分相同)
modality_config = data_config.modality_config()
transforms = data_config.transform()

# 2. 加载数据集
dataset = LeRobotSingleDataset(
    dataset_path="demo_data/robot_sim.PickNPlace",
    modality_configs=modality_config,
    transforms=None,
    embodiment_tag=EmbodimentTag.GR1,
)

# 3. 加载预训练模型
policy = Gr00tPolicy(
    model_path="nvidia/GR00T-N1-2B",  # Huggingface上的模型路径
    modality_config=modality_config,
    modality_transform=transforms,
    embodiment_tag=EmbodimentTag.GR1,
    device="cuda"  # 指定运行设备
)

# 4. 执行推理
action_chunk = policy.get_action(dataset[0])

更详细的推理教程可以在getting_started/1_gr00t_inference.ipynb中找到。

推理服务

GR00T还提供了一个推理服务,可以在服务器模式或客户端模式下运行:

  1. 启动服务器模式:
python scripts/inference_service.py  --server
  1. 在另一个终端中运行客户端模式向服务器发送请求:
python scripts/inference_service.py --client

这种服务架构使您能够将模型部署为持久化服务,并从不同的客户端发送请求,这对于实际的机器人应用非常有用。

在这里插入图片描述

推理性能

在单个样本处理场景下,GR00T N1的推理速度非常高效:

模块推理速度
VLM骨干网络22.92毫秒
含4步扩散的动作头部4 x 9.90毫秒 = 39.61毫秒
完整模型62.53毫秒

值得注意的是,在推理过程中4个去噪步骤通常就足够了,这使得模型能够在大约60毫秒内完成一次完整的推理,适合实时控制应用。

4.3 模型微调

GR00T N1的一个主要优势是它可以通过微调来适应新的任务和环境。微调过程使用您自己的数据来调整预训练模型的参数,使其更好地适应特定任务。

基本微调流程

使用提供的微调脚本可以轻松地在示例数据集上微调模型:

  1. 查看微调脚本的可用参数:
python scripts/gr00t_finetune.py --help

在这里插入图片描述

  1. 使用标准微调运行脚本:
python scripts/gr00t_finetune.py --dataset-path ./demo_data/robot_sim.PickNPlace --num-gpus 1
  1. 或者使用LoRA参数高效微调:
python scripts/gr00t_finetune.py --dataset-path ./demo_data/robot_sim.PickNPlace --num-gpus 1 --lora_rank 64 --lora_alpha 128 --batch-size 32

LoRA(Low-Rank Adaptation)是一种参数高效的微调技术,可以显著减少需要更新的参数数量,同时保持良好的性能。这对于计算资源有限的情况特别有用。

在这里插入图片描述

这里我演示的是我的账号,你需要用下面的来切换成你的wandb账号

wandb login --relogin

在这里插入图片描述
在这里插入图片描述

微调配置建议

为了获得最佳微调效果,建议:

使用更大的数据集

您也可以从Huggingface下载更大的模拟数据集进行微调:

huggingface-cli download nvidia/PhysicalAI-Robotics-GR00T-X-Embodiment-Sim \
  --repo-type dataset \
  --include "gr1_arms_only.CanSort/**" \
  --local-dir $HOME/gr00t_dataset

然后使用这个数据集路径进行微调:

python scripts/gr00t_finetune.py --dataset-path $HOME/gr00t_dataset/gr1_arms_only.CanSort --num-gpus 1

4.4 模型评估

评估微调后的模型性能是确保其有效性的重要步骤。GR00T提供了一个离线评估脚本,可以评估模型在数据集上的表现并生成可视化结果。

评估流程
  1. 首先运行推理服务,加载您的模型:
python scripts/inference_service.py --server \
    --model_path <MODEL_PATH> \
    --embodiment_tag new_embodiment

#python scripts/inference_service.py --server \
#    --model_path /tmp/gr00t/checkpoint-10000/ \
#    --embodiment_tag new_embodiment

在这里插入图片描述

  1. 然后运行离线评估脚本:
python scripts/eval_policy.py --plot \
    --dataset_path <DATASET_PATH> \
    --embodiment_tag new_embodiment
# python scripts/eval_policy.py --plot     --dataset_path ./demo_data/robot_sim.PickNPlace     --embodiment_tag new_embodiment

值得一提,原本代码默认是annotation.human.coarse_action但是实际上数据modality.json当中没有这个json,需要用自己官方的数据需要手动修改,虽然是空的,但是必须要有。
在这里插入图片描述

这将生成真实动作与预测动作的对比图,以及动作的非归一化均方误差(MSE)。这些指标可以帮助您判断策略在数据集上的表现如何。
在这里插入图片描述

评估指标解读
  • 均方误差(MSE):衡量预测动作与真实动作之间的平均差异
  • 轨迹对比:直观展示预测轨迹与真实轨迹的吻合度
  • 成功率:如果有任务成功/失败的标记,也可以计算成功率

通过这些评估,您可以确定是否需要进一步微调模型,或者模型是否已经准备好部署到实际应用中。

5. 总结

NVIDIA Isaac GR00T N1作为世界首个通用人形机器人基础模型,为机器人领域带来了突破性的进展。它通过创新的多模态架构,将视觉、语言和状态信息有机结合,实现了从高层指令到精确动作的端到端映射。其核心优势在于跨平台适应性强、推理速度快(约60毫秒/次)以及灵活的微调机制,这使得它能够快速适应不同的机器人平台和任务场景。

该模型采用标准化的数据格式和完整的工具链支持,使得从数据收集、模型训练到部署评估的全流程都变得清晰可控。特别是通过LoRA等参数高效的微调技术,即使在计算资源受限的情况下也能实现良好的任务适应。这些特性使GR00T N1不仅适合研究用途,更能在实际应用中发挥重要作用,为推动机器人技术的普及和发展提供了有力支撑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敢敢のwings

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值