LeRobot documentation
FineART-VLA
FineART-VLA
FineART-VLA được xây dựng dựa trên π0.5 từ Physical Intelligence và phiên bản mã nguồn mở openpi của nó, thông qua chính sách Pi05 của LeRobot. Nó mở rộng nền tảng này bằng một đầu ngôn ngữ PaliGemma có thể huấn luyện và một thời gian chạy (runtime) luân phiên giữa việc tạo ngôn ngữ và tạo hành động. Một checkpoint duy nhất có thể dự đoán một tác vụ con cấp thấp, tùy chọn cập nhật bộ nhớ hoặc trả lời các câu hỏi thị giác, và điều kiện hóa chuyên gia hành động flow-matching của nó dựa trên văn bản đó.
Sử dụng Pi05 khi bạn chỉ cần các hành động có điều kiện theo tác vụ. Sử dụng FineART-VLA khi chính sách phải tạo ra hoặc sử dụng ngôn ngữ trung gian trong quá trình rollout.
Cách FineART-VLA khác biệt so với Pi05
| Khả năng | Pi05 | FineART-VLA |
|---|---|---|
| Mô hình hành động | Tiền tố thị giác-ngôn ngữ PaliGemma + chuyên gia hành động Gemma | Kiến trúc cơ sở giống nhau |
| Đầu ngôn ngữ | Chưa được huấn luyện cho việc tạo ra trong thời gian chạy | Bật lại và huấn luyện với cross-entropy văn bản |
| Điều kiện hóa hành động | Nhiệm vụ tập | Nhiệm vụ con cấp thấp đang hoạt động cùng với trạng thái robot đã được chuẩn hóa |
| Mục tiêu huấn luyện | Hành động khớp dòng | Các hành động Flow, văn bản được chọn theo công thức và các token hành động FAST tùy chọn |
| Yêu cầu về bộ dữ liệu | Hình ảnh chuẩn, trạng thái, hành động và tác vụ | Các trường tương tự cùng với chú thích ngôn ngữ cho mọi khả năng ngôn ngữ mà bạn huấn luyện |
| Rollout | Chính sách từ tác vụ đến hành động trực tiếp | Vòng lặp nhiệm vụ → nhiệm vụ con → hành động theo phân cấp, với bộ nhớ và VQA tùy chọn |
FineART-VLA có thể khởi tạo từ một checkpoint của Pi05. Kiến trúc policy vẫn tương thích, trong khi FineART-VLA xây dựng các processor riêng của mình để đảm bảo nhãn recipe và nhãn FAST không bị thay thế một cách âm thầm bởi bộ xử lý của Pi05.
Cài đặt
Cài đặt LeRobot với các phụ thuộc của FineART-VLA:
git clone https://github.com/huggingface/lerobot.git
cd lerobot
python -m venv .venv
source .venv/bin/activate
pip install -e ".[fineart_vla]"Phần bổ sung fineart_vla bao gồm các phụ thuộc của PaliGemma/FAST. Đối với các kernel huấn luyện hợp nhất tùy chọn trên Linux với GPU CUDA, hãy cài đặt ".[fineart_vla_kernels]" thay thế. Nó thêm liger-kernel và gói kernels của Hugging Face được sử dụng bởi các backend FlashRT. Liger được kích hoạt tùy chọn bằng --policy.use_liger_kernels=true: nó vá RoPE/GeGLU của PaliGemma trong transformers cho toàn bộ tiến trình, do đó các policy dựa trên PaliGemma khác được nạp trong cùng tiến trình cũng sẽ chạy với các kernel hợp nhất.
Chuẩn bị dữ liệu có chú thích ngôn ngữ
FineART-VLA không suy luận các tác vụ con có giám sát từ một tập dữ liệu LeRobot thông thường trong quá trình huấn luyện. Tập dữ liệu phải chứa các mục tiêu ngôn ngữ được sử dụng bởi công thức (recipe) đã chọn trong các cột tùy chọn language_persistent và language_events.
Tối thiểu, hãy chú thích một dòng thời gian subtask liên tục để mỗi khung hình huấn luyện đều có một chỉ thị cấp thấp đang hoạt động. Chỉ thêm chú thích memory, VQA, xen ngang và giọng nói nếu công thức huấn luyện các khả năng đó.
FineART-VLA nhúng công thức mặc định của nó trong FineARTVLAConfig, giống như EO-1. Nó lấy mẫu 30% cho việc dự đoán tác vụ cấp cao → tác vụ con và 70% cho việc huấn luyện hành động điều kiện theo tác vụ con cấp thấp. Mỗi cấu hình sở hữu từ điển công thức của riêng nó, và các checkpoint được lưu trữ sẽ mang từ điển đó vào suy luận.
Sử dụng --policy.recipe_path=/path/to/custom.yaml để ghi đè mặc định.
Các recipe dùng chung trong src/lerobot/configs/recipes/ giữ nguyên ngữ nghĩa của nhánh main;
FineART-VLA không thay thế chúng. Để huấn luyện chỉ theo mục tiêu, hãy dùng một recipe inline với
một thông điệp người dùng cấp thấp chứa ${task}, hoặc đặt recipe=None và
tắt các tổn thất text/FAST cho pipeline PI05 thuần túy.
Mặc định, suy luận được phân rã thành π(a|o, subtask)·π(subtask|o, task). Một công thức chuỗi liên hợp tùy chỉnh cần một bộ xử lý thời gian thực tương ứng để hiển thị nhiệm vụ và phần span do trợ lý tạo ra với các dấu hiệu nhân quả giống hệt như trong huấn luyện. Bộ xây dựng prompt liên hợp phía chính sách cũ không còn được sử dụng bởi rollout.
Rollout chịu trách nhiệm về nhịp độ lập kế hoạch (--autosteer_interval_s=3), các lệnh tương tác và lịch trình đồng bộ/RTC. FineART-VLA chỉ tạo văn bản khi được truy vấn; các lệnh hành động thông thường không bao giờ tạo thêm một tác vụ con nào mà runtime không biết.
Bảng ghi chú tạm thời (scratchpad) kết hợp bộ nhớ/con tác vụ không phải là mặc định và đòi hỏi một công thức tùy chỉnh cùng bộ điều khiển thời gian thực nhận thức bộ nhớ. Giữ memory_scratchpad=false cho việc tạo con tác vụ thông thường; các checkpoint scratchpad cũ hơn vẫn giữ nguyên cơ chế bảo vệ rõ ràng chống lại việc truyền các phản hồi kết hợp trực tiếp sang điều khiển hành động.
Sử dụng lerobot-annotate để tạo các cột này. Kho chứa một trình khởi chạy Hugging Face Jobs mà bạn có thể chỉnh sửa cho bộ dữ liệu nguồn và đích của mình. Đối với một lần chạy chú thích cục bộ, trước tiên hãy cài đặt pip install -e ".[annotations]":
HF_TOKEN=hf_... uv run python examples/annotations/run_hf_job.py
Trước khi chạy huấn luyện dài, hãy kiểm tra một số tập (episodes) và xác minh rằng các tác vụ con (subtasks) đúng về mặt thời gian và bao phủ toàn bộ bản demo. Xem Pipeline chú thích để biết về việc tạo và xác thực, và Cột ngôn ngữ và công thức để biết về schema và bộ phân giải công thức.
If a dataset has no language columns, recipe rendering becomes a no-op and FineART-VLA falls back to the plain Pi05 prompt path. This is useful for compatibility but does not train the language planner.
Huấn luyện FineART-VLA
Ví dụ này khởi tạo FineART-VLA từ lerobot/fineart_vla_base, checkpoint được huấn luyện giữa chừng trên FineART để dự đoán subtask tiếp theo của chính nó, và huấn luyện công thức subtask 70/30 được nhúng. --policy.path nạp cấu hình riêng của checkpoint cơ sở, nhờ đó quá trình fine-tuning giữ nguyên bố cục token FAST (fast_skip_tokens) và công thức mà checkpoint cơ sở đã được huấn luyện; các cờ --policy.* khác sẽ ghi đè lên cấu hình đó.
lerobot-train \
--dataset.repo_id=${HF_USER}/my_language_annotated_dataset \
--policy.path=lerobot/fineart_vla_base \
--policy.tokenizer_max_length=256 \
--policy.dtype=bfloat16 \
--policy.device=cuda \
--policy.freeze_vision_encoder=false \
--policy.gradient_checkpointing=true \
--batch_size=8 \
--steps=30000 \
--output_dir=outputs/fineart_vla \
--job_name=fineart_vla \
--trackio.enable=trueBắt đầu với một lần chạy nhỏ và xác nhận trên bảng điều khiển Trackio rằng các giá trị loss hoạt động như mong đợi trước khi mở rộng quy mô.
Để bắt đầu từ checkpoint PI0.5 thuần túy, hãy giữ nguyên cấu hình mặc định của FineART-VLA và trỏ --policy.pretrained_path đến nó: --policy.type=fineart_vla --policy.pretrained_path=lerobot/pi05_base. Các trọng số định dạng OpenPI sẽ được chuyển đổi khi tải, và các tổn thất văn bản và FAST sẽ bắt đầu từ đầu ngôn ngữ của PaliGemma thay vì từ huấn luyện giữa của FineART.
Các điều khiển chính cho huấn luyện
| Tùy chọn | Mặc định | Mục đích |
|---|---|---|
policy.recipe_path | None | Ghi đè tùy chọn cho công thức phụ 70/30 được nhúng |
policy.text_loss_weight | 1.0 | Trọng số entropy chéo cho đầu ngôn ngữ; 0 để tắt huấn luyện văn bản |
policy.flow_loss_weight | 10.0 | Trọng số tổn thất dòng hành động liên tục |
policy.enable_fast_action_loss | true | Thêm giám sát token hành động FAST rời rạc |
policy.fast_action_loss_weight | 1.0 | Trọng số entropy chéo FAST |
policy.knowledge_insulation | true | Chặn gradient của loss hành động qua đường dẫn K/V của VLM |
policy.flow_num_repeats | 5 | Tái sử dụng một tiền tố VLM cho các mục tiêu khử nhiễu độc lập |
policy.lm_head_lr_scale | 1.0 | Tăng giảm tốc độ học của đầu ngôn ngữ; 1.0 sử dụng tốc độ cơ sở |
policy.fast_skip_tokens | 1152 | FAST id offset; bỏ qua <seg>+<loc> để VQA và FAST không bao giờ xung đột |
fast_skip_tokens=1152 đặt các mã FAST nằm dưới khoảng <loc> của PaliGemma.
Quy ước pi0-FAST của openpi là 128 (FAST chiếm các id <loc>); chỉ dùng giá trị đó
để duy trì tương thích trọng số với các checkpoint được huấn luyện theo cách đó, và
tránh kết hợp nó với công thức VQA, vì các mục tiêu <loc> của công thức đó sẽ chia sẻ
các hàng embedding với các mã FAST.
Trọng số loss là điểm khởi đầu, không phải các hằng số độc lập với dataset. Theo dõi flow loss và text/FAST losses riêng biệt, và kiểm tra các subtask được tạo ra thay vì chỉ chọn checkpoint dựa trên tổng loss.
Trình phân từ FAST dành riêng cho bộ dữ liệu
Mặc định (--policy.auto_fit_fast_tokenizer=true), quá trình huấn luyện sẽ khớp một FAST tokenizer trên tập dữ liệu huấn luyện, bắt đầu từ --policy.action_tokenizer_name, và lưu bộ nhớ đệm tại --policy.fast_tokenizer_cache_dir. Điều này cũng áp dụng khi tinh chỉnh từ một checkpoint như lerobot/fineart_vla_base, để các mục tiêu FAST khớp với phân phối hành động của robot mới. Tokenizer đã khớp được lưu bên trong các sản phẩm processor của checkpoint, do đó suy luận sẽ tái sử dụng nó. Đặt --policy.auto_fit_fast_tokenizer=false để sử dụng action_tokenizer_name không thay đổi.
Hiệu suất huấn luyện
FineART-VLA sử dụng các đường dẫn huấn luyện được tối ưu hóa theo mặc định:
- các batch lặp lại các mục tiêu luồng và phép chiếu hậu tố thay vì phát lại các thao tác nhỏ trong Python;
- caches các action masks không đổi và tính toán các vị trí RoPE một lần cho mỗi bước forward;
- chọn triển khai entropy chéo text/FAST từ hình dạng và độ thưa của đích;
- bỏ qua quá trình truyền ngược VLM/thị giác đã chết về mặt toán học trên các lô chỉ có luồng, được cách ly về mặt kiến thức;
- sử dụng checkpointing lớp SigLIP không tái nhập (non-reentrant) bản địa khi checkpointing gradient được bật; và
- giữ lại các kernel Liger RoPE/GeGLU trong khi tránh patch LayerNorm chậm hơn ở các hình dạng SigLIP.
Các backend huấn luyện tùy chọn bị vô hiệu hóa theo mặc định:
| Tùy chọn | Khi nào nên thử |
|---|---|
policy.use_flashrt_adarms=true | RMSNorm thích ứng đã hợp nhất và phần dư có cổng trên các GPU CUDA được hỗ trợ |
policy.use_compiled_text_ce=true | Các bucket CE materialized-logit đã được biên dịch |
policy.use_compiled_vision=true | Chỉ biên dịch phần thị giác khi lượt xử lý thị giác không có gradient |
policy.use_flex_attention=true | Các cấu hình CUDA được profile với cách ly kiến thức và flow_num_repeats > 1; nếu không, SDPA sẽ được sử dụng |
policy.use_manual_attention=true | Các hình dạng được profile rõ ràng mà ở đó attention vật chất hóa nhanh hơn |
policy.manual_attention_scope=action | Hạn chế chú ý thủ công đối với các truy vấn hành động |
Không bật mọi backend một cách mù quáng. Flex và manual attention là hai lựa chọn loại trừ lẫn nhau, và các phương án thay thế cho attention/AdaRMS đòi hỏi phải cách ly kiến thức. Cấu hình đạt hiệu suất cao nhất trong benchmark đã sử dụng compiled text CE và FlashRT AdaRMS, đồng thời vô hiệu hóa Flex/manual attention và compiled vision.
Hiệu suất suy luận
FineART-VLA có hai vòng lặp suy luận, và cả hai đều tránh việc mã hóa lặp lại phần tiền tố đa phương thức đắt đỏ:
- Action denoising mã hóa tiền tố ảnh/ngôn ngữ một lần, tái sử dụng bộ nhớ đệm KV của nó qua các bước flow, xây dựng mặt nạ hậu tố hành động trên thiết bị, và cắt bộ nhớ đệm K/V hậu tố tạm thời thay vì nhân bản bộ nhớ đệm tiền tố. Nó tạo lịch trình bước thời gian trên thiết bị một lần cho mỗi khối, giữ nguyên phép tính bước thời gian theo lịch sử. Chi tiết triển khai này không đảm bảo tăng tốc đầu-cuối mà không có benchmark.
- Giải mã ngôn ngữ sử dụng bộ nhớ đệm KV tự hồi quy, vì vậy mỗi token mới chỉ xử lý token được lấy mẫu đối với các khóa hình ảnh/ngôn ngữ đã được đệm thay vì chạy lại toàn bộ phần tiền tố.
Runtime dùng chung chạy ngôn ngữ và hành động ở các tốc độ khác nhau. Tăng --autosteer_interval_s khi một subtask vẫn còn hiệu lực lâu hơn, hoặc dùng /subtask để cung cấp trực tiếp một chỉ thị mà không cần tạo ngôn ngữ. Khoảng thời gian dài hơn làm giảm chi phí tạo nhưng cũng làm chậm quá trình lập kế hoạch lại.
Chạy một checkpoint
Sử dụng lerobot-rollout với cấu hình robot/camera khớp với checkpoint, --interactive=true, và --autosteer_interval_s=3. Chọn --inference.type=sync hoặc --inference.type=rtc. Trong terminal tương tác, /autosteer <goal> kích hoạt các tác vụ con được tạo ra, /subtask <instruction> cung cấp một tác vụ con thủ công, và /start bắt đầu điều khiển robot. Xem Điều khiển ngôn ngữ tương tác để biết cách thiết lập phần cứng đầy đủ, hành vi an toàn và các điều khiển ghi hình. Các tùy chọn CLI của adapter trước đây là --sim, --mode, và --high_level_hz không thuộc về giao diện này.
Xử lý sự cố
- Độ dốc gradient flow-loss lớn: FineART-VLA chạy KI-off joint prefix/action attention trên backend toán học của PyTorch SDPA với phép toán attention FP32, sau đó chuyển đổi kết quả về lại dtype của mô hình (PI0.5 gốc vẫn giữ attention dạng eager). Cách này tránh được attention độ chính xác giảm, vốn có thể làm mất ổn định gradient ở các bước thời gian flow thấp với các kích hoạt query/key lớn. Các checkpoint hiện có và các lớp chuẩn hóa không thay đổi; KI-off vẫn huấn luyện thông qua các key và value của VLM. Hãy theo dõi
flow_loss,text_lossvà chuẩn gradient trước khi cắt riêng biệt, thay vì chỉ dựa vào tổng loss hữu hạn. - Không có tổn thất văn bản hoặc các tác vụ con được tạo: xác nhận công thức được chọn có thể gắn các chú thích lên các khung hình được lấy mẫu và
policy.text_loss_weight > 0. - Các tác vụ con trông hợp lý nhưng hành động thất bại: kiểm tra ranh giới tác vụ con, thống kê trạng thái/hành động đã chuẩn hóa, và đảm bảo các mẫu công thức cấp thấp có mặt.
- Text bị thu gọn thành các token lặp lại hoặc token vị trí: kiểm tra độ bao phủ của text-target, tốc độ học của language-head, và sự cân bằng giữa các loss của flow, FAST và text.
- Thiếu bộ nhớ: hãy giảm kích thước batch trước, sau đó bật gradient checkpointing. Không bật các backend attention đã biên dịch hoặc thay thế mà chưa profile bộ nhớ trên số lượng camera của bạn.
- Triển khai chậm: tách biệt độ trễ hành động khỏi độ trễ ngôn ngữ, sau đó tinh chỉnh
--autosteer_interval_s(tần suất tạo một tác vụ con mới) và--policy.num_inference_steps(các bước khử nhiễu của flow).
Trích dẫn
Nếu bạn sử dụng FineART-VLA hoặc bộ dữ liệu FineART, vui lòng trích dẫn:
@misc{choghari2026fineart,
title = {FineART: Fine-Grained Annotated Robotic Trajectory Dataset and Vision-Language-Action Model for Bimanual Manipulation},
author = {Choghari, Jade and Kooijmans, Pepijn and Agarwal, Mansi and Ciftci, Yusuf Umut and Doriwala, Aseem and Weaver, Catherine and Sivapurapu, Mouli and Yang, Kai and Lee, Jackson and Wolf, Thomas and Mannam, Pragna},
year = {2026},
}FineART-VLA được xây dựng dựa trên π₀.₅ và knowledge insulation từ Physical Intelligence.
Giấy phép
Mô hình này tuân theo Giấy phép Apache 2.0, nhất quán với kho OpenPI gốc mà khung xương PI0.5 được điều chỉnh từ đó.
Update on GitHub