aigr00tnvidiavlafine-tuninghumanoidegoscaleisaacdiffusion-transformer

Fine-Tune GR00T N1.7 với EgoScale: Từ Zero đến Deploy

Hướng dẫn fine-tune GR00T N1.7 của NVIDIA với EgoScale — 20.854 giờ video egocentric — từ cài đặt môi trường đến deploy policy trên robot humanoid.

Nguyễn Anh Tuấn21 tháng 4, 202612 phút đọc
Fine-Tune GR00T N1.7 với EgoScale: Từ Zero đến Deploy

Tháng 4/2026, NVIDIA công bố GR00T N1.7 — phiên bản mới nhất của dòng foundation model dành riêng cho robot humanoid. Điểm đột phá không nằm ở kích thước model (vẫn 3B parameters), mà ở cách nó được huấn luyện: EgoScale, một kỹ thuật pre-training trên hơn 20.000 giờ video egocentric của người, tạo ra scaling law đầu tiên cho khả năng thao tác khéo léo của robot.

Bài viết này là hướng dẫn thực hành đầy đủ — từ cài đặt môi trường, chuẩn bị dataset, fine-tuning trên GPU của bạn, đến deploy policy lên robot humanoid thực tế.

GR00T N1.7 là gì và tại sao EgoScale quan trọng?

Nếu bạn đã đọc bài trước về GR00T N1 và Isaac Lab, bạn biết rằng NVIDIA đã xây dựng kiến trúc "Action Cascade" hai tầng: một Vision-Language Model (VLM) đóng vai "bộ não" lập kế hoạch, và một Diffusion Transformer (DiT) đóng vai "tủy sống" sinh ra lệnh điều khiển motor chi tiết.

GR00T N1.7 giữ nguyên kiến trúc đó, nhưng nâng cấp hai thứ quan trọng:

  1. VLM backbone mới: Từ NVIDIA-Eagle + SmolLM-1.7B lên Cosmos-Reason2-2B — mạnh hơn về suy luận đa bước và phân tích ngữ cảnh phức tạp.
  2. EgoScale pre-training: Huấn luyện sơ bộ trên 20.854 giờ video egocentric người trước khi fine-tune trên data robot.

EgoScale: Con người dạy robot thao tác

Vấn đề cốt lõi của robotics manipulation là data scarcity (thiếu dữ liệu). Thu thập 1.000 giờ teleoperation trên robot thật rất tốn kém — cần người điều khiển, không gian, và robot không hỏng. Trong khi đó, con người đã và đang thao tác đồ vật hàng tỷ giờ mỗi ngày.

EgoScale khai thác điều này. Nghiên cứu — được công bố tại arXiv 2602.16710 bởi nhóm NVIDIA, UC Berkeley và University of Maryland — thu thập 20.854 giờ video egocentric (góc nhìn thứ nhất, từ camera đội đầu + camera cổ tay + dữ liệu găng tay theo dõi ngón tay), phân loại thành 20+ loại task từ sản xuất, bán lẻ, y tế đến môi trường gia đình.

Kiến trúc EgoScale: Video egocentric người → VLA pre-training → fine-tune robot → deploy

Phát hiện quan trọng nhất: lần đầu tiên trong robotics, nhóm nghiên cứu tìm thấy một scaling law rõ ràng cho dexterous manipulation. Mối quan hệ giữa lượng dữ liệu egocentric và validation loss là log-tuyến tính với R²=0.9983 — gần như hoàn hảo. Tăng từ 1.000 lên 20.000 giờ video người → success rate tăng hơn gấp đôi khi test trên robot với tay 22 bậc tự do (DoF).

Điều này có ý nghĩa sâu xa: robot học từ video người không chỉ là trick — đây là con đường có thể scale được và dự đoán được. Giống như scaling law của LLM (nhiều text → model ngôn ngữ tốt hơn theo cách dự đoán được), EgoScale mở ra con đường tương tự cho manipulation.

Kiến trúc chi tiết của GR00T N1.7

Hiểu kiến trúc giúp bạn biết nên fine-tune tầng nào và với data như thế nào.

Input: [RGB images] + [Language instruction] + [Robot proprioception]
         ↓
   System 2 (VLM): Cosmos-Reason2-2B
   - Mã hóa ảnh thành image tokens
   - Hiểu instruction ngôn ngữ
   - Sinh action tokens cấp cao (lập kế hoạch)
         ↓
   System 1 (DiT): 32-layer Diffusion Transformer
   - Nhận action tokens từ VLM
   - Nhận robot state hiện tại (joint positions, velocities, EEF pose)
   - Denoising → continuous action vectors (lệnh motor chi tiết)
         ↓
Output: [Joint positions / velocities cho từng DoF]

Tổng cộng: 3 tỷ parameters. Inference cần GPU có 16GB+ VRAM (ví dụ RTX 4090, L40). Fine-tuning cần 40GB+ VRAM (khuyến nghị H100 hoặc L40).

So với Diffusion Policy truyền thống, GR00T N1.7 khác ở chỗ System 2 cho phép model hiểu lệnh ngôn ngữ tự nhiên ("nhặt cái hộp đỏ và đặt vào khay bên phải") thay vì chỉ điều kiện hóa trên một embedding cố định.

Môi trường cài đặt

Yêu cầu hệ thống

Thành phần Tối thiểu Khuyến nghị
GPU 1× RTX 4090 (16GB) 1× L40/H100 (40-80GB)
RAM 32GB 64GB
Disk 100GB SSD 500GB NVMe
Python 3.10 3.10
OS Ubuntu 22.04 Ubuntu 22.04
CUDA 12.1+ 12.4

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

# Clone với submodules (quan trọng!)
git clone --recurse-submodules https://github.com/NVIDIA/Isaac-GR00T
cd Isaac-GR00T

# Cài ffmpeg (cần cho video processing)
sudo apt-get update && sudo apt-get install -y ffmpeg

# Cài uv (package manager nhanh hơn pip)
curl -LsSf https://astral.sh/uv/install.sh | sh
source ~/.bashrc  # hoặc source ~/.zshrc

# Sync môi trường Python 3.10
uv sync --python 3.10

# Verify cài đặt thành công
uv run python -c "import gr00t; print('GR00T installed successfully')"

Nếu bạn muốn dùng trên Jetson (robot deployment), NVIDIA cung cấp script riêng:

bash scripts/deployment/jetson/install_deps.sh

Bước 2: Download model weights

Model được host trên HuggingFace. Bạn cần tài khoản HF và chấp nhận license:

# Login HuggingFace
uv run huggingface-cli login

# Download model (tự động khi chạy training/inference lần đầu)
# Hoặc download thủ công:
uv run huggingface-cli download nvidia/GR00T-N1.7-3B

Lưu ý license: Code repo dùng Apache 2.0 (tự do thương mại). Model weights dùng NVIDIA Open Model License — cho phép triển khai thương mại với điều kiện không dùng để huấn luyện model cạnh tranh với NVIDIA.

Chuẩn bị dataset

Định dạng LeRobot v2

GR00T N1.7 dùng định dạng dataset của LeRobot (HuggingFace) với một file bổ sung là modality.json. Cấu trúc thư mục:

my_robot_dataset/
├── meta/
│   ├── info.json           # Thông tin dataset (n_episodes, fps, features...)
│   ├── episodes.jsonl      # Metadata từng episode
│   ├── tasks.jsonl         # Danh sách task descriptions
│   └── modality.json       # GR00T-specific: ánh xạ camera/joint sang model input
├── data/
│   └── chunk-000/
│       ├── episode_000000.parquet
│       ├── episode_000001.parquet
│       └── ...
└── videos/
    └── chunk-000/
        ├── observation.images.cam_high/
        │   ├── episode_000000.mp4
        │   └── ...
        └── observation.images.cam_wrist/
            └── ...

File modality.json là phần GR00T-specific, khai báo camera nào dùng cho VLM và joint nào dùng cho proprioception:

{
  "observation": {
    "images": {
      "cam_high": {"original_key": "observation.images.cam_high"},
      "cam_wrist": {"original_key": "observation.images.cam_wrist"}
    },
    "state": {
      "left_arm": {
        "original_key": "observation.state",
        "start": 0, "end": 7,
        "dtype": "float32"
      },
      "right_arm": {
        "original_key": "observation.state",
        "start": 7, "end": 14,
        "dtype": "float32"
      }
    }
  },
  "action": {
    "left_arm": {
      "original_key": "action",
      "start": 0, "end": 7,
      "dtype": "float32"
    },
    "right_arm": {
      "original_key": "action",
      "start": 7, "end": 14,
      "dtype": "float32"
    }
  }
}

Thu thập dữ liệu teleop

Nếu bạn đang dùng robot thật (Unitree G1, SO-ARM100, ALOHA, v.v.), repo cung cấp sẵn script teleop tích hợp với LeRobot:

# Thu thập data với cánh tay SO-ARM100
uv run python scripts/data_collection/record_dataset.py \
    --robot-path lerobot/configs/robot/so100.yaml \
    --repo-id your_hf_username/my_robot_task \
    --tags gr00t fine-tune \
    --num-episodes 50 \
    --push-to-hub

# Visualize data đã thu thập
uv run python scripts/data_collection/visualize_dataset.py \
    --dataset-path ./data/my_robot_task

Bao nhiêu episodes là đủ? NVIDIA khuyến nghị bắt đầu với 50-200 episodes cho một task đơn giản. Với task phức tạp (bimanual, nhiều bước), cần 500+ episodes. Điểm mạnh của GR00T N1.7 là do EgoScale đã tạo sẵn motor prior mạnh, nên cần ít data robot hơn so với train từ đầu.

Fine-Tuning

Fine-tuning pipeline: Dataset → DataLoader → GR00T N1.7 → Trained policy → Robot

Single GPU (RTX 4090 / A100 40GB)

# Kích hoạt môi trường
source .venv/bin/activate

# Fine-tune trên task nhặt đồ vật (pick-and-place)
CUDA_VISIBLE_DEVICES=0 uv run python gr00t/experiment/launch_finetune.py \
    --base-model-path nvidia/GR00T-N1.7-3B \
    --dataset-path /path/to/your/dataset \
    --embodiment-tag NEW_EMBODIMENT \
    --modality-config-path /path/to/modality_config.py \
    --num-gpus 1 \
    --output-dir /tmp/gr00t_finetune_output \
    --max-steps 2000 \
    --global-batch-size 32 \
    --state-dropout-prob 0.8

Giải thích các tham số quan trọng:

  • --embodiment-tag: Nhãn định danh embodiment của bạn. Nếu dùng embodiment có sẵn (UNITREE_G1, LIBERO_PANDA, OXE_WIDOWX...) thì dùng tên đó. Nếu robot mới → đặt tên tùy ý, ví dụ MY_CUSTOM_ARM.
  • --max-steps 2000: Cho task đơn giản, 2000 steps thường đủ. Task phức tạp: 5000-10000 steps.
  • --global-batch-size 32: Tối đa hóa batch size theo VRAM của bạn. RTX 4090 có thể chạy 32; H100 80GB có thể chạy 128+.
  • --state-dropout-prob 0.8: Xác suất drop proprioceptive state trong training. Giữ mặc định 0.8 để model không phụ thuộc quá nhiều vào state. Nếu task của bạn cần state chính xác (ví dụ force control), giảm xuống 0.3-0.5.

Multi-GPU (8× H100 — cho dataset lớn)

uv run torchrun \
    --nproc_per_node=8 \
    --master_port=29500 \
    gr00t/experiment/launch_finetune.py \
    --base-model-path nvidia/GR00T-N1.7-3B \
    --dataset-path /path/to/large_dataset \
    --embodiment-tag UNITREE_G1 \
    --num-gpus 8 \
    --max-steps 5000 \
    --global-batch-size 256

Theo dõi training

GR00T N1.7 tích hợp với Weights & Biases (W&B) để monitor loss:

# Cài W&B nếu chưa có
uv pip install wandb
wandb login

# Thêm vào lệnh train:
CUDA_VISIBLE_DEVICES=0 uv run python gr00t/experiment/launch_finetune.py \
    ... \
    --use-wandb \
    --wandb-project gr00t-finetune \
    --wandb-run-name my-pick-place-v1

Metrics cần theo dõi:

  • train/action_loss: Loss của DiT action prediction. Cần giảm ổn định.
  • train/vlm_loss: Loss của VLM. Thường giảm nhanh hơn.
  • Nếu loss không giảm sau 500 steps → tăng learning rate hoặc kiểm tra data format.

Variance giữa các run: NVIDIA cảnh báo có thể thấy 5-6% variance giữa các lần chạy do data augmentation ngẫu nhiên. Đây là bình thường — chạy 2-3 run và lấy kết quả tốt nhất.

Inference và Deploy

Test policy trên dataset (offline evaluation)

Trước khi chạy trên robot thật, luôn test trên demo data trước:

# Zero-shot inference (không fine-tune)
uv run python scripts/deployment/standalone_inference_script.py \
    --model-path nvidia/GR00T-N1.7-3B \
    --dataset-path demo_data/droid_sample \
    --embodiment-tag OXE_DROID_RELATIVE_EEF_RELATIVE_JOINT \
    --traj-ids 1 2 3 \
    --inference-mode pytorch \
    --action-horizon 8

# Sau khi fine-tune, test checkpoint:
uv run python scripts/deployment/standalone_inference_script.py \
    --model-path /tmp/gr00t_finetune_output/checkpoint-2000 \
    --dataset-path /path/to/your/dataset \
    --embodiment-tag NEW_EMBODIMENT \
    --traj-ids 1 2 3

Deploy trên robot thật (server-client mode)

GR00T N1.7 dùng kiến trúc server-client để tách policy inference (GPU) khỏi robot control loop (CPU/real-time):

Trên máy có GPU (Policy Server):

# Khởi động inference server
uv run python gr00t/eval/run_gr00t_server.py \
    --embodiment-tag UNITREE_G1 \
    --model-path /tmp/gr00t_finetune_output/checkpoint-2000 \
    --port 5555

Trên robot controller (Policy Client):

from gr00t.policy.server_client import PolicyClient
import numpy as np

# Kết nối đến inference server
policy = PolicyClient(host="192.168.1.100", port=5555)

# Control loop
obs, info = env.reset()
for step in range(1000):
    # Gửi observation, nhận action
    action, info = policy.get_action(obs)
    
    # Execute action trên robot
    obs, reward, done, truncated, info = env.step(action)
    
    if done or truncated:
        break

Latency thực tế: Với 4 denoising steps (mặc định), GR00T N1.7 đạt ~20-30ms per action trên H100, cho phép control loop 30-50Hz — đủ cho hầu hết manipulation tasks.

Kết quả và Benchmark

EgoScale vs. no pretraining

Setting Task success rate
No pretraining (baseline) 38%
GR00T N1.6 (robot data only) 52%
GR00T N1.7 + EgoScale (1k giờ) 61%
GR00T N1.7 + EgoScale (20k giờ) 79%

Kết quả trên robot tay 22-DoF, averaged over 20 dexterous manipulation tasks.

Mức tăng 54% so với baseline (từ 38% lên 58.5% trung bình, với đỉnh điểm 79% khi dùng full 20k giờ) chứng minh EgoScale pre-training có giá trị thực sự — không phải chỉ là thủ thuật marketing.

So sánh với N1.6

GR00T N1.6 GR00T N1.7
VLM backbone NVIDIA-Eagle + SmolLM 1.7B Cosmos-Reason2-2B
Pre-training data Robot teleoperation + web + EgoScale 20k h egocentric
Dexterous task avg ~52% ~79% (full EgoScale)
Commercial license
Backward compatible ✅ (drop-in replacement)
Fine-tune pipeline Isaac Lab LeRobot v2

Nếu bạn đã có pipeline fine-tune GR00T N1.6, N1.7 là drop-in replacement — không cần sửa code, chỉ đổi model-path.

Tips & Pitfalls

Khi fine-tuning không hội tụ

  1. Kiểm tra modality.json — lỗi phổ biến nhất. Sai index start/end của joint → action target sai hoàn toàn.
  2. Kiểm tra video quality — frame rate phải khớp với fps trong info.json. Video bị corrupt → loss NaN.
  3. Giảm learning rate — default thường ổn, nhưng nếu loss tăng/dao động → thêm --learning-rate 1e-5.
  4. Tăng số episodes — nếu dataset < 30 episodes, model có thể overfit và không generalize.

Sim-to-Real Gap

Kiểm tra policy trong simulation trước khi deploy trên robot thật

GR00T N1.7 hỗ trợ fine-tune trên data sinh từ Isaac Sim (simulation). Workflow được khuyến nghị:

  1. Thu thập data teleoperation trong Isaac Sim với domain randomization
  2. Fine-tune N1.7 trên sim data
  3. Evaluate trong sim
  4. Thu thập thêm 10-20% data thật để bridge sim-to-real gap
  5. Fine-tune lần 2 trên mixed data (90% sim + 10% real)
  6. Deploy

So sánh chi tiết về sim-to-real pipeline, xem thêm Loco-Series 7: Sim-to-Real Locomotion.

Kết luận

GR00T N1.7 với EgoScale đánh dấu một bước ngoặt thực sự trong robotics:

  • Scaling law cho dexterity — lần đầu chúng ta có bằng chứng toán học rằng nhiều video người → robot khéo léo hơn theo cách dự đoán được.
  • Commercial-ready out-of-the-box — Apache 2.0 code + NVIDIA Open Model License cho phép triển khai sản xuất ngay.
  • Ít data robot hơn — nhờ EgoScale pre-training tạo motor prior mạnh, bạn chỉ cần 50-200 episodes thay vì hàng nghìn để fine-tune task mới.

Tuy nhiên, vẫn còn thách thức: cần GPU 40GB+ để fine-tune (chưa phù hợp máy tính cá nhân), và khoảng cách sim-to-real vẫn đòi hỏi careful engineering.

Nếu bạn đang xây dựng ứng dụng manipulation cho robot humanoid — từ lắp ráp linh kiện đến y tế, từ logistics đến gia đình — GR00T N1.7 là foundation model mạnh nhất hiện có để bắt đầu.


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.

Khám phá VnRobo

Bài viết liên quan

NEWTutorial
VLA-Adapter: Train VLA 0.5B với 9.6GB VRAM, 99.2% LIBERO
vlavla-adapteropenhelixliberoqwen2.5lorafrankaur5manipulation

VLA-Adapter: Train VLA 0.5B với 9.6GB VRAM, 99.2% LIBERO

Hướng dẫn VLA-Adapter từ OpenHelix — train VLA 0.5B trên GPU consumer 8 giờ, đạt SOTA LIBERO, deploy thật trên Franka/UR-5.

13/5/202610 phút đọc
NEWTutorial
WholeBodyVLA Tutorial: Teleop → Train → Deploy Humanoid
wholebodyvlavlahumanoidloco-manipulationiclr-2026agibot-x2teleoprl

WholeBodyVLA Tutorial: Teleop → Train → Deploy Humanoid

ICLR 2026 — pipeline thực chiến từ thu thập teleop, train unified latent VLA đến deploy whole-body loco-manipulation trên AgiBot X2.

11/5/202611 phút đọc
NEWTutorial
Booster Gym ICRA 2026: Train Humanoid T1 Sim-to-Real với Isaac Gym
humanoidisaac-gymreinforcement-learningsim2realbooster-t1icra-2026

Booster Gym ICRA 2026: Train Humanoid T1 Sim-to-Real với Isaac Gym

Hướng dẫn chi tiết Booster Gym — RL framework end-to-end open-source train humanoid Booster T1 walking từ teleop đến deploy thực tế.

6/5/202611 phút đọc