← Quay lại Blog
aiopenarmsmolvlatrainingdeploymenthilserl

SimpleVLA-RL (8): Train & Deploy trên OpenArm

Train SmolVLA, ACT, Pi0-FAST cho OpenArm gắp hộp carton — từ fine-tune đến deploy robot thật và cải thiện bằng HIL-SERL.

Nguyễn Anh Tuấn11 tháng 4, 202614 phút đọc
SimpleVLA-RL (8): Train & Deploy trên OpenArm

Train và Deploy trên OpenArm: Từ 50 episodes đến robot gắp hộp tự động

bài trước, bạn đã thu thập 50 episodes gắp hộp carton trên OpenArm — đó là nhiên liệu. Bài này là động cơ: chúng ta sẽ train 3 policy khác nhau, so sánh kết quả, deploy lên robot thật, và cải thiện bằng Reinforcement Learning. Đây là bài hoàn chỉnh nhất trong series — từ lúc chạy lệnh train đến khi robot tự gắp hộp không cần con người can thiệp.

Mình sẽ trình bày 3 lựa chọn training từ đơn giản đến phức tạp: ACT (nhanh nhất, không cần pretrained model), SmolVLA (cân bằng giữa chất lượng và tốc độ), và Pi0-FAST (mạnh nhất nhưng nặng nhất). Bạn không cần chạy cả 3 — hãy đọc so sánh cuối bài để chọn phương án phù hợp.

Option 1: Train ACT — Nhanh nhất, đơn giản nhất

ACT (Action Chunking with Transformers) là policy architecture được thiết kế đặc biệt cho robot manipulation. Nó không cần pretrained model, không cần language instruction — chỉ cần dữ liệu teleoperation và một GPU tầm trung.

Tại sao bắt đầu với ACT?

ACT là lựa chọn "first experiment" hoàn hảo vì:

Chạy training

lerobot-train \
  --policy.type=act \
  --dataset.repo_id=username/openarm-box-grasp \
  --steps=50000 \
  --batch_size=32

Phân tích từng tham số:

Theo dõi training

LeRobot tự động log metrics lên Weights & Biases (nếu đã cài). Các metrics quan trọng cần theo dõi:

Sau 50K steps, model được lưu tại outputs/act/checkpoints/last/pretrained_model/.

Biểu đồ training metrics — theo dõi loss và success rate

Khi nào dùng ACT?

Option 2: Fine-tune SmolVLA — Cân bằng chất lượng và tốc độ

SmolVLA là VLA model 450M parameters của HuggingFace, được thiết kế để chạy trên consumer hardware. Điểm khác biệt lớn nhất so với ACT: SmolVLA đã được pretrain trên dữ liệu cộng đồng từ nhiều loại robot — nó mang theo "kinh nghiệm manipulation" sẵn có.

Tại sao SmolVLA là lựa chọn recommended?

Như đã phân tích trong bài về SmolVLA training:

Chạy fine-tune

lerobot-train \
  --policy.path=lerobot/smolvla_base \
  --dataset.repo_id=username/openarm-box-grasp \
  --batch_size=64 \
  --steps=20000 \
  --output_dir=outputs/openarm_smolvla \
  --policy.device=cuda

Phân tích:

Thời gian training ước tính

GPU Batch size Thời gian (20K steps)
A100 (80GB) 64 ~4 giờ
RTX 4090 (24GB) 32 ~8 giờ
RTX 3090 (24GB) 16 ~12 giờ
RTX 3060 (12GB) 8 ~20 giờ (không khuyến nghị)

Mẹo fine-tuning SmolVLA

Learning rate: Dùng learning rate thấp hơn so với training from scratch. LeRobot default cho fine-tune thường là 1e-5 — nếu model chưa converge, thử 3e-5. Nếu loss dao động mạnh, giảm xuống 5e-6.

Frozen backbone: Nếu GPU hạn chế, bạn có thể freeze vision encoder và chỉ train action head:

lerobot-train \
  --policy.path=lerobot/smolvla_base \
  --dataset.repo_id=username/openarm-box-grasp \
  --policy.freeze_vision_encoder=true \
  --steps=10000

Cách này nhanh hơn 3-4x nhưng performance thấp hơn ~5-10%.

Option 3: Fine-tune Pi0-FAST — Mạnh nhất, nặng nhất

Pi0-FAST (Physical Intelligence + Flow-matching Action Sequence Tokenizer) là state-of-the-art VLA model. Nó kết hợp vision-language model mạnh mẽ với FAST tokenizer — biến continuous actions thành discrete tokens để tận dụng sức mạnh của language model cho action prediction.

Khi nào cần Pi0-FAST?

Chạy fine-tune

lerobot-train \
  --policy.type=pi0_fast \
  --policy.pretrained_path=lerobot/pi0_fast_base \
  --dataset.repo_id=username/openarm-box-grasp \
  --policy.dtype=bfloat16 \
  --policy.gradient_checkpointing=true \
  --steps=50000

Các tham số đặc biệt:

FAST tokenizer cho OpenArm

Pi0-FAST cần biết action space cụ thể của robot để build tokenizer. Đối với OpenArm 6-DOF, bạn cần đảm bảo tokenizer config phù hợp:

# Kiểm tra action space
from lerobot.common.datasets.lerobot_dataset import LeRobotDataset
ds = LeRobotDataset("username/openarm-box-grasp")
print(f"Action dim: {ds[0]['action'].shape}")  # Phải là (6,) cho 6-DOF
print(f"State dim: {ds[0]['state'].shape}")    # Phải là (6,)

FAST tokenizer tự động discretize continuous actions thành tokens dựa trên action range trong dataset. Điều này minh bạch với user — bạn không cần config thủ công.

Cảnh báo: Pi0-FAST training rất tốn VRAM. Trên RTX 4090 với gradient checkpointing + bfloat16, batch_size tối đa khoảng 8-16. Nếu OOM, giảm batch_size hoặc chuyển sang SmolVLA.

Deploy trên robot thật — Khoảnh khắc sự thật

Đây là bước thú vị nhất — xem model bạn vừa train tự điều khiển robot gắp hộp carton mà không cần bạn cầm leader arm.

Chạy policy evaluation

LeRobot sử dụng cùng script lerobot-record nhưng thêm flag --policy.path để chạy trong autonomous mode:

lerobot-record \
  --robot.type=openarm_follower \
  --robot.port=can0 \
  --robot.side=right \
  --robot.id=my_follower \
  --robot.cameras="{ top: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}}" \
  --dataset.single_task="Grasp the carton box and lift it" \
  --dataset.repo_id=username/openarm-box-eval \
  --dataset.num_episodes=10 \
  --policy.path=outputs/openarm_smolvla/checkpoints/last/pretrained_model

Lúc này:

Đánh giá kết quả

Chạy 10 episodes evaluation và ghi lại:

Episode Kết quả Ghi chú
1 Success Gắp chính xác, nhấc ổn định
2 Success Tiếp cận chậm nhưng thành công
3 Fail Mở gripper quá sớm → rơi hộp
4 Success -
... ... ...

Success rate mong đợi (với 50 episodes training data):

Policy Success rate Ghi chú
ACT (from scratch) 60-70% Chỉ học từ 50 episodes, không có prior
SmolVLA (fine-tuned) 75-85% Pretrained manipulation knowledge giúp ích
Pi0-FAST (fine-tuned) 80-90% Mạnh nhất nhưng cần nhiều compute

Nếu success rate < 50%, có vấn đề với data hoặc calibration. Quay lại kiểm tra bài thu thập dữ liệu.

Robot arm tự động thực hiện task manipulation

Cải thiện bằng HIL-SERL — RL trực tiếp trên robot thật

Nếu policy đã đạt 70-80% nhưng bạn muốn push lên 90%+, HIL-SERL (Human-in-the-Loop Sample Efficient RL) là con đường hiệu quả nhất. Thay vì thu thập thêm demonstrations (tốn thời gian), bạn để robot tự cải thiện bằng RL với sự hỗ trợ của con người.

Bước 1: Train reward classifier

Reward classifier là mạng neural nhỏ dự đoán "task này thành công hay thất bại?" từ hình ảnh camera. Nó được train từ evaluation data bạn vừa thu thập:

# Pseudo-code: train reward classifier
# Dùng 10 eval episodes đã labeled (success/fail)
# Input: camera frame cuối episode
# Output: probability of success (0.0 - 1.0)

HIL-SERL sử dụng reward classifier này thay vì binary reward từ simulator — vì chúng ta đang train trên robot thật, không có simulator để query "task đã hoàn thành chưa?"

Bước 2: Actor-Learner SAC loop

SAC (Soft Actor-Critic) là thuật toán RL phù hợp nhất cho robot thật vì:

Quy trình HIL-SERL:

  1. Robot thực hiện task (actor)
  2. Reward classifier đánh giá kết quả
  3. SAC cập nhật policy (learner)
  4. Con người can thiệp khi robot sắp va chạm hoặc đi sai hướng
  5. Lặp lại 100-200 episodes

Bước 3: Human interventions

Đây là phần "Human-in-the-Loop" — bạn ngồi cạnh robot với gamepad/keyboard:

Mỗi intervention trở thành data point có giá trị cao — nó cho model biết chính xác "ở state này, hành vi đang làm là sai, đây là hành vi đúng."

Chi tiết về HIL-SERL đã được phân tích sâu trong bài viết chuyên đề. Đọc bài đó để hiểu actor-learner architecture, reward classifier training, và safety guidelines.

Cải thiện bằng SimpleVLA-RL (nếu có simulation)

Nếu bạn là advanced user và muốn tận dụng approach của SimpleVLA-RL — train RL hoàn toàn trong simulation rồi transfer sang robot thật — OpenArm cũng có con đường này.

OpenArm trong Isaac Lab

OpenArm có repository hỗ trợ NVIDIA Isaac Lab (openarm_isaac_lab). Điều này cho phép:

  1. SFT trong sim: Dùng 50 episodes thật để train baseline policy, rồi generate thêm dữ liệu trong sim
  2. RL trong sim: Áp dụng GRPO/PPO để cải thiện policy bằng reward từ simulator
  3. Sim-to-real: Transfer policy sang OpenArm thật

Pipeline hoàn chỉnh: SFT (real data) → RL (sim data) → Deploy (real robot)

Đây là con đường mạnh nhất nhưng phức tạp nhất. Bạn cần:

Lời khuyên: Nếu bạn mới bắt đầu, đừng đi con đường sim trước. Hãy bắt đầu với ACT/SmolVLA → deploy → HIL-SERL. Sim-to-real pipeline chỉ nên thử khi bạn đã master pipeline cơ bản.

Bảng so sánh toàn diện: ACT vs SmolVLA vs Pi0-FAST

Đây là bảng tổng hợp giúp bạn chọn đúng policy cho tình huống của mình:

Tiêu chí ACT SmolVLA Pi0-FAST
Training time 1-2 giờ 4-12 giờ 8-24 giờ
GPU tối thiểu 1x RTX 3090 1x RTX 4090 1x A100
VRAM cần thiết 12-16 GB 20-24 GB 40-80 GB
Language instruction Không
Pre-training Không Có (community data)
Expected success (50 eps) 60-70% 75-85% 80-90%
Multi-task Không (1 task/model)
Inference speed Nhanh (~50Hz) Trung bình (~15Hz) Chậm (~5Hz)
Độ phức tạp setup Thấp Trung bình Cao
Khi nào dùng Thí nghiệm đầu tiên Production recommended Push state-of-the-art

Đọc bảng này thế nào?

Workflow iteration hoàn chỉnh

Đây là quy trình mình khuyến nghị, từ bước đầu đến khi robot hoạt động ổn định:

Giai đoạn 1: Baseline nhanh (ngày 1)

  1. Thu thập 50 episodes (bài trước)
  2. Train ACT — 1-2 giờ
  3. Deploy → đánh giá success rate
  4. Nếu > 50% → pipeline hoạt động, dữ liệu OK

Giai đoạn 2: Nâng cấp policy (ngày 2-3)

  1. Nếu ACT baseline tốt → train SmolVLA fine-tune — 4-12 giờ
  2. Deploy SmolVLA → so sánh với ACT
  3. Nếu SmolVLA > ACT 10%+ → dùng SmolVLA làm chính

Giai đoạn 3: Thu thập thêm dữ liệu (ngày 4-5)

  1. Nếu cần → thu thập thêm 50-100 episodes
  2. Đa dạng hóa: thêm nhiều kích cỡ hộp, vị trí, ánh sáng khác nhau
  3. Retrain SmolVLA với dataset lớn hơn

Giai đoạn 4: RL improvement (ngày 6-7)

  1. Nếu muốn push > 85% → dùng HIL-SERL
  2. 100-200 RL episodes với human intervention
  3. Đánh giá lại success rate

Giai đoạn 5: Advanced (tuần 2+)

  1. Nếu cần language control → thử Pi0-FAST
  2. Nếu muốn sim-to-real → setup Isaac Lab environment
  3. Scale lên multi-task: thêm "stack boxes," "sort by size"...

Tóm tắt: Pipeline hoàn chỉnh từ unboxing đến autonomous grasping

Qua 2 bài viết (phần 7 và 8), chúng ta đã đi qua toàn bộ pipeline:

  1. Hardware setup: CAN bus, camera, calibration
  2. Data collection: 50 episodes teleoperation với LeRobot
  3. Training: ACT (baseline) → SmolVLA (recommended) → Pi0-FAST (advanced)
  4. Deployment: Chạy policy trên robot thật, đánh giá success rate
  5. RL improvement: HIL-SERL cho 10-15% improvement thêm

Pipeline này không chỉ áp dụng cho gắp hộp carton. Bạn có thể dùng cùng quy trình cho bất kỳ manipulation task nào: xếp đồ, rót nước, lắp ráp,... Thay đổi duy nhất là task description và training data.

Đây chính là sức mạnh của approach end-to-end learning: bạn không cần viết code điều khiển phức tạp cho từng task — chỉ cần demo cho robot xem → train → deploy. Và với OpenArm + LeRobot, pipeline này accessible cho bất kỳ ai có $3,500 và một GPU.

Nếu bạn mới bắt đầu với series này, hãy đọc SimpleVLA-RL (1): Tổng quan để hiểu bức tranh toàn cảnh. Và nếu muốn hiểu sâu hơn về quá trình training RL cho VLA, bài viết đó giải thích chi tiết thuật toán GRPO và tại sao nó hiệu quả.


Bài viết liên quan

Bài viết liên quan

TutorialSimpleVLA-RL (10): SFT & RL Training cho OpenArm
openarmsimplevla-rltraininggrporeinforcement-learningPhần 10

SimpleVLA-RL (10): SFT & RL Training cho OpenArm

Hướng dẫn chi tiết SFT fine-tuning và RL training với SimpleVLA-RL cho OpenArm — từ config environment đến chạy GRPO.

11/4/202616 phút đọc
TutorialSimpleVLA-RL (11): Sim-to-Real cho OpenArm
openarmsim-to-realdeploymentsimplevla-rlPhần 11

SimpleVLA-RL (11): Sim-to-Real cho OpenArm

Deploy model SimpleVLA-RL từ simulation lên OpenArm thật — camera setup, action mapping, và tips giảm sim-to-real gap.

11/4/202617 phút đọc
TutorialSimpleVLA-RL (6): OpenArm — Phân tích Lộ trình
openarmvlareinforcement-learninglerobotpi0Phần 6

SimpleVLA-RL (6): OpenArm — Phân tích Lộ trình

Phân tích chi tiết cách tiếp cận training robot OpenArm 7-DoF gắp hộp carton — so sánh 2 lộ trình: LeRobot native vs SimpleVLA-RL.

11/4/202613 phút đọc