VnRoboVnRobo
Về chúng tôiBảng giáBlogLiên hệ
🇺🇸ENĐăng nhậpDùng thử miễn phí
🇺🇸EN
VnRobo logoVnRobo logo

Hạ tầng AI cho robot công nghiệp thế hệ mới.

Sản phẩm

  • Tính năng
  • Bảng giá
  • Kiến thức
  • Dịch vụ

Công ty

  • Về chúng tôi
  • Blog
  • Liên hệ

Pháp lý

  • Chính sách bảo mật
  • Điều khoản sử dụng

© 2026 VnRobo. Bảo lưu mọi quyền.

Được tạo với♥tại Việt Nam
VnRoboVnRobo
Về chúng tôiBảng giáBlogLiên hệ
🇺🇸ENĐăng nhậpDùng thử miễn phí
🇺🇸EN
  1. Trang chủ
  2. Blog
  3. Fine-tune MolmoAct2 trên SO-101 với LeRobot v0.6
wholebody-vlamolmoact2so-101lerobotvlamanipulationlorafine-tuningallen-ai

Fine-tune MolmoAct2 trên SO-101 với LeRobot v0.6

Fine-tune MolmoAct2 (VLA vượt π0.5) trên SO-101 với LoRA và LeRobot v0.6 — chạy được trên GPU 24GB, step-by-step từ đầu.

Nguyễn Anh Tuấn23 tháng 8, 202613 phút đọc
Fine-tune MolmoAct2 trên SO-101 với LeRobot v0.6

Tháng 5/2026, Allen Institute for AI (Ai2) phát hành MolmoAct2 — một Vision-Language-Action model open-source mới cho robot manipulation. Kết quả đáng chú ý: trên thử nghiệm real-world với Franka Emika trong điều kiện out-of-distribution, MolmoAct2 đạt 87.1% thành công, trong khi π0.5 của Physical Intelligence chỉ đạt 45.2% — chênh nhau gần gấp đôi. Điều đó không có nghĩa MolmoAct2 thay thế mọi thứ, nhưng nó trả lời một câu hỏi cụ thể: liệu một VLA open-source có thể reach parity với frontier proprietary model trên manipulation thực tế?

Câu trả lời, theo benchmark của Ai2, là có.

Bài viết này là hướng dẫn thực hành fine-tune MolmoAct2 trên cánh tay SO-101 bằng LoRA với LeRobot v0.6 — pipeline chạy được trên một GPU 24GB (RTX 3090 / 4090 / A10G) mà không cần cluster. Chúng ta sẽ đi từ ý tưởng paper, kiến trúc, cách cài đặt, thu thập dữ liệu, training cho đến inference và đánh giá.

Nếu bạn chưa quen LeRobot, hãy đọc trước LeRobot framework: VLA cơ bản từ đầu rồi quay lại đây.

Khuyến nghị công cụ

Stack train/deploy cho VLA

Train trên cloud/workstation, deploy bản tối ưu xuống Jetson hoặc robot computer.

Cloud GPU for VLA / policy training Dùng cho imitation learning, diffusion policy, RL và fine-tuning model robotics. Xem cloud GPU → NVIDIA Jetson Orin NX / Orin Nano Máy deploy edge cho perception, logging và inference đã tối ưu. Xem Jetson → Hugging Face / robotics dataset hosting Lưu dataset, checkpoint và model card để workflow LeRobot/VLA dễ chia sẻ hơn. Xem platform →

MolmoAct2 là gì và tại sao quan trọng?

MolmoAct2 là bản kế nhiệm của MolmoAct (Ai2, 2024). Paper đầy đủ: MolmoAct2: Action Reasoning Models for Real-world Deployment, arXiv tháng 5/2026, 29 tác giả từ Ai2 và Đại học Washington.

Điểm khác biệt cốt lõi so với các VLA trước: MolmoAct2 không chỉ tối ưu trên benchmark simulation như LIBERO, mà tập trung rõ ràng vào real-world robustness — khả năng tổng quát khi môi trường và vật thể thay đổi so với dữ liệu train.

Benchmark so sánh

Benchmark MolmoAct2 π0.5 GR00T N1.7
LIBERO average 97.2% 96.9% 97.0%
LIBERO (với -Think) 98.1% — —
MolmoSpaces DROID zero-shot 37.7% 34.5% —
MolmoBot sim (7 tasks) 20.6% 10.0% —
Real-world Franka OOD 87.1% 45.2% —
RoboEval 44.3% 40.5% —

LIBERO thì gần bằng nhau cả ba. Nhưng real-world OOD mới là thử thách thật sự — môi trường thay đổi ánh sáng, góc camera, vị trí vật thể, vật thể chưa thấy trong train. MolmoAct2 đạt 87.1% trong điều kiện đó; π0.5 chỉ 45.2%. Đây là lý do Ai2 claim model này "vượt π0.5" một cách có cơ sở.

Một điểm cũng quan trọng: Ai2 public toàn bộ — checkpoint, training code, dataset, và còn mở checkpoint đã được fine-tune sẵn trên SO-100/101. Không có black box, không có API-only.

Kiến trúc: bốn mảnh ghép quan trọng

Kiến trúc MolmoAct2 — nguồn: repo allenai/molmoact2
Kiến trúc MolmoAct2 — nguồn: repo allenai/molmoact2

MolmoAct2 được xây từ bốn thành phần, mỗi thành phần giải quyết một vấn đề riêng.

1. Molmo2-ER — Backbone "Embodied Reasoning"

Backbone không phải Molmo 7B như phiên bản gốc — thay vào đó là Molmo2-ER, xây trên Qwen3-4B. Số tham số nhỏ hơn nhưng được train theo công thức hai giai đoạn đặc biệt:

  • Stage 1 (20K steps): Chuyên biệt hóa embodied reasoning — spatial reasoning, pointing, object grounding
  • Stage 2 (1.5K steps): Interleave dữ liệu embodied + general để tránh catastrophic forgetting

Kết quả: 63.8/100 trên 13 embodied-reasoning benchmarks — vượt GPT-5, Gemini Robotics ER-1.5, và Qwen3-VL-8B. Backbone hiểu không gian tốt hơn, dẫn đến manipulation chính xác hơn.

2. OpenFAST — Action Tokenizer

OpenFAST là action tokenizer mở — map 1 giây trajectory liên tục thành 2048-token vocabulary. Được train trên 1 triệu sequence từ 5 embodiment khác nhau (SO-100/101, YAM bimanual, DROID Franka, BC-Z, BridgeData V2).

Cơ chế: dùng frequency-domain transform + byte-pair encoding để compress action trajectory thành token sequence. Điều này cho phép dùng autoregressive prediction như language model — đơn giản, scale tốt, không cần action head phức tạp.

3. Two-Phase Training: Discrete → Continuous

MolmoAct2 train theo hai pha:

Phase 1: Pre-training (200K steps)
  → Autoregressive VLA predict OpenFAST tokens (discrete)
  → Học "ngôn ngữ" của action

Phase 2: Post-training (100K steps)  
  → Gắn DiT-style flow-matching action expert
  → Bridge bằng KV-cache conditioning (no-copy)
  → Output: continuous action trajectory

Điểm mấu chốt: KV-cache conditioning bridge — thay vì thay thế backbone bằng action head, DiT expert đọc KV-cache của VLM trực tiếp, không cần copy tensor, overhead gần như bằng không.

4. MolmoAct2-Think — Reasoning Nhanh hơn 37 lần

Biến thể -Think tái dự đoán depth token chỉ cho vùng scene đã thay đổi (grid 10×10, 128 depth codes, ngưỡng cosine similarity 0.996). Khi robot đang thực thi action đơn giản, -Think bỏ qua reasoning — chỉ reasoning lại khi cần thiết. Kết quả: nhanh hơn 37x so với predecessor, đạt 98.1% trên LIBERO với -Think.

Dataset MolmoAct2-SO100_101 — Không Cần Thu Thập Từ Đầu

Ai2 public ba bộ dataset lớn:

Dataset Thời lượng Số episodes Nguồn
MolmoAct2-BimanualYAM 720h 34,500 Bộ bimanual lớn nhất open-source
MolmoAct2-SO100_101 184h 38,059 377 contributor từ cộng đồng
MolmoAct2-DROID — 74,604 Franka episodes tái chú thích

Dataset SO100_101 qua 4-stage quality filtering: loại bỏ episode thiếu ngôn ngữ, kiểm tra action range, lọc episode quá ngắn/dài, và dedup. Đây là điểm xuất phát tốt nếu bạn muốn fine-tune cho task mới trên SO-101 mà chưa có đủ dữ liệu riêng.

Checkpoint đã train sẵn: allenai/MolmoAct2-SO100_101 — dùng zero-shot ngay trên SO-101 mà không cần train thêm.

Hardware: SO-101 và Yêu Cầu GPU

SO-101 Robot Arm

SO-101 Follower Arm — nguồn: HuggingFace LeRobot docs
SO-101 Follower Arm — nguồn: HuggingFace LeRobot docs

SO-101 là thế hệ thứ hai của SO-100, do TheRobotStudio phát triển cùng HuggingFace. Repo: TheRobotStudio/SO-ARM100.

Thông số Chi tiết
Bậc tự do 6 DOF
Servo Feetech STS3215 (bus servo)
Torque tối đa 30 kg.cm @ 12V
Encoder 12-bit magnetic
Tầm với ~500mm
Payload ~500g
Giao tiếp USB serial

Setup cơ bản: một cánh tay follower (robot thực thi) + một cánh tay leader (bạn điều khiển tay). Follower ghi lại trajectory của leader trong quá trình teleop.

Chi phí: Tự lắp ráp (3D print + mua phụ kiện) khoảng $100–130 mỗi cánh tay; bộ hai cánh tay leader+follower khoảng $230. Nếu mua kit từ bên thứ ba thì $199–500 tùy nguồn.

Cải thiện so với SO-100:

  • Dây dẫn được route gọn hơn, không còn nguy cơ đứt ở joint 3
  • Dễ lắp hơn — không cần tháo gear trong quá trình build
  • Gear ratio tối ưu hơn cho leader arm

GPU yêu cầu

Chế độ VRAM cần Thời gian/step
Inference only (bf16) ~12 GB —
LoRA fine-tune (bf16 + gradient checkpointing) ~20–22 GB ~0.8s/step
Full fine-tune (FFT) 80+ GB cần multi-GPU

RTX 3090 (24GB) hoặc RTX 4090 (24GB) đủ cho LoRA. Với A10G (24GB) trên cloud cũng tốt.

Cài Đặt Môi Trường

Yêu cầu

  • Python 3.10 hoặc 3.11
  • CUDA 12.1+ (nvidia-smi kiểm tra)
  • uv (package manager — nhanh hơn pip đáng kể)

LeRobot v0.6 với extra molmoact2

# Clone và cài đặt LeRobot
git clone https://github.com/huggingface/lerobot.git
cd lerobot

# Cài đặt với extra molmoact2 (bao gồm flash-attention, accelerate, peft)
uv sync --locked --extra molmoact2

# Kích hoạt venv
source .venv/bin/activate

# Kiểm tra
python -c "from lerobot.policies.molmoact2 import MolmoAct2Policy; print('OK')"

--extra molmoact2 kéo thêm flash-attn, peft, và accelerate — ba thứ cần thiết cho LoRA fine-tuning.

Kiểm tra SO-101 kết nối

Cắm SO-101 follower vào USB, chạy:

python -m lerobot.scripts.find_motors_bus_port

Output trả về port (thường /dev/ttyACM0 trên Linux). Lưu lại dùng cho bước calibration.

Calibrate SO-101

python -m lerobot.scripts.control_robot \
  --robot.type=so101_follower \
  --robot.port=/dev/ttyACM0 \
  --control.type=calibrate

Script sẽ hướng dẫn move từng joint đến vị trí extreme để record offset. Calibration lưu vào ~/.cache/lerobot/calibration/so101_follower.json.

Thu Thập Dữ Liệu với Teleop

Teleop là bước thu thập demo bằng cách bạn điều khiển leader arm, follower arm ghi lại trajectory:

python -m lerobot.scripts.control_robot \
  --robot.type=so101_follower \
  --robot.port=/dev/ttyACM0 \
  --teleop.type=so101_leader \
  --teleop.port=/dev/ttyACM1 \
  --control.type=record \
  --dataset.repo_id=${HF_USER}/my_so101_task \
  --dataset.task="pick up the red cube and place it in the blue box" \
  --dataset.num_episodes=50 \
  --dataset.fps=30

Mỗi episode gồm: observations (camera RGB + proprioception state) + actions (joint positions). Dataset tự động upload lên HuggingFace Hub khi xong.

Mẹo thu thập dữ liệu tốt:

  • 50–100 episodes đủ cho task đơn giản (pick-and-place)
  • Thay đổi vị trí vật thể, ánh sáng nhẹ, góc camera giữa các episode
  • Thực hiện chậm và mượt — tránh jerk đột ngột
  • Xóa episode thất bại ngay (không để trong dataset)

Nếu bạn muốn dùng dataset có sẵn: MolmoAct2-SO100_101 đã có 38k episodes trên HuggingFace.

Bài SO-101 sim-to-real với Isaac Lab có hướng dẫn thu thập dữ liệu synthetic để tăng thêm diversity.

Fine-tune với LoRA

LoRA là gì và tại sao dùng thay vì Full Fine-tune?

LoRA (Low-Rank Adaptation) không train toàn bộ weight của model — nó thêm một cặp ma trận nhỏ (rank thấp) vào các layer attention và MLP. Ưu điểm:

  • Chỉ train ~1–5% tổng tham số → VRAM giảm đáng kể
  • Tránh catastrophic forgetting (backbone vẫn nhớ general representation)
  • Kết quả thường tốt hơn FFT trên dataset nhỏ (<200 episodes)

MolmoAct2 có ba chế độ train (--policy.train_mode_vlm):

  • lora — train LoRA adapter trên VLM, action expert train đầy đủ (khuyến nghị cho dataset nhỏ)
  • fft — full fine-tuning VLM (cần 80GB+ VRAM hoặc multi-GPU)
  • freeze — đóng băng VLM, chỉ train action expert

Với dataset <200 episodes và một GPU 24GB, dùng lora.

Lệnh Fine-tune LoRA (Single GPU)

accelerate launch \
  --num_processes=1 \
  --mixed_precision=bf16 \
  -m lerobot.scripts.lerobot_train \
  --policy.type=molmoact2 \
  --policy.checkpoint_path=allenai/MolmoAct2 \
  --policy.train_mode_vlm=lora \
  --policy.dtype=bfloat16 \
  --policy.gradient_checkpointing=true \
  --policy.action_mode=continuous \
  --policy.num_flow_timesteps=8 \
  --dataset.repo_id=${HF_USER}/my_so101_task \
  --batch_size=4 \
  --steps=10000 \
  --output_dir=outputs/molmoact2_so101_lora \
  --save_steps=1000

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

Flag Giá trị Lý do
train_mode_vlm=lora lora LoRA trên VLM, action expert train full
dtype=bfloat16 bf16 Tiết kiệm VRAM, giảm từ 24GB → ~12GB VLM
gradient_checkpointing=true true Giảm activation memory, cần cho 24GB
action_mode=continuous continuous Dùng flow-matching DiT output (tốt hơn discrete)
num_flow_timesteps=8 8 Số denoising step — balance quality/speed
batch_size=4 4 Tối đa cho 24GB với gradient checkpointing

Learning rates mặc định:

  • VLM LoRA LR: 5e-5
  • Action expert LR: 5e-5 (override bằng --policy.optimizer_action_expert_lr)

Theo dõi Training

# Loss curve
tensorboard --logdir=outputs/molmoact2_so101_lora

# VRAM usage
watch -n2 nvidia-smi --query-gpu=memory.used,memory.free --format=csv

Loss giảm ổn định trong 3,000–5,000 steps đầu. Sau đó thường plateau. Nếu loss dao động mạnh, thử giảm LR xuống 2e-5.

Upload Checkpoint

python -m lerobot.scripts.push_policy \
  --policy.path=outputs/molmoact2_so101_lora \
  --hub.repo_id=${HF_USER}/molmoact2-so101-task

Zero-shot với Checkpoint Có Sẵn

Nếu task của bạn gần với các task có trong dataset SO100_101 (pick-and-place đơn giản), thử zero-shot trước khi fine-tune:

lerobot-rollout \
  --policy.path=lerobot/MolmoAct2-SO100_101-LeRobot \
  --robot.type=so100_follower \
  --robot.port=/dev/ttyACM0 \
  --task="pick up the red cube" \
  --duration=30

Zero-shot hoạt động tốt khi: camera setup gần với training data, task language rõ ràng, vật thể quen thuộc. Nếu thành công rate <60%, thu thập demo và fine-tune với LoRA.

Inference và Đánh Giá

SO-100/101 demo — nguồn: repo allenai/molmoact2
SO-100/101 demo — nguồn: repo allenai/molmoact2

Rollout với Policy đã Fine-tune

lerobot-rollout \
  --policy.path=${HF_USER}/molmoact2-so101-task \
  --robot.type=so101_follower \
  --robot.port=/dev/ttyACM0 \
  --task="pick up the red cube and place it in the blue box" \
  --num_episodes=20 \
  --output_dir=eval_results/

--num_episodes=20 đánh giá 20 lần rồi báo success rate. Đủ để có số liệu sơ bộ.

Đánh giá tự động với lerobot-eval

LeRobot v0.6 thêm lerobot-eval CLI với 6 simulation benchmark — LIBERO-plus là phù hợp nhất cho manipulation:

lerobot-eval \
  --policy.path=${HF_USER}/molmoact2-so101-task \
  --env.type=libero \
  --eval.num_episodes=20 \
  --eval.task_suite=libero_spatial

Điều chỉnh số denoising steps

num_flow_timesteps=8 là mặc định, balance tốt giữa quality và speed. Thử:

  • 4 steps — nhanh hơn 2x, chấp nhận được cho task đơn giản
  • 16 steps — chậm hơn 2x, đôi khi cải thiện task phức tạp

Troubleshooting Phổ Biến

CUDA OOM khi training:

# Giảm batch size
--batch_size=2
# Hoặc bật gradient accumulation
--gradient_accumulation_steps=4

Loss không giảm sau 2000 steps:

  • Kiểm tra dataset format — đảm bảo action dimension khớp với SO-101 (6 joints + gripper = 7)
  • Thử tăng LR lên 1e-4
  • Kiểm tra normalization — dữ liệu phải được normalize theo range của SO-101

Robot move không mượt trong inference:

  • Giảm num_flow_timesteps từ 8 xuống 4 (giảm latency)
  • Kiểm tra camera framerate — LeRobot mặc định 30fps, SO-101 cần đúng FPS trong training
  • Bật --policy.use_cache=true để tái dùng KV-cache giữa các timestep

Serial port not found:

ls /dev/ttyACM* /dev/ttyUSB*
# Thêm user vào group dialout
sudo usermod -a -G dialout $USER

Để hiểu thêm về PEFT deployment sau khi fine-tune xong, đọc PEFT cho VLA: LoRA deploy trên robot thật.

So Sánh MolmoAct2 với DM0.5/OpenDM

Cả hai đều hỗ trợ SO-101 + LoRA + LeRobot. Khác biệt chính:

Tiêu chí MolmoAct2 DM0.5/OpenDM
Backbone Molmo2-ER (Qwen3-4B) Proprietary
Action tokenizer OpenFAST (2048 tokens, mở) Đóng
Dataset SO-101 có sẵn 38k episodes Ít hơn
Real-world OOD benchmark 87.1% Franka Chưa công bố
-Think variant Có (37x speedup) Không

MolmoAct2 mạnh về real-world robustness và openness; DM0.5 mạnh về out-of-the-box setup. Bài Fine-tune DM0.5/OpenDM trên SO-101 có pipeline tương tự nếu bạn muốn so sánh.

Tổng Kết

MolmoAct2 đáng thử vì ba lý do cụ thể: (1) nó open-source hoàn toàn kể cả training code và dataset, (2) kết quả real-world OOD vượt π0.5 đáng kể, và (3) LeRobot v0.6 làm cho LoRA fine-tune trên 24GB GPU trở nên đơn giản với một lệnh duy nhất. Nếu bạn có SO-101 và một GPU đủ mạnh, toàn bộ pipeline từ thu thập dữ liệu đến inference có thể chạy trong một ngày.

Bước tiếp theo: thêm reward model để đánh giá trajectory tự động, xem LeRobot v0.6: Reward Models và lerobot-eval CLI.


Bài Viết Liên Quan

  • LeRobot framework: VLA cơ bản từ đầu — nền tảng trước khi fine-tune
  • Fine-tune DM0.5/OpenDM trên SO-101 — VLA khác trên cùng hardware
  • PEFT cho VLA: LoRA deploy trên robot thật — sau khi train xong thì deploy thế nào
NT

Nguyễn Anh Tuấn

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

Khám phá VnRobo

Fleet MonitoringROS 2 IntegrationAMR Solutions

Bài viết liên quan

Tutorial
GalaxeaVLA G0.5: Hướng Dẫn Fine-Tune & Deploy
galaxeavlag0-5vla
wholebody-vla

GalaxeaVLA G0.5: Hướng Dẫn Fine-Tune & Deploy

Hướng dẫn fine-tune và deploy GalaxeaVLA G0.5 — VLA autoregressive thống nhất Qwen3.5 2B, đạt 98.9% LIBERO, 82.5% zero-shot DROID, mã nguồn mở.

20/7/202610 phút đọc
NT
Tutorial
Isaac Teleop + GR00T N1.7 + LeRobot v0.6: Pipeline Thu Thập, Fine-tune và Deploy
gr00tnvidialerobot
wholebody-vla

Isaac Teleop + GR00T N1.7 + LeRobot v0.6: Pipeline Thu Thập, Fine-tune và Deploy

Pipeline đầy đủ Isaac Teleop → LeRobot v0.6 → GR00T N1.7: thu thập dữ liệu teleop, fine-tune VLA manipulation policy và deploy trên robot arm — cập nhật tháng 7/2026.

15/7/202613 phút đọc
NT
Tutorial
W²-VLA World-to-Wrist với LeRobot
w2-vlaworld-to-wristwristworld
wholebody-vla

W²-VLA World-to-Wrist với LeRobot

Hướng dẫn World-to-Wrist cho VLA: sinh wrist-view, gắn CoT cổ tay, chuẩn bị LeRobot, training và inference policy manipulation.

7/8/202611 phút đọc
NT
VnRobo logoVnRobo logo

Hạ tầng AI cho robot công nghiệp thế hệ mới.

Sản phẩm

  • Tính năng
  • Bảng giá
  • Kiến thức
  • Dịch vụ

Công ty

  • Về chúng tôi
  • Blog
  • Liên hệ

Pháp lý

  • Chính sách bảo mật
  • Điều khoản sử dụng

© 2026 VnRobo. Bảo lưu mọi quyền.

Được tạo với♥tại Việt Nam