LeRobot documentation
OpenGalaxea G0.5
OpenGalaxea G0.5
G0.5 là một mô hình vision-language-action Qwen3.5-2B có khả năng tạo ra suy luận và hành động mang tính thân thể (embodied) trong một luồng duy nhất. LeRobot phơi bày (expose) giai đoạn hành động dưới dạng System 1 và giai đoạn chain-of-thought bản chọn (optional) dưới dạng System 2. Chúng không phải là các mô hình riêng biệt: runtime thu được cả hai từ một lần gọi suy luận (inference call), và hành động vẫn được điều kiện hóa (conditioned) dựa trên suy luận.
Tổng quan về Mô hình
Transformers bao gồm backbone đa phương thức Qwen3.5 bản địa, vision tower và processor. Tuy nhiên, G0.5 không phải là checkpoint Qwen3_5ForConditionalGeneration tiêu chuẩn: nó bổ sung đường dẫn proprioception/action, action expert, flow-matching head, ActionCodec và giải mã CoT/action thống nhất. LeRobot triển khai các thành phần G0.5 đó một cách bản địa và nạp các checkpoint đã chuyển đổi mà không cần gói Python OpenGalaxea, Hydra hay OmegaConf.
Những gì Tích hợp LeRobot Bao Gồm
- Cấu hình
policy.type=g05chuẩn và tải checkpoint từ Hub. - Tạo hành động ActionCodec liên tục và rời rạc bản địa.
- Tùy chọn suy luận và tạo hành động System 2 trong cùng một lượt.
- Bộ xử lý camera, trạng thái, hành động, chuẩn hóa và prompt có thể xuất chuỗi.
- Fine-tuning thông qua
lerobot-trainvà suy luận thông qualerobot-rollout. - LIBERO, RoboTwin, SO-101 và các hợp đồng checkpoint R1 Lite/Pro đã được phát hành.
Mã tích hợp G0.5 (
src/lerobot/policies/g05) và các checkpoint sử dụng G0.5 Community License, bao gồm các hạn chế phi thương mại; Apache-2.0 không áp dụng cho các tài liệu đó. Các checkpoint đã chuyển đổi đi kèm giấy phép đó dưới dạngLICENSEcùng vớiNOTICEcủa nó, và không được Galaxea bảo trợ.
Điểm kiểm tra
Hợp đồng đầu vào và đầu ra
| Checkpoint | Đường dẫn hành động đã phát hành | Gốc → bố cục chính sách | Camera | Dự đoán | Đã thực thi | Chuẩn hóa |
|---|---|---|---|---|---|---|
g05_base | AR ActionCodec hoặc flow được chọn một cách rõ ràng | Các khớp R1 Lite/Pro → bố cục toàn thân 27D | đầu + cả hai cổ tay, lịch sử 6 bước | 32 | 16 | z-score từng bước |
g05_libero | Luồng liên tục | EEF phải 6 + kẹp 1 → bố cục nhóm 20D | bên ngoài, cổ tay phải | 32 | 10 | từng bước q01/q99 |
g05_robotwin20 | Luồng liên tục | hai cánh tay 6+gripper → bố cục nhóm 20D | cao, cổ tay trái, cổ tay phải | 32 | 8 | từng bước q01/q99 |
g05_so101 | Flow hoặc AR ActionCodec + CoT bản địa | các khớp cánh tay phải 6 → bố cục nhóm 20D | bên ngoài, cổ tay trái + phải tùy chọn | 32 | 16 | từng bước q01/q99 |
Mỗi checkpoint đã chuyển đổi lưu trữ cấu hình model và processor đã được giải quyết, metadata ActionCodec, thống kê, prompt template chính xác, và giấy phép.
Điểm kiểm tra đã chuyển đổi
| Kho lưu trữ | Hợp đồng |
|---|---|
lerobot/g05_base | 27D base, bộ xử lý R1 Lite |
lerobot/g05_libero | 20D LIBERO |
lerobot/g05_robotwin20 | 20D RoboTwin |
lerobot/g05_so101 | 20D SO-101 (hồ sơ so100) |
Các checkpoint này được phát hành theo Giấy phép Cộng đồng G0.5 phi thương mại; xem Giấy phép.
lerobot/g05_base cung cấp trọng số mô hình 27D đó, cả hai đầu action, tokenizer ActionCodec, và hợp đồng thống kê/xử lý sáu bước R1 Lite đã phát hành.
Yêu cầu cài đặt
Cài đặt LeRobot với phụ thuộc G0.5 Transformers:
uv sync --extra g05 --extra testCài đặt
flash-linear-attentionđể huấn luyện và suy luận trên GPU. Hầu hết các lớp decoder của Qwen3.5 là Gated DeltaNet linear attention, và nếu không có nó, Transformers sẽ chuyển sang một kernel PyTorch chậm hơn nhiều, ghi log “The fast path is not available”. Đây là Triton thuần túy, nên cài đặt không cần build:uv pip install flash-linear-attentionViệc huấn luyện nhanh hơn khoảng 1,5 lần khi sử dụng nó và tiêu thụ ít bộ nhớ hơn, với các giá trị loss giống hệt nhau. Bước đầu tiên mất thêm khoảng 20 giây trong khi Triton biên dịch các kernel của nó.
SO-100 và SO-101 dùng chung token cấu hình so100 đã phát hành và hợp đồng cánh tay phải sáu khớp. Camera cổ tay trái bị thiếu sẽ được đệm bằng số không.
Cách sử dụng
Tải checkpoint khớp với target embodiment bằng tùy chọn chuẩn --policy.path. Cấu hình được đóng gói sẽ chọn đúng action head, thứ tự camera, kích thước, chuẩn hóa và execution horizon.
Hệ thống tương tác Runtime của System 1 và System 2
G0.5 phát ra suy luận và hành động từ một luồng suy luận duy nhất: chuỗi suy nghĩ được tạo ra trong cùng một lượt với khối dữ liệu, và hành động được điều kiện dựa trên nó.
policy.runtime_system trong checkpoint chọn đường dẫn. System 1 thực thi trực tiếp ActionCodec hoặc flow chunk được chọn và không tạo ra CoT:
lerobot-rollout \
--policy.path=lerobot/g05_so101 \
--policy.runtime_system=system1 \
--task="pick up the cup" \
--fps=30System 2 chỉ khả dụng khi metadata của checkpoint đóng gói có predict_cot=true. Chuỗi suy luận (chain of thought) của nó được trả về như dự đoán của policy: predict_action_chunk trả về một batch PolicyOutput chứa chunk dưới "action" và, dưới "prediction", mỗi subtask CoT của từng env (language["subtask"],
một chuỗi cho mỗi env) và các hộp (boxes) dưới dạng phân số xyxy trong khoảng [0, 1] trên policy.config.bbox_camera (boxes[camera], một câu trả lời cho mỗi env), và select_action trả về nó cùng với hành động đầu tiên của mỗi chunk. Mô hình không đặt tên
cho camera: các mục tiêu BBox của nó đều được vẽ trên camera đó trong quá trình huấn luyện. System 1
không tạo CoT và chỉ trả về các hành động thuần.
output = policy.predict_action_chunk(batch)
print(output["prediction"])
# {"language": {"subtask": ["grasp the cup"]},
# "boxes": {"observation.images.top": [{"detections": [{"label": "cup", "bbox": [...]}]}]}}Với --display_data=true, lerobot-rollout hiển thị subtask và vẽ các hộp bao quanh camera bbox trong Rerun hoặc Foxglove.
Điều khiển phiên từ stdin
--interactive=true điều khiển quá trình rollout bằng các lệnh dạng chat trong khi phần cứng và policy vẫn được kết nối và sẵn sàng. Robot sẽ không di chuyển cho đến khi bạn nhập /start, điều này giúp đây là cách an toàn để khởi động một SO-101 vật lý: hãy xác nhận các chỉ số camera và cổng cánh tay trước, sau đó mới bắt đầu.
lerobot-rollout \
--interactive=true \
--policy.path=lerobot/g05_so101 \
--policy.device=cuda \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_follower \
--robot.cameras='{exterior: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, wrist_right: {type: opencv, index_or_path: 2, width: 640, height: 480, fps: 30}}' \
--task="pick up the cube" \
--fps=30| Lệnh | Hiệu ứng |
|---|---|
/start | bắt đầu (hoặc khởi động lại) vòng lặp kiểm soát chính sách |
/subtask <text> | đặt chỉ thị mà chính sách tuân theo |
/vqa <text> | không được hỗ trợ trên G0.5 (xem bên dưới) |
/autosteer <goal>\|off | để chính sách tự chọn các tác vụ con hướng tới mục tiêu cấp cao |
/reset | dừng chuyển động, trở về vị trí ban đầu, khôi phục tác vụ |
/stop | kết thúc phiên và tắt |
/help | hiển thị danh sách lệnh |
/autosteer cần một checkpoint có predict_cot=true và các câu trả lời từ quan sát trực tiếp, do đó lệnh này sẽ bị từ chối cho đến khi /start đang chạy. Nó in ra subtask được chọn dưới dạng Autosteer subtask:, và --autosteer_interval_s xác định số giây chuyển động trôi qua giữa hai truy vấn lập kế hoạch lại.
Chọn runtime phù hợp với cách bài toán được đưa ra, như G0.5 đã được huấn luyện:
- Nhiệm vụ cấp cao, không có sự điều hướng: giữ nguyên Hệ thống 2. Mỗi khối dự đoán nhiệm vụ con hiện tại từ nhiệm vụ, sau đó thực hiện hành động trên nó.
/subtaskhoặc/autosteer: sử dụng--policy.runtime_system=system1. Subtask trở thành task và policy tác động trực tiếp lên nó;/autosteervẫn lập kế hoạch cho từng subtask từ goal bằng một truy vấn System 2. System 2 trên một subtask-as-task sẽ lập kế hoạch cho một subtask của subtask, một prompt mà nó không được huấn luyện.
Chọn chuỗi suy luận
--policy.runtime_cot_fields chọn định dạng chain-of-thought đã được huấn luyện của G0.5 mà System 2 sẽ tạo ra trước mỗi chunk. Hành động chú ý đến toàn bộ chuỗi suy nghĩ, do đó bất kỳ nội dung nào trong đó đều điều kiện hóa hành động.
runtime_cot_fields | Lệnh đã được huấn luyện | Chuỗi suy luận được tạo ra |
|---|---|---|
["subtask"] (mặc định) | predict subtask | nhiệm vụ con |
["bbox", "subtask"] | predict bbox, subtask and action | các hộp, sau đó là |
Ví dụ, ["bbox", "subtask"] tạo ra:
BBox: cube <loc0397><loc0717><loc0625><loc0895>|Subtask: pick up the blue cube
["subtask"]tạo ra ít token nhất cho mỗi chunk, do đó là lựa chọn nhanh hơn.["bbox", "subtask"]xác định các đối tượng liên quan trước tiên, từ đó neo subtask và hành động vào trong cảnh. Mỗi box là một nhãn theo sau bởi bốn token vị trí theo thứ tựy1, x1, y2, x2; một token<locNNNN>là tọa độ tính bằng phân số của ảnh nhân với 1024. Các box tham chiếu đến camera BBox (--policy.cot_bbox_camera, mặc định là khe camera không rỗng đầu tiên).
lerobot/g05_base và lerobot/g05_so101 được huấn luyện trên cả hai định dạng; các checkpoint LIBERO và RoboTwin có predict_cot=false và không có System 2. Một lần fine-tune chỉ tạo ra các hộp hữu ích nếu tập dữ liệu của nó có chú thích vqa được ground trên camera BBox (xem Yêu cầu về dữ liệu).
Tại sao /vqa không được hỗ trợ
Đầu ra văn bản của G0.5 không phải là một trợ lý thị giác-ngôn ngữ tổng quát. Nó được huấn luyện để chỉ phát ra các định dạng suy luận (chain-of-thought) nêu trên, sau một trong các chỉ thị cố định của chúng, và prompt của nó không có chỗ cho một câu hỏi tự do. Một câu hỏi /vqa chỉ có thể thay thế cho phần tác vụ, do đó mô hình sẽ trả lời bằng một tác vụ con (và các hộp) cho “tác vụ” đó thay vì một câu trả lời. /autosteer hoạt động vì mục tiêu của nó là một tác vụ, đúng như những gì phần đó kỳ vọng.
Trong chế độ tương tác, --duration giới hạn mỗi phân đoạn /start thay vì toàn bộ phiên.
Yêu cầu về dữ liệu
Bộ dữ liệu phải cung cấp các đặc trưng trạng thái, hành động, camera và tác vụ khớp với hợp đồng của checkpoint đã chọn. Tên camera là tự do: --policy.camera_order liệt kê camera trong bộ dữ liệu cung cấp cho từng ô ảnh của checkpoint, và null để ô trống (điền bằng số 0). Đối với SO-101, các ô là exterior, left wrist và right wrist; left wrist là tùy chọn.
Huấn luyện các mục tiêu ngôn ngữ của System 2 ngoài ra còn yêu cầu các trường CoT được chú thích của checkpoint. Một bản ghi LeRobot thông thường cung cấp giám sát hành động nhưng không tổng hợp nhãn CoT. Hãy tạo các cột ngôn ngữ subtask và vqa có cơ sở bằng lerobot-annotate như đã mô tả trong đường ống chú thích.
Huấn luyện
G0.5 triển khai bề mặt huấn luyện của LeRobot một cách bản địa: forward tính toán entropy chéo của token trợ lý và tổn thất khớp dòng (flow-matching loss), chính sách (policy) phơi bày các nhóm optimizer cho VLM/thị giác/hành động, và checkpoint có thể được lưu, tiếp tục và nạp bởi các script LeRobot thông thường.
Mục tiêu (objective) giữ nguyên ar.ce_weight được đóng gói, ar.ce_z_loss_scale tùy chọn, và fm.fm_weight; tổn thất tự hồi quy (autoregressive loss) bao phủ đồng thời mục tiêu văn bản CoT và ActionCodec.
Ví dụ, tinh chỉnh (fine-tune) checkpoint SO-101 trên một tập dữ liệu LeRobot:
Ví dụ lệnh huấn luyện
export HF_USER=your_hf_username
lerobot-train \
--dataset.repo_id=${HF_USER}/my_so101_dataset_annotated \
--policy.path=lerobot/g05_so101 \
--policy.device=cuda \
--policy.use_language_recipe=true \
--policy.cot_bbox_camera=observation.images.exterior \
--policy.repo_id=${HF_USER}/g05_so101_finetuned \
--policy.private=true \
--output_dir=outputs/train/g05_so101 \
--job_name=g05_so101 \
--batch_size=16 \
--steps=10000 \
--save_freq=1000Công thức tích hợp trộn lẫn ba loại mẫu, giống như hỗn hợp huấn luyện phía nguồn:
- Chuỗi suy luận 4/6: nhiệm vụ, sau đó là mục tiêu BBox và/hoặc Subtask cho chú thích
subtaskvàvqacó căn cứ đang hoạt động tại mốc thời gian đó, rồi đến các hành động. - 1/6 subtask as task: subtask đang hoạt động là chỉ thị, chuyển thẳng sang hành động.
Đây là những gì policy nhìn thấy khi
/subtaskhoặc/autosteerđặt một subtask. - 1/6 thuần túy: nhiệm vụ trực tiếp đến hành động, prompt Hệ thống 1.
Một mẫu suy luận theo chuỗi không có chú thích tại mốc thời gian của nó sẽ huấn luyện prompt thông thường.
Tạo các cột ngôn ngữ subtask và vqa có cơ sở cần thiết bằng lerobot-annotate như đã mô tả trong quy trình chú thích. Công thức tích hợp đọc các hộp được chú thích trên camera BBox: --policy.cot_bbox_camera, mặc định là
vị trí camera không rỗng đầu tiên. Tọa độ hộp phải là phân số [0, 1] của
chiều rộng và chiều cao ảnh, đây là cách lerobot-annotate lưu trữ; các hộp theo pixel
sẽ bị từ chối. Truyền một YAML bên ngoài rõ ràng qua --policy.recipe_path=/path/to/recipe.yaml để huấn luyện một công thức khác: nó được
đọc một lần vào policy.recipe khi cấu hình được xây dựng, vì vậy checkpoint được lưu
giữ nguyên công thức mà nó đã được huấn luyện, ngay cả khi tệp thay đổi sau đó.
Chỉnh huấn luyện điểm kiểm tra cơ sở trên một robot khác
lerobot/g05_base có thể được tinh chỉnh trên một robot mà nó chưa từng gặp. Đặt tên cho robot bằng --policy.embodiment, ví dụ như robot_type của bộ dữ liệu; tên này chính là văn bản Embodiment: của prompt. Cờ này là bắt buộc: nếu không có nó, checkpoint sẽ giữ nguyên embodiment và bảng slot của riêng nó.
Các khớp được đặt vào bố cục cơ bản từ tên khớp của bộ dữ liệu: các khớp có tiền tố left_ sẽ nằm ở cánh tay trái, các khớp còn lại nằm ở cánh tay phải, khớp nào có tên chứa gripper sẽ chiếm slot gripper của cánh tay đó, và phần còn lại sẽ lấp đầy chín slot điều khiển của nó theo thứ tự. Một cánh tay 5 khớp có gripper do đó sẽ lấp đầy các slot 10-14 của cánh tay phải và gripper bên phải, còn một cánh tay 7-DoF sẽ lấp đầy 10-16 và gripper.
Đặt --policy.state_slots và --policy.action_slots để đặt các khớp một cách tường minh. Các slot đã được giải quyết sẽ được lưu cùng với checkpoint đã tinh chỉnh.
Ví dụ dưới đây tinh chỉnh trên một robot một cánh tay được ghi lại bằng camera front và camera wrist. Các ô ảnh của checkpoint gốc là góc nhìn đầu, cổ tay trái và cổ tay phải; một cánh tay nằm bên phải, do đó camera cổ tay của nó chiếm ô cổ tay phải và ô cổ tay trái để trống. Các cờ có giá trị dạng danh sách nhận JSON có dấu nháy.
lerobot-train \
--dataset.repo_id=${HF_USER}/my_robot_dataset_annotated \
--policy.path=lerobot/g05_base \
--policy.embodiment=my_robot \
--policy.camera_order='["observation.images.front", null, "observation.images.wrist"]' \
--policy.n_obs_steps=1 \
--policy.use_language_recipe=true \
--policy.device=cuda \
--policy.repo_id=${HF_USER}/g05_my_robot_finetuned \
--output_dir=outputs/train/g05_my_robot \
--job_name=g05_my_robot \
--batch_size=16 \
--steps=10000--policy.n_obs_steps=1 cung cấp một khung hình cho mỗi camera, giống như các quá trình fine-tune upstream; lịch sử sáu bước của checkpoint gốc làm tăng số lượng ảnh trên mỗi mẫu lên sáu lần.
Normalization sử dụng thống kê của chính dataset (z-score cho checkpoint cơ sở; truyền --policy.normalization_mapping='{"VISUAL": "IDENTITY", "STATE": "QUANTILES", "ACTION": "QUANTILES"}' cho q01/q99). Gripper giữ nguyên giá trị tuyệt đối (relative_exclude_joints=["gripper"] trong checkpoint cơ sở), trong khi các khớp cánh tay được huấn luyện dưới dạng delta. Mục tiêu BBox được lấy từ các câu trả lời vqa có căn cứ, được chú thích trên observation.images.front, vị trí camera đầu tiên không rỗng.
Công thức SO-101 sử dụng AdamW ở 8e-5 với 1.000 bước warmup. Các cấu hình LIBERO và RoboTwin được đóng gói sử dụng công thức 1e-5 đã phát hành của chúng, với lần lượt 1.000 và 500 bước warmup. Tất cả các hồ sơ đều giữ nguyên các nhóm tham số và hệ số nhân tốc độ học của G0.5. Ghi đè chúng để huấn luyện với công thức tối ưu hóa khác:
--policy.optimizer_lr=2e-5 \ --policy.optimizer_backbone_lr_multiplier=0.5 \ --policy.optimizer_vision_lr_multiplier=0.1
Tiếp tục một lần chạy đã lưu với checkpoint LeRobot tiêu chuẩn:
lerobot-train \
--config_path=outputs/train/g05_so101/checkpoints/last/pretrained_model/train_config.json \
--resume=trueCác tham số cấu hình chính
| Tham số | Mô tả |
|---|---|
policy.embodiment | Tên robot được viết trong prompt; chọn một bảng slot đã phát hành |
policy.state_slots, policy.action_slots | Vị trí slot của chính sách-explicit cho mỗi giá trị trạng thái/hành động thô |
policy.camera_order | Ảnh slot cho camera của Dataset tại mỗi checkpoint; null để trống |
policy.action_head | Sử dụng đường dẫn hành động flow hoặc actioncodec của checkpoint |
policy.runtime_system | Chọn suy luận và hành động trực tiếp theo System 1 hoặc tích hợp theo System 2 |
policy.runtime_cot_fields | Chuỗi suy luận Hệ thống 2: ["subtask"] hoặc ["bbox", "subtask"] |
policy.dtype | bfloat16 (hỗ trợ độ chính xác hỗn hợp trên CUDA) hoặc float32 |
policy.chunk_size | Số lượng hành động được dự đoán trong mỗi khối |
policy.n_action_steps | Số lượng hành động được thực hiện trước khi lập kế hoạch lại |
policy.use_language_recipe | Bật công thức giám sát ngôn ngữ tích hợp của G0.5 |
policy.recipe_path | Đọc Recipe YAML một lần vào policy.recipe (không lưu) |
policy.optimizer_backbone_lr_multiplier | Hệ số nhân tốc độ học cho bộ khung ngôn ngữ |
policy.optimizer_vision_lr_multiplier | Hệ số nhân tốc độ học cho tháp thị giác |
Đầu hành động, số chiều, chân trời, các chế độ bộ xử lý và chuẩn hóa được lấy từ checkpoint; các ghi đè không tương thích sẽ bị từ chối trong quá trình tải.
Đánh giá
Với trình mô phỏng LIBERO đã được cài đặt, hãy đánh giá checkpoint LIBERO với tên camera và điều khiển tương đối của nó:
lerobot-eval \
--policy.path=lerobot/g05_libero \
--policy.device=cuda \
--env.type=libero \
--env.task=libero_10 \
--env.control_mode=relative \
--env.observation_height=512 \
--env.observation_width=512 \
'--env.camera_name_mapping={"agentview_image": "image", "robot0_eye_in_hand_image": "wrist_image"}' \
--eval.batch_size=1 \
--eval.n_episodes=5 \
--seed=0 \
--output_dir=outputs/g05-libero-lerobot-evalTham khảo
Giấy phép
Mã tích hợp G0.5 dưới src/lerobot/policies/g05 được điều chỉnh từ
bản triển khai của Galaxea và, giống như trọng số checkpoint, được cấp phép theo G0.5 Community License,
không phải Apache-2.0 của LeRobot.
Hãy xem xét và chấp nhận giấy phép đó trước khi tải xuống hoặc sử dụng một checkpoint.
Fine-tune là một tác phẩm phái sinh của G0.5. Khi bạn phân phối lại, hãy bao gồm các tệp LICENSE và NOTICE của checkpoint mà nó được phái sinh từ đó: LeRobot không sao chép chúng cho bạn, nhưng thẻ mô tả model được tạo ra sẽ nêu rõ giấy phép.