Hãy thử tưởng tượng bạn train một người thợ cơ khí giỏi. Ban đầu, anh ta đọc hàng nghìn cuốn sách kỹ thuật và có thể giải thích mọi khái niệm sắc bén. Nhưng sau đó bạn cho anh ta làm việc tay chân suốt 6 tháng — và dần dần, anh ta quên hết lý thuyết, chỉ còn biết làm theo thói quen. Đó chính xác là vấn đề mà hầu hết các VLA model hiện tại đang gặp phải.
InstructVLA (ICLR 2026) từ nhóm nghiên cứu tại USTC, Zhejiang University và Shanghai AI Lab giải quyết vấn đề này một cách khéo léo: thay vì buộc model phải lựa chọn giữa "hiểu ngôn ngữ" hay "làm được việc", họ thiết kế một pipeline để model làm được cả hai — và kết quả vượt qua OpenVLA đến 96% trên benchmark mới SimplerEnv-Instruct.
Vấn đề: VLA Models Bị "Quên" Tiếng Việt sau khi Học Tay
Trước InstructVLA, hầu hết các VLA model được xây dựng theo một quy trình đơn giản: lấy một Vision-Language Model (VLM) mạnh như LLaMA hay InternVL, rồi fine-tune nó trên dữ liệu robot để sinh ra action. Nghe có vẻ hợp lý.
Nhưng vấn đề nằm ở đây: quá trình fine-tune manipulation thường ghi đè lên kiến thức ngôn ngữ đã học từ pretraining. Model học cách di chuyển tay robot rất tốt, nhưng mất dần khả năng hiểu câu lệnh phức tạp. Thử nói "pick up the red cup but avoid the one near the stove" — model nhìn thấy "red cup", bắt đầu grab mà không xử lý được logic "avoid" hay "near the stove".
Đây không phải vấn đề nhỏ. Trong triển khai thực tế, người dùng nói chuyện với robot bằng ngôn ngữ tự nhiên — câu dài, có ngữ cảnh, đôi khi dùng mệnh lệnh gián tiếp ("bàn trên cùng đang cần thêm đồ" thay vì "lấy đồ vật từ kệ trên cùng"). Nếu robot không xử lý được, toàn bộ tính năng HRI (Human-Robot Interaction) sụp đổ.

Giải Pháp: Vision-Language-Action Instruction Tuning (VLA-IT)
InstructVLA đề xuất một khung huấn luyện mới gọi là VLA-IT (Vision-Language-Action Instruction Tuning) với ba trụ cột chính:
Trụ cột 1: Giữ lại kiến thức VLM bằng MoE LoRA
Thay vì fine-tune toàn bộ backbone VLM (sẽ gây "catastrophic forgetting"), InstructVLA dùng Mixture-of-Experts LoRA: mỗi layer trong LLM backbone có nhiều LoRA module hoạt động như các "chuyên gia" độc lập. Một scalar gate coefficient (λᵢ) tự động điều chỉnh trọng số của từng expert theo từng task.
Giống như một nhóm chuyên gia được triệu tập họp: expert nào phù hợp nhất với câu hỏi hiện tại sẽ được "microphone" ưu tiên, trong khi các expert khác vẫn có tiếng nói nhưng nhẹ hơn.
Trụ cột 2: Latent Action Queries — Cầu Nối giữa Ngôn Ngữ và Hành Động
Thay vì trực tiếp decode từ hidden states của VLM sang action vectors, InstructVLA đặt một lớp N learnable action queries ở giữa. Những query này attend vào hidden states của VLM, chiết xuất thông tin task-relevant, rồi pass xuống cho action decoder.
Hãy nghĩ như thế này: hidden states của VLM chứa rất nhiều thông tin ngôn ngữ + thị giác, nhưng không phải tất cả đều cần thiết cho action. Action queries như một bộ lọc thông minh — chỉ lấy phần thông tin "vận động" mà action decoder cần.
Trụ cột 3: Flow Matching Action Decoder
Action decoder của InstructVLA dựa trên flow matching (giống π0) — một kỹ thuật generative modeling tốt hơn diffusion ở tốc độ inference. Decoder gồm:
- DINOv2 làm vision encoder phụ (224×224 resolution)
- Feature-wise Linear Modulation (FiLM) để inject thông tin từ VLM vào action decoder
- 12-layer transformer với hidden size 768
Kết hợp lại, đây là quy trình sinh action 3 bước:
- VLM (Eagle2-2B, 448×448) đọc ảnh + câu lệnh, sinh ra hidden states
- Action queries lọc hidden states → latent action embedding
- Flow matching decoder sinh continuous action trajectory

Dataset VLA-IT: 650K Mẫu với 4 Loại Annotation
Một trong những đóng góp quan trọng nhất của paper là bộ dữ liệu VLA-IT gồm 650,000 mẫu, được tạo ra từ hai nguồn gốc (RT-1 Fractal dataset và Bridge Dataset) với sự hỗ trợ của GPT-4o để tạo annotation.
GPT-4o được cho xem 3 frame từ mỗi episode robot cùng với câu lệnh gốc, sau đó tạo ra 4 loại annotation:
| Loại | Mô tả | Ví dụ |
|---|---|---|
| Scenario Captioning | Mô tả cảnh quan trong ảnh | "Một bàn bếp với cốc đỏ ở góc trái, chai nước ở giữa..." |
| Question Answering | Câu hỏi về scene + câu trả lời | Q: "Cốc nào đang được robot cầm?" A: "Cốc xanh nhỏ ở góc phải" |
| Command Rewriting | Viết lại câu lệnh theo nhiều cách | "Lấy cốc đỏ" → "Could you grab that red mug?" → "đưa cái cốc màu đỏ cho tôi" |
| Context Creation | Tạo ngữ cảnh ẩn dụ | "Khách sắp đến, cần dọn bàn" (ngụ ý: dọn đồ vật trên bàn) |
Bốn loại annotation này tạo ra sự đa dạng cực kỳ phong phú về ngôn ngữ. Model phải học cách "đọc ý" từ câu lệnh, không chỉ khớp từ khóa.
Trong quá trình training, dữ liệu VLM thông thường và dữ liệu manipulation được mix theo tỷ lệ 1:7 — một manipulation batch, một multimodal batch theo sau. Tỷ lệ này được tối ưu qua ablation study để giữ balance giữa hai khả năng.
SimplerEnv-Instruct: Benchmark Mới cho Instruction Following
Paper đồng thời giới thiệu SimplerEnv-Instruct — một benchmark mới gồm 80 zero-shot manipulation tasks với 1,100 trials, được thiết kế đặc biệt để đánh giá khả năng hiểu câu lệnh phức tạp.
Benchmark chia làm 2 nhóm:
Task Aggregation (50 tasks)
Những task này test khả năng xử lý đa dạng ngôn ngữ:
- Novel verbs: "retrieve", "transport", "relocate" thay vì "pick and place"
- Multilingual expressions: câu lệnh bằng nhiều ngôn ngữ khác nhau
- Diverse object references: "the beverage container" thay vì "the bottle"
- Out-of-Distribution objects: object không xuất hiện trong training
Situated Reasoning (30 tasks)
Những task này yêu cầu model suy luận từ ngữ cảnh:
- Contextual reasoning: "It's getting cold, please prepare something warm" → model phải hiểu là "lấy cốc + đổ nước nóng"
- Command decomposition: câu lệnh dài → chia nhỏ thành sub-goals
- Spatial reasoning: "put the item to the left of the blue object" → hiểu quan hệ không gian
Kết Quả: Con Số Nói Lên Tất Cả

SimplerEnv (in-domain tasks)
| Model | Google Robot | WidowX | Average |
|---|---|---|---|
| OpenVLA-7B | 27.2% | 28.8% | 27.2% |
| SpatialVLA-3B | 45.9% | 41.8% | 45.9% |
| InstructVLA-Expert | 50.9% | 61.7% | 50.9% |
| InstructVLA-Generalist | 49.7% | 61.7% | 49.7% |
InstructVLA-Expert vượt SpatialVLA +11% và vượt OpenVLA +87% trên SimplerEnv thông thường.
SimplerEnv-Instruct (instruction-following tasks)
| Model | Task Aggregation | Situated Reasoning | Average |
|---|---|---|---|
| OpenVLA (fine-tuned) | 28.3% | 19.5% | 23.9% |
| OpenVLA (FT + GPT-4o assist) | 38.8% | 32.4% | 35.6% |
| InstructVLA-Generalist | 43.6% ±1.4% | 48.8% ±0.8% | 46.2% |
+96% so với OpenVLA fine-tuned, +29% so với OpenVLA được GPT-4o hỗ trợ.
Đặc biệt ấn tượng: InstructVLA thực sự tốt hơn ở Situated Reasoning (48.8%) so với Task Aggregation (43.6%) — đúng với thiết kế của VLA-IT chuyên giải quyết reasoning phức tạp.
LIBERO Benchmark (in-domain fine-tuning)
InstructVLA đạt 95.8% average success rate trên 4 LIBERO task suites khi được fine-tune in-domain — thuộc top performance trên benchmark này.
Multimodal Understanding
InstructVLA-Generalist duy trì được khả năng VLM gần như nguyên vẹn:
| Benchmark | Eagle2-2B (gốc) | InstructVLA-Generalist |
|---|---|---|
| MMMU-Val | 43.1 | 44.2 |
| MM-Vet | 53.8 | 51.7 |
| MMStar | 56.4 | 56.2 |
| TextVQA | 79.1 | 77.7 |
Model hầu như không giảm hiệu năng trên multimodal benchmarks — xác nhận rằng MoE LoRA + VLA-IT thành công bảo tồn kiến thức VLM.
Cài Đặt và Chạy InstructVLA
Yêu Cầu Môi Trường
- Python 3.10+
- PyTorch 2.2.0 + CUDA 12.1
- GPU: ít nhất 1× A100 40GB (cho inference), 8× A100 (cho training)
- RAM: 64GB+ khuyến nghị
Bước 1: Cài Đặt môi trường
# Clone repo
git clone https://github.com/InternRobotics/InstructVLA.git
cd InstructVLA
# Tạo conda environment
conda create -n instructvla python=3.10 -y
conda activate instructvla
# Cài PyTorch với CUDA 12.1
pip install torch==2.2.0 torchvision==0.17.0 torchaudio==2.2.0 \
--index-url https://download.pytorch.org/whl/cu121
# Cài các dependencies chính
pip install transformers==4.51.0 accelerate==1.3.0 peft==0.13.0
pip install numpy==1.26.4
# Flash Attention (tăng tốc inference đáng kể)
pip install flash-attn==2.5.5 --no-build-isolation
# Cài các dependencies còn lại
pip install -r pip_requirements.txt
Bước 2: Cài SimplerEnv để đánh giá
# ManiSkill2 real2sim (fork được tùy chỉnh)
git clone https://github.com/YangS03/my_maniskill.git ManiSkill2_real2sim
cd ManiSkill2_real2sim && pip install -e .
cd ..
Bước 3: Tải model weights
# Tải VLM backbone và LoRA adapter từ Hugging Face
# (xem hướng dẫn đầy đủ trên GitHub repo)
mkdir -p ckpt
# Tải Eagle2-2B base model
# Tải InstructVLA_Assets (chứa pre-trained LoRA adapters)
Bước 4: Inference với câu lệnh tùy chỉnh
import torch
from instructvla import InstructVLAModel
# Load model
model = InstructVLAModel.from_pretrained("ckpt/instructvla-generalist")
model.eval()
# Chuẩn bị input
observation = {
"image": image_tensor, # (1, 3, 448, 448) từ camera
"wrist_image": wrist_tensor, # (1, 3, 224, 224) từ wrist camera
"state": robot_state_tensor, # (1, state_dim) joint angles + EE pose
"instruction": "Place the red mug to the right of the blue bottle"
}
# Sinh action
with torch.no_grad():
actions = model.predict_action(observation)
# actions: (1, action_horizon, action_dim)
# action_dim = 7 (6 DoF EE pose + gripper)
# action_horizon = 16 steps
Training từ Đầu: 2-Stage Pipeline
Stage 1: Action Pre-training (Base Foundation)
Stage 1 train action expert và latent action queries trên dữ liệu manipulation thuần túy, không có VLM multimodal data. Mục tiêu: model học cách "làm" trước khi học cách "hiểu".
# Training Stage 1 — đơn giản hơn, chỉ cần 1 node 8× GPU
python -m torch.distributed.run --nproc_per_node 8 \
scripts/train_eagle_dual_v2_action_only_meta_query_v2.py \
--vla.base_vlm "ckpt/Eagle2-2B" \
--vla.global_batch_size 128 \
--vla.per_device_batch_size 16 \
--stage stage1 \
--future_action_window_size 15
Checkpoint Stage 1 train khoảng 650M parameters (action expert + action queries).
Stage 2: VLA Instruction Tuning (Ngôn Ngữ + Hành Động)
Stage 2 thêm language LoRA và scalar gate head, đồng thời co-train trên 3 loại dữ liệu:
- Multimodal VLM data (Bunny dataset, 2M samples)
- Manipulation data (RT-1, Bridge)
- VLA-IT dataset (650K samples)
# Training Stage 2 — cần multi-node (ít nhất 2 node × 8 GPU)
python -m torch.distributed.run --nproc_per_node 8 \
scripts/train_eagle_dual_v2_action_only_meta_query_v2.py \
--vla.base_vlm "ckpt/Eagle2-2B" \
--stage stage2 \
--use_mm True \
--fix_system1 True \
--vla.global_batch_size 768 \
--vla.learning_rate 5e-5 \
--future_action_window_size 15
Lưu ý quan trọng: Batch mix ratio là 1:7 (1 multimodal batch : 7 manipulation batches). Con số này không phải tùy ý — ablation study trong paper cho thấy nếu tỷ lệ này quá nghiêng về multimodal (1:3), model giảm performance manipulation. Nếu quá nghiêng về manipulation (1:14), model quên ngôn ngữ.
Stage 2 tune khoảng 220M parameters (language LoRA + scalar gate).
Kết Quả Real-World: WidowX và Franka Research 3

Paper test trên 2 platform thực tế:
WidowX-250 (zero-shot, môi trường bếp):
- Atomic instructions: +23.3% so với OpenVLA
- Reasoning tasks: +46.7% (zero-shot)
Franka Research 3 (few-shot, các task spatial và math):
- Reasoning tasks: +41.7% so với OpenVLA
- Math-centric tasks: 2.5× so với π0
Một ví dụ ấn tượng: khi được hỏi "The guest is arriving in 10 minutes, please help prepare", InstructVLA hiểu đây là lệnh ngầm để dọn bàn và đặt đồ uống — trong khi OpenVLA đứng im hoặc thực hiện sai action.
InstructVLA vs Các Approach Khác
InstructVLA không phải là nghiên cứu đầu tiên về instruction following cho robot, nhưng cách tiếp cận của nó khác biệt:
| Approach | Cách làm | Nhược điểm |
|---|---|---|
| OpenVLA | Fine-tune toàn bộ LLM trên action data | Mất ngôn ngữ capability, action coarse |
| SpatialVLA | Thêm spatial token, không tập trung ngôn ngữ | Tốt về spatial nhưng yếu instruction |
| π0 | Diffusion decoder, VLM frozen | Tốt nhưng không train VLM + action jointly |
| GPT-4o + Action Expert | LLM plan + separate robot controller | Latency cao, không end-to-end |
| InstructVLA | MoE LoRA + VLA-IT co-training | Training phức tạp hơn, cần nhiều GPU |
InstructVLA chọn con đường khó hơn (end-to-end, joint training) nhưng kết quả tốt hơn đáng kể ở instruction following tasks.
Bài Học Kỹ Thuật cho Practitioner
Nếu bạn muốn áp dụng ý tưởng của InstructVLA vào project của mình, đây là những điểm then chốt:
1. Đừng bao giờ fine-tune full model trên action data nếu muốn giữ ngôn ngữ capability. Dùng PEFT (LoRA, MoE LoRA) và chỉ mở freeze một số layer.
2. Dataset quality > dataset quantity. 650K mẫu được annotate bởi GPT-4o với 4 loại annotation phong phú tốt hơn nhiều so với 6.5M mẫu annotation đơn giản.
3. Multimodal co-training ratio rất quan trọng. Ratio 1:7 được tối ưu qua nhiều ablation — nếu implement lại, nên chạy ablation trên dataset của mình thay vì giả định ratio này luôn đúng.
4. Action queries là key innovation. Thay vì decode trực tiếp từ LLM output, đặt một lớp learnable query ở giữa giúp chiết xuất thông tin phù hợp và giảm interference giữa language head và action head.
5. SimplerEnv-Instruct là benchmark rất có giá trị. Nếu bạn đang phát triển VLA, hãy dùng benchmark này thay vì chỉ test SimplerEnv thông thường — nó phản ánh thực tế hơn nhiều về instruction generalization.
Kết Luận
InstructVLA giải quyết một vấn đề thực sự quan trọng: làm sao để robot vừa "làm giỏi" vừa "hiểu giỏi" mà không phải hi sinh cái này cho cái kia. Thông qua VLA-IT, MoE LoRA, và 650K mẫu dữ liệu chất lượng cao, paper chứng minh rằng điều này hoàn toàn khả thi.
+96% so với OpenVLA trên instruction following, 95.8% trên LIBERO, và performance thực tế ấn tượng trên WidowX và Franka là những con số đủ để InstructVLA trở thành một trong những VLA framework đáng tham khảo nhất cho bất kỳ ai đang xây dựng manipulation system cần hiểu ngôn ngữ tự nhiên.
Resources:
- Paper: arXiv 2507.17520
- GitHub: InternRobotics/InstructVLA
- Dataset: ShuaiYang03/VLA_Instruction_Tuning
- Project page: yangs03.github.io/InstructVLA_Home



