VLA-Precision giải quyết vấn đề gì?
VLA-Precision là framework real-world online reinforcement learning cho Vision-Language-Action model, được giới thiệu trong paper VLA-Precision: Asymmetric Co-Bootstrapping for Efficient Real-World Online RL of Vision-Language-Action Models của Chenyu Su và cộng sự. Project page ở vla-precision.github.io và code ở repo scy-v/VLA-Precision. Điểm đáng chú ý nhất: trên 9 task thao tác hóa học chính xác, hệ thống đạt 98.3% success rate trung bình sau 45.8 phút online training mỗi task, với episode thành công chạy trung bình 27.6 giây.
Nếu bạn đã theo dõi các bài về EXPO-FT, TORL cho tactile VLA, hoặc reward models trong LeRobot v0.6, bạn sẽ thấy một xu hướng rõ: imitation learning giúp robot "biết làm", nhưng online RL mới giúp robot "làm chắc". VLA-Precision đi đúng vào khoảng trống đó. Nó không cố train robot từ đầu. Nó bắt đầu từ $\pi_{0.5}$ đã được fine-tune bằng demonstrations, rồi dùng ACoB để cải thiện phần action expert bằng trải nghiệm thật, human corrections và critic đã được hiệu chỉnh dần.
Vấn đề thực tế trong lab rất khắc nghiệt. Cắm pipette tip, chuyển cuvette thủy tinh trong suốt, đưa vial 2 mL vào rack, lắp rubber stopper, hoặc chải ống nghiệm bằng hai tay đều không giống pick-and-place đơn giản. Lỗi vài milimet có thể làm vật kẹt, rơi, vỡ, lệch lực ép, hoặc khiến robot cần reset thủ công. Behavior cloning học từ demonstration có thể đạt 60-80%, nhưng nếu deployment cần thao tác lặp lại hàng trăm lần, tỷ lệ đó vẫn quá thấp. Online RL có thể tối ưu reward thật, nhưng critic ban đầu thường chưa đáng tin, còn VLA lớn thì chậm, tốn GPU và khó cập nhật liên tục.
VLA-Precision đưa ra hai đóng góp chính. Thứ nhất là ACoB, viết tắt của Asymmetric Co-Bootstrapping, một thuật toán kết hợp behavior learning nhanh từ intervention với value calibration chậm nhưng ngày càng chính xác. Thứ hai là ACoB-Stream, kiến trúc actor-learner giúp online RL trên large VLA đủ nhanh bằng cách cache context, stream đúng dữ liệu cần dùng và chỉ đồng bộ phần trainable policy state.
Ý tưởng cốt lõi của ACoB
Hãy hình dung robot đang cố lắp pipette tip. VLA đưa ra một action chunk: đi xuống, căn trục, ép nhẹ. Nếu action lệch, operator can thiệp bằng keyboard hoặc master arm. Sau intervention, episode vẫn có thể thành công. Nhưng dữ liệu đó chứa hai sự thật khác nhau:
Đề xuất ban đầu của policy: có thể sai ở state đó
Hành động đã được human correction: nên được đánh giá cao hơn
Kết quả cuối episode: cho biết chuỗi hành động có thành công hay không
Một critic TD thông thường chỉ thấy hành động đã được execute. Nó không thấy hậu quả của action proposal bị ghi đè, vì action đó không được thực thi. Nếu episode thành công sau khi human sửa, critic có thể vô tình vẫn đánh giá proposal ban đầu quá cao. Khi actor tối ưu trực tiếp Q tuyệt đối, lỗi này đẩy policy drift: model chạy theo score ảo thay vì cải thiện thao tác thật.
ACoB xử lý điểm này bằng ba lớp tín hiệu.
Thứ nhất, global return propagation dùng TD learning để truyền reward dài hạn qua trajectory thật. Transition có state, executed action chunk, reward trong chunk, next state và terminal flag. Critic ensemble học giá trị của action đã thật sự đi qua robot.
Thứ hai, local preference ranking dùng intervention như một cặp so sánh tại cùng state. Nếu human sửa action đủ khác proposal ban đầu, ACoB ép advantage của corrected action cao hơn advantage của proposal. Đây là chi tiết rất quan trọng: nó biến intervention thành nhãn preference cục bộ, không chỉ thành một action để behavior cloning.
Thứ ba, relative-advantage policy improvement không tối đa hóa Q tuyệt đối. Current action expert và frozen reference action expert decode action chunk từ cùng context và cùng noise sample. Critic so current action với baseline trong từng critic, rồi lấy pessimistic minimum qua ensemble. Chỉ khi nhiều critic đồng ý rằng current action tốt hơn reference hoặc proposal, actor mới nhận tín hiệu cải thiện mạnh. Cách này giảm tác hại của critic overestimation.

ACoB vẫn giữ behavior cloning, nhưng dùng nó đúng vai trò. Thay vì chỉ ràng buộc actor để khỏi đi xa demonstrations, ACoB dùng flow-matching behavior cloning trên demonstrations, trajectory thành công, và effective corrections. Early training vì vậy học rất nhanh từ hành động tốt. Khi online data tốt dần lên, critic có cơ hội học value chính xác hơn. Khi critic tốt hơn, relative-advantage update đẩy policy vượt qua trần của demonstration. Đó là "asymmetric co-bootstrapping": behavior learning nhanh cải thiện data; value learning chậm hiệu chỉnh actor; hai quá trình hỗ trợ nhau nhưng không cùng tốc độ.
Kiến trúc tổng thể
VLA-Precision dùng quy trình hai stage.
Stage I: demonstrations -> full-parameter fine-tuning của pi0.5
Stage II: freeze base VLA -> train LoRA trong action expert bằng ACoB online RL
Trong formulation của paper, state gồm observation hình ảnh, robot state và instruction ngôn ngữ. Policy sinh action chunk $H$ bước, không phải single action. Với OpenPI/pi0.5, phần frozen multimodal prefix encode ảnh, language và proprioception thành context $z_t$. Action expert flow-based sinh action từ context và Gaussian noise. Stage II không cập nhật toàn bộ VLA: nó freeze prefix và action expert gốc, rồi thêm LoRA trainable cho action expert. Frozen LoRA reference từ Stage I được giữ lại để regularize.
ACoB-Stream là phần biến thuật toán thành hệ thống chạy được trên robot thật. Repo chia code thành các layer rõ: integrations/openpi bọc OpenPI, acob chứa loss và critic, acob_stream chứa actor/learner loop, buffers, communication và checkpoint, còn robotics chứa robot, camera, gripper, teleoperation. Tư duy quan trọng là tách hardware khỏi thuật toán. Nếu bạn thêm robot mới, bạn không sửa ACoB; bạn implement interface robot/camera/gripper và đăng ký factory.

ACoB-Stream có bốn cơ chế chính:
| Cơ chế | Ý nghĩa cho beginner |
|---|---|
| Experience-context formation | Khi actor đã chạy inference, giữ lại prefix KV/context của VLA thay vì tính lại cho mỗi sample |
| Experience-context persistence | Lưu context một lần trong disk-backed context buffer, replay/correction chỉ giữ ID tham chiếu |
| Experience-context access | Critic update chỉ lấy next context khi cần bootstrap; actor update mới lấy current context |
| Policy-state synchronization | Learner chỉ publish trainable action-expert state, không gửi lại toàn bộ large VLA |
Điểm này giải thích vì sao bài báo nhấn mạnh efficiency. Với compact policy, replay buffer nằm trong RAM và model nhỏ nên actor-learner khá đơn giản. Với large VLA, prefix context lớn, full-model synchronization chậm, random disk access có thể nghẽn khi replay tăng. ACoB-Stream dùng invariant-state decoupling: thứ gì không đổi thì cache và không truyền lại; thứ gì chỉ cần theo objective thì stream theo nhu cầu.
Cài đặt repo
Repo chính dùng uv và có ba nhóm dependency: Stage I trên GPU server, Stage II trên GPU server, và real-robot trên máy robot. Nếu bạn chỉ đọc code hoặc chuẩn bị môi trường dev, có thể bắt đầu bằng clone repo ở máy lab và máy GPU. Nếu bạn chạy thật, hãy tách rõ server training và robot machine.
curl -LsSf https://astral.sh/uv/install.sh | sh
git clone https://github.com/scy-v/vla-precision.git
cd vla-precision
# GPU server cho Stage I
uv sync --frozen --group stage1
# GPU server cho Stage II
uv sync --frozen --group stage2
# Máy robot thật cho control/camera/bridge
uv sync --frozen --group real-robot
Repo khuyến nghị dùng symlink cho checkpoint và train data nếu ổ chính không đủ nhanh hoặc đủ dung lượng:
ln -s /path/to/storage/checkpoints ./checkpoints
ln -s /path/to/storage/train_data ./train_data
Bạn sẽ làm việc với ba loại YAML:
| YAML | Vị trí | Dùng để làm gì |
|---|---|---|
| Stage I task | configs/stage1/<task>.yaml |
OpenPI normalization và full fine-tuning |
| Stage II task | configs/stage2/tasks/<task>.yaml |
task instruction, reward, ACoB, buffers, training, evaluation |
| Stage II deployment | configs/stage2/deployments/<deployment>.yaml |
IP, GPU, camera, robot, gripper, path local |
Nguyên tắc beginner nên nhớ: task YAML mô tả "học cái gì", deployment YAML mô tả "chạy ở đâu và trên hardware nào". Cùng một task có thể chạy trên deployment khác nếu robot, camera và path thay đổi.
Chuẩn bị dữ liệu demonstration
VLA-Precision hỗ trợ thu demonstration theo LeRobot format. README liệt kê nhiều lựa chọn: UR5e/UR7e keyboard teleop, UR5e/UR7e isomorphic master-slave, dual UR VR teleop, và Franka teleop. Paper cũng mô tả hai kiểu intervention. Với task cần final alignment cực mịn, keyboard incremental Cartesian control cho phép bấm từng bước translation/rotation coarse hoặc fine. Với chuỗi dài hoặc thao tác cần compliance, isomorphic master arm giữ mapping trực tiếp với UR5e và giúp operator takeover mượt hơn.
Data representation trong paper dùng delta task-space action. Robot state một bước gồm TCP pose tương đối từ đầu episode, TCP twist, force, torque và gripper state. Action một bước gồm delta end-effector command 6 DoF và gripper command. Các cặp state-action được đồng bộ nominal 15 Hz. Với single-arm, hệ thống dùng một wrist camera và một external camera; với dual-arm, hai wrist cameras và một external camera cung cấp cả view cục bộ lẫn scene chung.
Nếu tự triển khai task mới, bạn nên bắt đầu nhỏ:
- Xác định instruction ngôn ngữ cố định, ví dụ
attach the pipette tip. - Định nghĩa reset procedure có pose an toàn và randomization vừa phải.
- Định nghĩa completion detector, có thể từ sensor, camera rule hoặc operator signal.
- Định nghĩa reward function đơn giản: success reward lớn, time reward nhỏ hoặc penalty nhẹ.
- Kiểm tra camera keys khớp giữa
task.image_keys,cameras.devicesvàdata.image_key_map.
Stage I: fine-tune OpenPI/pi0.5 bằng imitation learning
Stage I tạo policy khởi động đủ tốt trước khi online RL. Đây là điểm khác với RL-from-scratch. Bạn cần tính normalization statistics trên LeRobot dataset, rồi chạy full-parameter fine-tuning bằng config Stage I.
# GPU server
uv run --no-sync main.py \
--stage stage1 \
--mode norm-stats \
--config configs/stage1/insert_two_bottles_diagonal_rack.yaml
uv run --no-sync main.py \
--stage stage1 \
--mode train \
--config configs/stage1/insert_two_bottles_diagonal_rack.yaml
Trong paper, Stage I dùng ít demonstration hơn baseline VLA fine-tuning ở nhiều task. Ví dụ pipette tip attachment dùng 60 demos và 5,000 steps cho VLA-Precision, trong khi baseline $\pi_0/\pi_{0.5}$ dùng 120 demos và 25,000 SFT steps. Tube brushing và pipette transfer/ejection dùng 120 demos và 15,000 steps. Mục tiêu không phải làm Stage I hoàn hảo, mà tạo prior đủ ổn để Stage II có thể học từ real feedback mà không phá behavior.
Stage II: chạy ACoB online RL
Trước online RL, repo preprocess một phần offline data để populate Replay Buffer và Context Buffer. Bước này materialize action chunks, transitions và OpenPI context để learner không phải tính lại mọi thứ từ đầu.
# GPU server
uv run --no-sync main.py \
--stage stage2 \
--mode preprocess \
--config configs/stage2/tasks/insert_two_bottles_diagonal_rack.yaml \
--deployment configs/stage2/deployments/single_ur.yaml
Sau đó cần bốn process chạy cùng task/deployment YAML:
Robot machine: serve-robot
Robot machine: robot-agent-bridge
GPU server: learner
GPU server: actor
Trên máy robot:
uv run --no-sync main.py --stage stage2 --mode serve-robot \
--config configs/stage2/tasks/insert_two_bottles_diagonal_rack.yaml \
--deployment configs/stage2/deployments/single_ur.yaml
uv run --no-sync main.py --stage stage2 --mode robot-agent-bridge \
--config configs/stage2/tasks/insert_two_bottles_diagonal_rack.yaml \
--deployment configs/stage2/deployments/single_ur.yaml
Trên GPU server:
uv run --no-sync main.py --stage stage2 --mode train --role learner \
--config configs/stage2/tasks/insert_two_bottles_diagonal_rack.yaml \
--deployment configs/stage2/deployments/single_ur.yaml
uv run --no-sync main.py --stage stage2 --mode train --role actor \
--config configs/stage2/tasks/insert_two_bottles_diagonal_rack.yaml \
--deployment configs/stage2/deployments/single_ur.yaml
Learner đợi replay và correction buffer đủ batch, warm up critic, rồi lặp: sample một nửa từ replay, một nửa từ correction, retrieve contexts, update critic nhiều lần, update LoRA action expert một lần, và publish state mới theo interval. Actor tiếp tục rollout với policy version hợp lệ gần nhất trong khi learner cập nhật.
Inference và evaluation
Sau khi có checkpoint Stage II, bạn đánh giá bằng mode evaluate. Có thể chạy evaluation policy trên GPU server hoặc local robot machine. Nếu chạy local, cần cài dependency tương ứng cho model.
# Robot machine: robot service và bridge vẫn cần chạy
uv run --no-sync main.py --stage stage2 --mode serve-robot \
--config configs/stage2/tasks/insert_two_bottles_diagonal_rack.yaml \
--deployment configs/stage2/deployments/single_ur.yaml
uv run --no-sync main.py --stage stage2 --mode robot-agent-bridge \
--config configs/stage2/tasks/insert_two_bottles_diagonal_rack.yaml \
--deployment configs/stage2/deployments/single_ur.yaml
# Stage II ACoB model
uv run --no-sync main.py --stage stage2 --mode evaluate \
--config configs/stage2/tasks/insert_two_bottles_diagonal_rack.yaml \
--deployment configs/stage2/deployments/single_ur.yaml
Kết quả được cập nhật sau từng episode trong results/<experiment>/acob/<time>.json. Khi debug, đừng chỉ nhìn success cuối cùng. Hãy log thêm intervention rate, average episode time, timeout, camera dropped frames, force spikes và số lần reset lỗi. Với lab manipulation, policy 100% success nhưng đâm force quá cao ở final insertion vẫn chưa phải deployment-ready.
Kết quả quan trọng
Paper đánh giá trên bốn nhóm task: contact-rich, contact-light, contact-free và bimanual coordination. Hardware gồm UR5e với PGI gripper, UR5e với LinkerHand dexterous hand, dual UR5e với gripper, và Franka Research 3 với PGI gripper. Các task có pose randomization thật, không phải chỉ replay một setup cố định.

Các con số nổi bật:
| Metric | VLA-Precision |
|---|---|
| Online training trung bình | 45.8 phút/task |
| Average success rate | 98.3% |
| Held-out trials | 177/180 success |
| Số task đạt 100% | 7/9 |
| Worst-task success | 90% |
| Average successful episode time | 27.6 giây |
| So với $\pi_{0.5}$ | +30.5 điểm success |
| So với $\pi_0$ | +38.9 điểm success |
So với Robo-Dopamine, baseline real-world RL mạnh nhất trong bảng, VLA-Precision tăng average success thêm 88.3 điểm và cải thiện execution speed 61.2%. Với ablation, full ACoB đạt 96.25% final autonomous success trung bình trên bốn task đại diện. Bỏ critic preference còn 26.25%, bỏ actor BC còn 20.00%, bỏ relative advantage còn 8.75%. Điều này cho thấy ba thành phần không phải trang trí: preference ranking sửa local credit ambiguity, actor BC hấp thụ correction nhanh, relative advantage tránh policy drift do Q tuyệt đối.
Kết quả efficiency cũng đáng chú ý. Disk ACoB-Stream đạt 15,666 CTA cycles trong 150 phút, throughput 1.7407 CTA/s và latency trung bình 0.574 giây mỗi cycle. So với biến thể No KV Cache, throughput tăng 10.95 lần và latency giảm 90.9%. Khi full-history random sampling bắt đầu nghẽn sau khoảng 43 phút do working set vượt Linux page cache, sliding-window disk-backed design vẫn giữ throughput ổn định.
Beginner nên triển khai thế nào?
Đừng bắt đầu bằng task khó nhất như tube brushing dual-arm. Một lộ trình thực tế hơn:
- Chọn task single-arm có completion detector rõ, ví dụ đưa object vào slot hoặc gắn tip.
- Thu demonstration sạch, ít nhưng đa dạng pose, ưu tiên camera calibration và lighting ổn định.
- Chạy Stage I đến khi policy có success khởi động đủ để robot tự rollout một phần đáng kể.
- Bật intervention an toàn, giới hạn force/velocity, và để operator sửa ở critical stage.
- Chạy Stage II ngắn trước, quan sát intervention rate giảm hay tăng.
- Evaluate bằng held-out object poses, không dùng lại đúng reset distribution đã train.
Nếu bạn đang xây pipeline riêng trong LeRobot, hãy coi VLA-Precision như bản thiết kế hệ thống hơn là một script duy nhất. Những ý tưởng có thể tái sử dụng gồm correction buffer riêng, preference ranking cho proposal bị overwrite, frozen reference regularization, context caching và trainable-subspace synchronization. Phần khó nhất không nằm ở công thức loss, mà ở việc robot thật phải cung cấp data đều, reward đáng tin và reset không tốn quá nhiều thời gian.
Giới hạn cần nhớ
VLA-Precision vẫn là task-specific online RL. Paper đề xuất multi-task real-world RL như hướng nghiên cứu tiếp theo, nhưng kết quả chính hiện tại vẫn tối ưu từng task. Hệ thống cũng dùng compute mạnh: shared hyperparameters trong paper ghi 4 NVIDIA A800 GPUs cho training. Ngoài ra, action horizon là vấn đề lớn. Với step-wise delta, tăng executed horizon từ 3 lên 6 làm average autonomous success trên ba insertion task giảm từ 58.3% xuống 6.7% và tăng relative action-prediction RMSE 29.3%. Nói cách khác, chunk dài hơn không tự động tốt hơn trong precision contact.
Điểm đáng học nhất là cách paper tôn trọng thực tế của robot lab. Nó không giả định critic đúng ngay từ đầu, không giả định demonstration hoàn hảo, không gửi full VLA qua network mỗi vài giây, và không xem intervention chỉ là failure recovery. Với beginner, đó là bài học thiết kế quan trọng: online RL cho robot chính xác phải đồng thời giải quyết learning signal, system latency, human takeover và hardware safety.



