aigrootnvidiavlacosmosfine-tuninghumanoidisaac

Fine-Tune GR00T N1.6 với Cosmos Reason 2

Hướng dẫn chi tiết fine-tune NVIDIA GR00T N1.6 — VLA model 3B tham số kết hợp Cosmos Reason 2 để điều khiển humanoid robot từ ảnh và ngôn ngữ.

Nguyễn Anh Tuấn15 tháng 4, 202611 phút đọc
Fine-Tune GR00T N1.6 với Cosmos Reason 2

NVIDIA vừa phát hành GR00T N1.6 — phiên bản nâng cấp đáng kể của foundation model cho robot tổng quát. Với kiến trúc dual-system kết hợp Cosmos Reason 2 làm "bộ não" suy luận và Diffusion Transformer 32 lớp sinh hành động, N1.6 đạt hiệu suất vượt trội trên nhiều benchmark thực tế. Bài viết này sẽ hướng dẫn bạn từ A đến Z: hiểu kiến trúc, chuẩn bị dữ liệu, fine-tune, và chạy inference.

GR00T N1.6 là gì?

GR00T (Generalist Robot 00 Technology) N1.6 là Vision-Language-Action (VLA) model mã nguồn mở với 3 tỷ tham số. Model nhận đầu vào đa phương thức — hình ảnh RGB từ camera, câu lệnh ngôn ngữ tự nhiên, và trạng thái proprioception của robot — rồi xuất ra chuỗi hành động liên tục để điều khiển robot.

Paper gốc: GR00T N1: An Open Foundation Model for Generalist Humanoid Robots — Johan Bjorck et al., NVIDIA GEAR Lab, 2025.

Điểm đặc biệt của N1.6 so với phiên bản trước (N1.5):

  • DiT lớn gấp đôi: 32 lớp thay vì 16 lớp
  • VLM backbone mới: Cosmos Reason 2B thay thế Eagle + SmolLM
  • Relative actions: xuất hành động tương đối thay vì tuyệt đối, giúp chuyển động mượt hơn
  • Hội tụ nhanh hơn khi fine-tune trên embodiment mới

Kiến trúc dual-system của GR00T N1.6 kết hợp VLM suy luận và DiT sinh hành động

Kiến trúc Dual-System

GR00T N1.6 lấy cảm hứng từ lý thuyết nhận thức con người với hai hệ thống:

System 2 — Cosmos Reason (Suy luận)

Đây là phần "bộ não" của model, dựa trên Cosmos Reason 2B — một Vision-Language Model được NVIDIA phát triển riêng cho physical AI:

  • Vision Encoder: SigLip2 (pretrained ViT) xử lý ảnh RGB ở mọi độ phân giải
  • Language Encoder: T5 transformer mã hoá câu lệnh ngôn ngữ
  • 4 lớp VLM trên cùng được unfreeze trong quá trình pretraining, cho phép model tinh chỉnh biểu diễn vision-language

Cosmos Reason 2 còn có phiên bản 8B tham số lớn hơn (Hugging Face) phục vụ cho planning và suy luận phức tạp hơn, nhưng trong GR00T N1.6 dùng bản 2B để đảm bảo tốc độ inference thời gian thực.

System 1 — Diffusion Transformer (Hành động)

Phần sinh hành động sử dụng DiT 32 lớp với:

  • Adaptive LayerNorm (AdaLN) cho diffusion step conditioning
  • Self-attention trên proprioception/actions xen kẽ với cross-attention tới vision-language embeddings
  • 4-step denoising để sinh chuỗi hành động
  • Flow matching kết hợp world-modeling objectives trong training
  • Xuất state-relative action chunks (hành động tương đối so với trạng thái hiện tại)

Proprioception Encoder

MLP đơn giản nhưng được index theo embodiment ID, cho phép model tổng quát hoá qua nhiều loại robot khác nhau — từ cánh tay SO-100 đến humanoid Unitree G1.

Yêu cầu phần cứng

Mục đích GPU tối thiểu Khuyến nghị
Fine-tuning 48GB VRAM (RTX A6000, L40) H100 80GB
Inference RTX 4090 24GB Jetson AGX Thor

Hỗ trợ kiến trúc GPU: Ampere, Hopper, Lovelace, Blackwell, và Jetson.

Hiệu năng inference (1 camera, 4 bước denoising):

Thiết bị Độ trễ E2E Tần suất
RTX 5090 + torch.compile 37ms 27.3 Hz
H100 + torch.compile 38ms 26.3 Hz
RTX 4090 + torch.compile 44ms 22.8 Hz
Jetson AGX Thor 105ms 9.5 Hz

Cài đặt môi trường

Bước 1: Clone repo và cài dependencies

git clone --recurse-submodules https://github.com/NVIDIA/Isaac-GR00T
cd Isaac-GR00T
bash scripts/deployment/dgpu/install_deps.sh
source .venv/bin/activate

Script cài đặt tự tạo virtual environment và cài PyTorch, transformers, diffusers, cùng các dependency cần thiết.

Bước 2: Tải model pretrained

# Model sẽ tự tải từ Hugging Face khi chạy lần đầu
# Hoặc tải trước:
huggingface-cli download nvidia/GR00T-N1.6-3B --local-dir ./models/GR00T-N1.6-3B

Model phát hành dưới NVIDIA OneWay Noncommercial License (base model) và Apache 2.0 (codebase).

Chuẩn bị dữ liệu

GR00T N1.6 sử dụng format GR00T-flavored LeRobot v2 — bộ ba (video, state, action) lưu dưới dạng Parquet episode files.

Cấu trúc thư mục

dataset/
├── data/
│   ├── chunk-000/
│   │   ├── episode_000000.parquet
│   │   ├── episode_000001.parquet
│   │   └── ...
│   └── ...
├── videos/
│   ├── chunk-000/
│   │   ├── front/
│   │   │   ├── episode_000000.mp4
│   │   │   └── ...
│   │   └── wrist/
│   │       └── ...
│   └── ...
├── meta/
│   ├── modality.json
│   ├── stats.json
│   ├── relative_stats.json
│   ├── episodes.jsonl
│   └── info.json
└── README.md

Cấu hình Modality

File modality.json định nghĩa mapping giữa dữ liệu thô và đầu vào model. Ví dụ cho cánh tay SO-100:

from gr00t.configs.data.embodiment_configs import register_modality_config
from gr00t.data.types import ModalityConfig, ActionConfig
from gr00t.data.types import ActionRepresentation, ActionType, ActionFormat
from gr00t.data.types import EmbodimentTag

so100_config = {
    "video": ModalityConfig(
        delta_indices=[0],
        modality_keys=["front", "wrist"]
    ),
    "state": ModalityConfig(
        delta_indices=[0],
        modality_keys=["single_arm", "gripper"]
    ),
    "action": ModalityConfig(
        delta_indices=list(range(0, 16)),
        modality_keys=["single_arm", "gripper"],
        action_configs=[
            ActionConfig(
                rep=ActionRepresentation.RELATIVE,
                type=ActionType.NON_EEF,
                format=ActionFormat.DEFAULT
            ),
            ActionConfig(
                rep=ActionRepresentation.ABSOLUTE,
                type=ActionType.NON_EEF,
                format=ActionFormat.DEFAULT
            ),
        ],
    ),
    "language": ModalityConfig(
        delta_indices=[0],
        modality_keys=["annotation.human.action.task_description"]
    ),
}

register_modality_config(so100_config, embodiment_tag=EmbodimentTag.NEW_EMBODIMENT)

Giải thích các trường quan trọng:

  • delta_indices: Chỉ số thời gian. [0] nghĩa là frame hiện tại, list(range(0, 16)) nghĩa là dự đoán 16 bước hành động tiếp theo
  • modality_keys: Tên các kênh dữ liệu (camera names, joint groups)
  • ActionRepresentation.RELATIVE: N1.6 ưu tiên relative actions — chuyển động so với vị trí hiện tại, không phải tọa độ tuyệt đối
  • EmbodimentTag.NEW_EMBODIMENT: Tag cho robot mới, model sẽ tự học adapter phù hợp

Chuyển đổi từ LeRobot dataset

Nếu bạn đã có dataset ở format LeRobot chuẩn, dùng script chuyển đổi:

uv run python scripts/data/convert_lerobot_to_groot.py \
    --input-path <LEROBOT_DATASET> \
    --output-path <GROOT_DATASET> \
    --embodiment-tag NEW_EMBODIMENT

Fine-Tuning

Lệnh fine-tune cơ bản

export NUM_GPUS=1

CUDA_VISIBLE_DEVICES=0 uv run python \
    gr00t/experiment/launch_finetune.py \
    --base-model-path nvidia/GR00T-N1.6-3B \
    --dataset-path ./my_robot_data \
    --embodiment-tag NEW_EMBODIMENT \
    --modality-config-path ./configs/so100_modality.json \
    --num-gpus $NUM_GPUS \
    --output-dir ./checkpoints/groot-so100 \
    --save-total-limit 5 \
    --save-steps 2000 \
    --max-steps 10000 \
    --use-wandb \
    --global-batch-size 32 \
    --color-jitter-params brightness 0.3 contrast 0.4 saturation 0.5 hue 0.08 \
    --dataloader-num-workers 4

Fine-tuning pipeline từ dữ liệu thu thập đến model triển khai

Giải thích tham số

Tham số Mô tả Giá trị khuyến nghị
--max-steps Tổng số bước training 2,000–30,000 tuỳ dataset
--global-batch-size Batch size tổng (chia đều qua GPUs) 32–64
--save-steps Lưu checkpoint mỗi N bước 2,000
--save-total-limit Giữ tối đa N checkpoints 5
--color-jitter-params Data augmentation cho ảnh Tuỳ điều kiện ánh sáng
--use-wandb Log metrics lên Weights & Biases Nên bật

Tips fine-tune hiệu quả

  1. Bắt đầu ít bước: 2,000 bước thường đủ để thấy kết quả ban đầu. Tăng dần nếu loss chưa hội tụ.

  2. Kết hợp dữ liệu thật + synthetic: NVIDIA báo cáo 40% cải thiện khi kết hợp synthetic data từ Isaac Sim với real data. Dùng GR00T-Dreams blueprint để sinh trajectory giả lập.

  3. Relative actions là mặc định: N1.6 hoạt động tốt nhất với relative actions. Chỉ dùng absolute nếu task yêu cầu (vd: đặt vật ở vị trí cố định).

  4. Freeze VLM khi data ít: Nếu dataset dưới 100 episodes, cân nhắc chỉ fine-tune DiT phần hành động, giữ VLM frozen.

Fine-tune qua LeRobot (API đơn giản hơn)

Nếu quen thuộc với Hugging Face LeRobot, bạn có thể fine-tune GR00T N1.6 qua API tích hợp:

lerobot-train \
    --policy.type=groot \
    --dataset.repo_id=<HF_DATASET> \
    --batch_size=32 \
    --steps=20000 \
    --policy.tune_diffusion_model=false \
    --output_dir=./outputs/groot-finetune

Tham số --policy.tune_diffusion_model=false giữ DiT frozen, chỉ fine-tune adapter — tiết kiệm VRAM và phù hợp cho dataset nhỏ.

Inference

Khởi động policy server

uv run python gr00t/eval/run_gr00t_server.py \
    --embodiment-tag NEW_EMBODIMENT \
    --model-path ./checkpoints/groot-so100/checkpoint-10000

Client code điều khiển robot

from gr00t.policy.server_client import PolicyClient

# Kết nối tới server
policy = PolicyClient(host="localhost", port=5555)

# Vòng lặp điều khiển
obs, info = env.reset()
while not done:
    action, info = policy.get_action(obs)
    obs, reward, done, info = env.step(action)

Standalone inference (test nhanh)

uv run python scripts/deployment/standalone_inference_script.py \
    --model-path nvidia/GR00T-N1.6-3B \
    --dataset-path demo_data/gr1.PickNPlace \
    --embodiment-tag GR1 \
    --traj-ids 0 1 2 \
    --inference-mode pytorch \
    --action-horizon 8

Tham số --action-horizon 8 nghĩa là model dự đoán 8 bước hành động mỗi lần inference. Giá trị lớn hơn (16) cho chuyển động mượt hơn nhưng phản ứng chậm hơn với thay đổi môi trường.

Kết quả Benchmark

Simulation (100 demos mỗi task)

Benchmark Tỷ lệ thành công
RoboCasa 32.1%
DexMG 66.5%
GR-1 50.0%
Trung bình 45.0%

Thực tế (robot GR-1, full data)

Task Tỷ lệ thành công
Pick-and-Place 82.0%
Articulated (mở tủ, ngăn kéo) 70.9%
Industrial (lắp ráp) 70.0%
Coordination (phối hợp 2 tay) 82.5%
Trung bình 76.8%

LIBERO Benchmark (qua LeRobot)

Benchmark GR00T LeRobot GR00T gốc
LIBERO-Spatial 82.0% 92.0%
LIBERO-Object 99.0% 92.0%
LIBERO-Long 82.0% 76.0%
Trung bình 87.0% 76.0%

Đặc biệt ấn tượng là kết quả LIBERO-Object đạt 99% — gần như hoàn hảo trong nhận dạng và thao tác với các vật thể khác nhau.

Cosmos Reason 2 — Bộ não suy luận

Ngoài phiên bản 2B tích hợp trong GR00T, NVIDIA phát hành Cosmos Reason 2 (8B) như model suy luận độc lập:

import transformers
import torch

model_name = "nvidia/Cosmos-Reason2-8B"
model = transformers.Qwen3VLForConditionalGeneration.from_pretrained(
    model_name,
    dtype=torch.float16,
    device_map="auto",
    attn_implementation="sdpa"
)
processor = transformers.AutoProcessor.from_pretrained(model_name)

messages = [
    {
        "role": "user",
        "content": [
            {"type": "video", "video": "file:///path/to/robot_task.mp4", "fps": 4},
            {"type": "text", "text": "Robot cần làm gì tiếp theo?"}
        ]
    }
]

inputs = processor.apply_chat_template(
    messages, tokenize=True,
    add_generation_prompt=True,
    return_dict=True, return_tensors="pt", fps=4
)
output = model.generate(**inputs.to(model.device), max_new_tokens=4096)

Cosmos Reason 2 hỗ trợ chain-of-thought reasoning với format <think>...</think><answer>...</answer>, cho phép model giải thích quá trình suy luận trước khi đưa ra câu trả lời. Model có khả năng:

  • Hiểu video dài với độ chính xác timestamp
  • Phát hiện vật thể và định vị 2D/3D
  • Suy luận vật lý (vật thể di chuyển, tương tác như thế nào)
  • Phân tách task phức tạp thành các bước nhỏ

Embodiments được hỗ trợ

GR00T N1.6 đã được pretrain và fine-tune cho nhiều loại robot:

Robot Loại Checkpoint
WidowX (Bridge) Cánh tay GR00T-N1.6-bridge
Google Robot (Fractal) Mobile manipulator Có sẵn
Galaxea R1 Pro Dual-arm GR00T-N1.6-BEHAVIOR1k
Unitree G1 Humanoid Có sẵn
SO-100 Cánh tay giá rẻ Có sẵn
DROID Multi-embodiment Có sẵn

Bạn có thể dùng các checkpoint này làm điểm khởi đầu cho fine-tuning thay vì base model, nếu robot của bạn tương tự.

Tổng kết

GR00T N1.6 với Cosmos Reason 2 đánh dấu bước tiến quan trọng trong foundation models cho robotics:

  • 3B tham số — đủ mạnh để xử lý đa task nhưng đủ nhỏ để chạy real-time trên edge
  • Dual-system — kết hợp suy luận ngôn ngữ (System 2) với sinh hành động nhanh (System 1)
  • Cross-embodiment — một model cho nhiều loại robot
  • Mã nguồn mở — cộng đồng có thể fine-tune và đóng góp

Nếu bạn đang làm việc với robot arm hay humanoid, GR00T N1.6 là lựa chọn mạnh mẽ để bắt đầu xây dựng hệ thống điều khiển dựa trên VLA. Với chỉ 100 demonstrations và vài giờ fine-tune trên 1 GPU, bạn đã có thể đạt kết quả ấn tượng.

Tài nguyên:


Bài viết liên quan

NT

Nguyễn Anh Tuấn

Robotics & AI Engineer. Building VnRobo — sharing knowledge about robot learning, VLA models, and automation.

Bài viết liên quan

NEWDeep Dive
Task Planning cho Manipulation trên Jetson Edge
jetsonmanipulationtask-planningedge-ainvidiacuTAMPcuMotionTensorRT

Task Planning cho Manipulation trên Jetson Edge

Hướng dẫn triển khai task planning cho robot manipulation trên NVIDIA Jetson AGX Orin 64GB — từ cuTAMP, cuMotion đến VLM inference.

14/4/202615 phút đọc
NEWTutorial
GEAR-SONIC: Whole-Body Control cho Humanoid Robot
humanoidwhole-body-controlnvidiareinforcement-learningmotion-trackingvr-teleoperationisaac-lab

GEAR-SONIC: Whole-Body Control cho Humanoid Robot

Hướng dẫn chi tiết GEAR-SONIC của NVIDIA — huấn luyện whole-body controller cho humanoid robot với dataset BONES-SEED và VR teleoperation.

13/4/202612 phút đọc
NEWTutorial
Genie Sim 3.0: Huấn luyện Humanoid với AGIBOT
simulationhumanoidisaac-simgenie-simagibotsim-to-realreinforcement-learning

Genie Sim 3.0: Huấn luyện Humanoid với AGIBOT

Hướng dẫn chi tiết dựng môi trường simulation với Genie Sim 3.0 — nền tảng open-source từ AGIBOT trên Isaac Sim để huấn luyện robot humanoid.

12/4/202611 phút đọc