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:
- 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.
- 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.
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
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ụ
- 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.
- Kiểm tra video quality — frame rate phải khớp với
fpstronginfo.json. Video bị corrupt → loss NaN. - Giảm learning rate — default thường ổn, nhưng nếu loss tăng/dao động → thêm
--learning-rate 1e-5. - Tăng số episodes — nếu dataset < 30 episodes, model có thể overfit và không generalize.
Sim-to-Real Gap
GR00T N1.7 hỗ trợ fine-tune trên data sinh từ Isaac Sim (simulation). Workflow được khuyến nghị:
- Thu thập data teleoperation trong Isaac Sim với domain randomization
- Fine-tune N1.7 trên sim data
- Evaluate trong sim
- Thu thập thêm 10-20% data thật để bridge sim-to-real gap
- Fine-tune lần 2 trên mixed data (90% sim + 10% real)
- 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.