
Huấn luyện một Action Chunking Transformer từ đầu trên SO-100 với lerobot: cấu hình act, chunk_size và n_action_steps, lịch trình 100000 bước, suy luận 20 ms.
ACT là một trường hợp đặc biệt trong số các chính sách SO-100. GR00T N1.7 và N1.5 bắt đầu từ nvidia/GR00T-N1.7-3B và nvidia/GR00T-N1.5-3B, Pi0.5 từ lerobot/pi05_base. ACT bắt đầu từ con số 0: không có điểm kiểm tra cơ sở nào, vì nó không phải là một mô hình nền tảng. Đó là một bộ biến đổi khoảng 80 triệu tham số mà bạn huấn luyện từ đầu cho một tác vụ, trên cánh tay robot của bạn, dưới điều kiện ánh sáng của bạn.
Đó cũng là lý do tại sao nó thực hiện một bước điều khiển trong 20 ms trong khi một VLA 3 tỷ tham số cần 152 đến 485 ms, và chi phí 1 đến 3 USD mỗi lần chạy thay vì 4 đến 12. Hướng dẫn này sẽ đi theo lộ trình thủ công với lerobot trên một SO-100: ghi lại, cấu hình act config, những gì chunk_size và n_action_steps điều khiển, lịch trình 100000 bước, quá trình triển khai. Sau đó là cùng một công việc trên AY-Robots, bao gồm cả những trường hợp nền tảng không hỗ trợ.
Những điều bạn cần biết
- •ACT huấn luyện từ đầu: không có mô hình cơ sở, không tiền huấn luyện, không đầu vào ngôn ngữ. Một điểm kiểm tra, một tác vụ.
- •Bài báo: khoảng 80 triệu tham số, khoảng 5 giờ trên RTX 2080 Ti 11 GB, suy luận 0.01 s.
- •Mặc định của lerobot: chunk_size 100, n_action_steps 100, batch 8, lr 1e-5, 100000 steps, seed 1000.
- •Trên AY-Robots: 20 ms mỗi bước, nhanh nhất trong năm. Tối thiểu 50 tập, LeRobot v3.0, một card 24 GB, 1 đến 3 USD mỗi lần chạy.
- •Nó thắng trên một tác vụ đã từng thấy, và thua ngay khi bạn muốn điều kiện hóa ngôn ngữ.
Đã kiểm tra ngày 23 tháng 8 năm 2026 với lerobot 0.6.x: pyproject.toml on main reads version = "0.6.2", newest tag v0.6.1, ngày 3 tháng 8 năm 2026. Một hướng dẫn bắt đầu với python lerobot/scripts/train.py ra đời trước các điểm vào console lerobot-train, lerobot-record and lerobot-rollout.
ACT thực sự là gì
Action Chunking with Transformers đến từ bài báo ALOHA, Học thao tác hai tay chi tiết với phần cứng chi phí thấp, của Zhao, Kumar, Levine và Finn, arXiv, ngày 23 tháng 4 năm 2023. Thiết bị ghi hình ở tần số 50 Hz với bốn webcam truyền phát 480x640 ở 30 khung hình/giây: hai trên bộ kẹp, một trên đỉnh, một phía trước. Tóm tắt tuyên bố sáu kỹ năng đạt tỷ lệ thành công từ 80 đến 90 phần trăm, trong đó có mở một cốc đựng gia vị trong mờ và lắp pin, từ 10 phút trình diễn.
Phần thân bài hữu ích hơn khi lập kế hoạch một buổi ghi hình: 50 lần trình diễn cho mỗi nhiệm vụ, ngoại trừ Thread Velcro là 100 lần, tương đương 10 đến 20 phút dữ liệu và 30 đến 60 phút thời gian thực tế sau khi tính cả các lần đặt lại. Tỷ lệ thành công cũng không đồng đều: Thread Velcro kết thúc ở 20 phần trăm, Put On Shoe ở 92, Cup Open 84, Prep Tape 64.
| Siêu tham số | Bài báo ALOHA, Bảng III | lerobot trên main |
|---|---|---|
| tốc độ học | 1e-5 | optimizer_lr = 1e-5 |
| kích thước batch | 8 | batch_size = 8, in TrainPipelineConfig not ACTConfig |
| số lớp encoder / decoder | 4 / 7 | n_encoder_layers = 4 / n_decoder_layers = 1 |
| kích thước chunk k | 100 | chunk_size = 100 |
| chiều tiềm ẩn của z | không có; Hình 11 cho thấy phép chiếu từ 32 đến 512 | latent_dim = 32 |
| tập hợp theo thời gian | không có; --temporal_agg trong mã tham chiếu | temporal_ensemble_coeff = None |
Bài báo liệt kê 7 lớp giải mã, lerobot chỉ sử dụng 1, một cách có chủ ý. Bình luận trong configuration_act.py cho biết triển khai gốc có một lỗi khiến chỉ lớp đầu tiên được sử dụng, trích dẫn vấn đề 25 trong tonyzhaozh/act: đầu hành động đọc hs[0], vì vậy cả bảy lớp đều chạy nhưng chỉ đầu ra đầu tiên đến được dự đoán. Vấn đề đó vẫn mở và chưa được trả lời kể từ ngày 23 tháng 4 năm 2024. lerobot khớp với hành vi đã tạo ra các kết quả được công bố, chứ không phải con số được in. Tăng --policy.n_decoder_layers và bạn sẽ huấn luyện một mô hình mà bài báo chưa bao giờ đánh giá.
Phân đoạn hành động là toàn bộ ý tưởng
Kỹ thuật nhân bản hành vi thông thường ánh xạ một quan sát tới một hành động, và các lỗi tích lũy: một sai lệch khiến cánh tay lệch khỏi phân phối, tạo ra một hành động tồi tệ hơn, và ba mươi bước sau đó kẹp gắp không còn ở gần vật thể nữa. Phân đoạn hành động dự đoán k hành động cùng một lúc và thực hiện chúng, giảm tầm nhìn hiệu quả đi một hệ số k. Nó cũng xử lý một vấn đề phiền toái đặc trưng của dữ liệu con người: người điều khiển từ xa tạm dừng, và một chính sách Markovian một bước không thể mô hình hóa một sự tạm dừng phụ thuộc vào những gì đã xảy ra trước đó.
Bài báo phân tích k thay vì khẳng định nó. Với tính năng tập hợp theo thời gian bị tắt, trung bình trên bốn thiết lập, tỷ lệ thành công tăng từ 1 percent ở k = 1 lên 44 percent ở k = 100, sau đó giảm dần ở 200 và 400 khi chính sách tiến gần đến điều khiển vòng hở. Đường cong đó là lý do tại sao giá trị mặc định là 100.
- chunk_size: số lượng hành động tương lai mà bộ giải mã dự đoán trên mỗi lần chuyển tiếp. Mặc định là 100.
- n_action_steps: số lượng hành động bạn thực hiện trước khi truy vấn lại. Mặc định là 100, vì vậy lerobot chạy toàn bộ khối theo vòng lặp mở.
- lerobot xác thực
n_action_steps <= chunk_sizevà đưa raValueErrornếu bạn thiết lập ngược lại.
Điều quan trọng về mặt vận hành là chunk_size chia cho tốc độ khung hình. Với 30 khung hình/giây mà các ví dụ SO-100 của lerobot sử dụng, một khối 100 hành động cam kết khoảng 3.3 giây từ một lần quan sát. Nếu tác vụ cần điều chỉnh trong khoảng thời gian đó, hãy giảm n_action_steps, không phải chunk_size: bạn giữ dự đoán dài và quan sát lại thường xuyên hơn.
# predict 100 actions, re-query after 25 of them (about 0.8 s at 30 fps)
lerobot-train \
--dataset.repo_id=${HF_USER}/so100_cube \
--policy.type=act \
--policy.chunk_size=100 \
--policy.n_action_steps=25 \
--policy.device=cudaĐặt --policy.temporal_ensemble_coeff và lerobot yêu cầu n_action_steps = 1, nếu không sẽ đưa ra NotImplementedError. Việc kết hợp truy vấn chính sách ở mỗi bước thời gian và trộn các dự đoán chồng chéo cho bước thời gian đó với các trọng số w_i = exp(-m * i), trong đó dự đoán cũ nhất nhận w_0. Bài báo đặt con số này ở mức 3.3 phần trăm cho ACT: có thật nhưng khiêm tốn, và nó nhân số lượng suy luận với độ dài khối. Khả thi ở 20 ms mỗi bước, không phải ở 485 ms. Xem độ trễ suy luận.
Khi ACT vượt trội hơn một mô hình nền tảng
Năm chính sách có thể huấn luyện được đặt cạnh nhau, cùng với các số liệu mà AY-Robots đo lường và sử dụng để định cỡ GPU mà họ thuê.
| Chính sách | Họ | Tham số | Mỗi bước | Cấp GPU | Số tập tối thiểu | Tập dữ liệu |
|---|---|---|---|---|---|---|
| ACT | Transformer phân đoạn, từ đầu | ~80 M | 20 ms | RTX 4090 / 24 GB | 50 | LeRobot v3.0 |
| SmolVLA | VLA nhỏ gọn | ~450 M | 245 ms | RTX 4090 / 24 GB | 30 | LeRobot v3.0 |
| GR00T N1.7 | Nền tảng VLA, đầu khuếch tán | ~3 B (~40 M trained) | 152 ms | A100 / H100 80 GB | 50 | LeRobot v2.0 or v2.1 |
| GR00T N1.5 | Nền tảng VLA, tiền nhiệm | ~3 B | 165 ms | A100 / H100 80 GB | 50 | LeRobot v2.0 or v2.1 |
| Pi0.5 | VLA khớp dòng, xem khớp dòng | ~3 B, PaliGemma backbone | 485 ms | A100 / H100 80 GB | 50 | LeRobot v3.0 |

- 20 ms mỗi bước hành động, nhanh nhất trong số năm phương pháp, trên card 24 GB chứ không phải A100.
- 1 đến 3 USD mỗi lần chạy so với 4 đến 12 USD cho loại 3 B.
- Chính xác trong các công việc tiếp xúc nhiều mà nó đã thấy: 88 và 96 phần trăm trên Slide Ziploc và Slot Battery, nơi các phương pháp trước đây chưa bao giờ vượt qua giai đoạn một.
- Không có điều kiện ngôn ngữ: chuỗi tác vụ bị bỏ qua, vì vậy một điểm kiểm tra là một tác vụ.
- Không có kiến thức tiên nghiệm về ngữ nghĩa: mọi thứ nó biết đều đến từ 50 tập của bạn.
- Khả năng khái quát hóa hẹp: di chuyển camera là bạn phải huấn luyện lại.
- Nó thất bại một cách lặng lẽ: mất mát giảm, cánh tay không làm gì, nhật ký không ghi gì.
- Lợi thế về tốc độ chỉ hữu ích nếu suy luận nằm cạnh các động cơ servo.
Chọn ACT khi tác vụ và cảnh cố định và chuyển động phải nhanh và chính xác. Chọn một khi một điểm kiểm tra phải bao gồm nhiều hướng dẫn. Hai trang so sánh trực tiếp quyết định: và . Đối với các điểm chuẩn đã công bố, liên kết mọi con số với nguồn của nó.
Những gì bạn cần trước khi bắt đầu
Một cánh tay theo dõi, một cánh tay dẫn đầu cho , ít nhất một camera, một GPU 24 GB. ACT chỉ đọc hình ảnh và vị trí khớp. Hai camera là điểm tối ưu: một góc nhìn phía trước cố định để biết vị trí của mọi thứ, một camera cổ tay để biết sắp chạm vào, như trên ALOHA.
| Cánh tay robot | Động cơ servo | Điện áp | Chi phí linh kiện | Trạng thái |
|---|---|---|---|---|
| SO-100 | Feetech STS3215 | 7.4 V | ~110 to 150 EUR | Hỗ trợ đầy đủ, cánh tay tham chiếu |
| SO-101 | Feetech STS3215 | 7.4 V | ~130 to 170 EUR | Hỗ trợ đầy đủ |
| Koch v1.1 | Dynamixel XL330 / XL430 | 5 V and 12 V rails | ~250 to 350 EUR | Tương thích |
| LeKiwi | Feetech STS3215 (arm) | 7.4 V arm, 12 V base | ~400 to 500 EUR | Tương thích |
SO-100 và SO-101 sử dụng động cơ servo Feetech STS3215 trên đường ray 7.4 V. Cấp nguồn 12 V sẽ làm hỏng chúng, đủ nhẹ nhàng để mọi người đổ lỗi cho phần mềm trước, và nguồn 12 V của Koch có thể lắp vừa bo mạch SO-100. Kiểm tra nhãn. Triệu chứng: servo không phản hồi, cánh tay giật rồi chùng xuống. Xem thêm SO-100 so với SO-101.
Từ cánh tay robot trần đến tập dữ liệu đã ghi
Quy trình dưới đây là lerobot 0.6.x. Bỏ qua nếu bạn đã có cánh tay robot được hiệu chỉnh và một tập dữ liệu. Nếu không, hướng dẫn bắt đầu với SO-100 bao gồm lắp ráp, hướng dẫn ghi dữ liệu bao gồm thu thập và tài liệu về tập dữ liệu định dạng.
- 1Cài đặt lerobot với các gói bổ sung phù hợp
Để ghi hình cần
core_scripts, để huấn luyện cầntraining, servo Feetech cầnfeetech. Python 3.12+.bashconda create -y -n lerobot python=3.12 conda activate lerobot conda install ffmpeg -c conda-forge pip install 'lerobot[core_scripts,training,feetech]' lerobot-info - 2Tìm cổng USB của từng cánh tay robot
Chạy nó với cả hai cánh tay robot được cắm vào, rút một cái khi được nhắc. Trên Linux, bạn có thể cần mở quyền truy cập nút.
bashlerobot-find-port # on Linux, if the port exists but is unreadable: sudo chmod 666 /dev/ttyACM0 - 3Đặt ID động cơ và tốc độ truyền
Trên SO-100, việc này diễn ra trước khi lắp ráp: không giống như SO-101, các đầu nối không thể tiếp cận được sau khi đã lắp. Script sẽ quét bus từng động cơ một từ bộ kẹp, ghi ID vào EEPROM.
bashlerobot-setup-motors \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM0 lerobot-setup-motors \ --teleop.type=so100_leader \ --teleop.port=/dev/ttyACM1 - 4Hiệu chuẩn cả hai cánh tay robot
Đặt mỗi khớp vào giữa phạm vi của nó, nhấn Enter, sau đó quét từng khớp qua toàn bộ phạm vi của nó. Hiệu chuẩn cho phép một chính sách được huấn luyện trên một cánh tay robot chạy trên một cánh tay khác. Tái sử dụng cùng một
id.bashlerobot-calibrate \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM0 \ --robot.id=my_follower lerobot-calibrate \ --teleop.type=so100_leader \ --teleop.port=/dev/ttyACM1 \ --teleop.id=my_leader - 5Điều khiển từ xa một lần với camera bật
Quy tắc chung của lerobot: bạn phải có khả năng thực hiện nhiệm vụ chỉ bằng cách nhìn vào hình ảnh camera. Nếu bạn không thể, ACT cũng không thể. Điều này giúp phát hiện nhiều bộ dữ liệu kém chất lượng hơn là gỡ lỗi sau này.
bashlerobot-teleoperate \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM0 \ --robot.id=my_follower \ --robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30} }" \ --teleop.type=so100_leader \ --teleop.port=/dev/ttyACM1 \ --teleop.id=my_leader \ --display_data=true - 6Ghi lại 50 tập
50 là số lượng tối thiểu của AY-Robots và là số lượng ALOHA đã sử dụng cho mỗi tác vụ. lerobot khuyến nghị 10 cho mỗi vị trí đối tượng, camera cố định, cách nắm nhất quán.
nkết thúc một tập,rghi lại,qdừng và mã hóa.bashHF_USER=$(NO_COLOR=1 hf auth whoami | awk -F': *' 'NR==1 {print $2}') lerobot-record \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM0 \ --robot.id=my_follower \ --robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30} }" \ --teleop.type=so100_leader \ --teleop.port=/dev/ttyACM1 \ --teleop.id=my_leader \ --dataset.repo_id=${HF_USER}/so100_cube \ --dataset.num_episodes=50 \ --dataset.single_task="Grab the black cube and put it in the bin" \ --display_data=true

ACT không có kiến thức tiên nghiệm để dựa vào, vì vậy mọi sự không nhất quán đều trở thành vĩnh viễn. Ba lỗi tốn kém nhất: camera bị xê dịch giữa tập 20 và 21, ánh sáng thay đổi vì bạn ghi hình một nửa bộ dữ liệu vào buổi chiều, một cách nắm được thực hiện theo hai kiểu. Mỗi lỗi đều cho ra một đường cong mất mát trông hoàn hảo và một cánh tay robot di chuyển sai vị trí. Xem mất mát giảm, chính sách không làm gì, chính sách chỉ hoạt động trong một thiết lập và thu thập dữ liệu huấn luyện chất lượng cao.
Trước khi huấn luyện, hãy phát lại ít nhất năm tập. Định dạng bộ dữ liệu LeRobot lưu trữ luồng camera, trạng thái khớp và hành động cho mỗi tập, và phát lại sẽ đẩy các hành động đó trở lại cánh tay robot. Nếu quá trình phát lại không thực hiện được nhiệm vụ, dữ liệu không chứa nó và quá trình huấn luyện sẽ không thể tự tạo ra nó.
lerobot-replay \
--robot.type=so100_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_follower \
--dataset.repo_id=${HF_USER}/so100_cube \
--dataset.episode=0Huấn luyện chính sách ACT
Đây là toàn bộ lệnh. Mọi thứ dành riêng cho ACT đã là mặc định, đó là lý do tại sao trang ACT của lerobot khuyên nên bắt đầu với chúng.
lerobot-train \
--dataset.repo_id=${HF_USER}/so100_cube \
--policy.type=act \
--output_dir=outputs/train/act_so100_cube \
--job_name=act_so100_cube \
--policy.device=cuda \
--wandb.enable=true \
--policy.repo_id=${HF_USER}/act_so100_cube--policy.type=act tải ACTConfig, cấu hình này tự điều chỉnh theo số lượng động cơ và camera mà tập dữ liệu của bạn đã ghi lại, vì vậy bạn không bao giờ phải khai báo hình dạng quan sát. --wandb.enable=true là tùy chọn và đáng giá: đường cong mất mát là tín hiệu rẻ tiền duy nhất trong một lần chạy 100000 bước. Lịch trình đến từ cấu hình huấn luyện của lerobot, không phải ACTConfig: 100000 bước, lô 8, hạt giống 1000, một điểm kiểm tra sau mỗi 20000 bước, ghi nhật ký sau mỗi 200 bước.
Một lần chạy hoàn chỉnh để lại năm thư mục điểm kiểm tra, từ 020000 đến 100000, cộng với một liên kết tượng trưng last. Hãy giữ tất cả chúng: chính sách tốt nhất thường không phải là chính sách cuối cùng.
| Cài đặt | Mặc định của lerobot | Biểu mẫu ACT của AY-Robots | Bình luận |
|---|---|---|---|
| Kích thước lô | 8 | 8 | Giảm nó trước nếu bạn gặp giới hạn VRAM. |
| Tốc độ học | 1e-5 | 1e-5 | Giống như bài báo ALOHA. |
| Số bước tối đa | 100000 | 100000 | Khoảng nơi một tập hợp 50 tập dừng cải thiện. |
| Tích lũy gradient | 1 | 1, không áp dụng | Thay đổi kích thước lô thay thế. |
| Hạt giống | 1000 | được hiển thị | Điểm vào tyro của GR00T không có hạt giống; các lần chạy ACT là những lần có thể tái tạo. |
| chunk_size / n_action_steps | 100 / 100 | 100 / 100, có thể chỉnh sửa | Chân trời dự đoán và thực thi. Giảm cái thứ hai, không phải cái thứ nhất. |
| Tần suất điểm kiểm tra | 20000 | không được hiển thị | saveSteps là một nút điều chỉnh của GR00T ở đây. |
ACT với kích thước lô 8 và hai camera 640x480 vừa vặn thoải mái trên 24 GB. Nó sẽ không còn vừa khi người dùng tăng kích thước lô để tăng tốc độ, hoặc cấp cho nó các khung hình 1920x1080 mà một ví dụ ghi hình của lerobot hiển thị. Hai backbone ResNet-18 ở độ phân giải 1080p có cấu hình bộ nhớ rất khác. Giảm --batch_size xuống 4 trước khi thuê một card lớn hơn. Xem hết bộ nhớ trong quá trình huấn luyện.
Thời lượng: khoảng 5 giờ trên RTX 2080 Ti 11 GB trong bài báo, vài giờ cho 100k bước theo trang ACT của lerobot, 2 đến 5 giờ trên gói 24 GB của AY-Robots. Đừng cắt ngắn quá trình này. README của kho lưu trữ tham chiếu cho biết một chính sách giật cục hoặc tạm dừng thường chỉ cần thêm huấn luyện, vì thành công và độ mượt mà tiếp tục được cải thiện sau khi mất mát đạt đến mức ổn định: đối với dữ liệu thực tế, nó cần ít nhất 5000 epoch, hoặc dài hơn 3 đến 4 lần sau khi đạt đến mức ổn định.
lerobot-train \
--config_path=outputs/train/act_so100_cube/checkpoints/last/pretrained_model/train_config.json \
--resume=trueChạy chính sách đã huấn luyện trên cánh tay robot
Triển khai sử dụng lerobot-rollout. Các khóa camera phải khớp với các khóa đã ghi: một chính sách được huấn luyện trên front và wrist sẽ không chấp nhận cam0 và cam1, và rename_map không giúp ích gì, vì nó cần một điểm kiểm tra đã được huấn luyện trước. Chuỗi tác vụ có thể được bỏ qua; ví dụ của lerobot đánh dấu nó có thể bỏ qua cho ACT.
lerobot-rollout \
--strategy.type=base \
--policy.path=${HF_USER}/act_so100_cube \
--robot.type=so100_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_follower \
--robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30} }" \
--display_data=true \
--duration=60Đánh giá từng được thực hiện thông qua lerobot-record --policy.path=.... Trong phiên bản 0.6.x, đó là lerobot-rollout với bộ chọn --strategy.type: base, sentry (ghi lại với tự động tải lên), highlight (bộ đệm vòng được lưu bằng phím bấm), dagger (con người trong vòng lặp) và episodic. Tính đến ngày 23 tháng 8 năm 2026, trang tài liệu ACT vẫn ghi "sử dụng lệnh lerobot-record" ngay phía trên một khối chạy lerobot-rollout. Hãy làm theo lệnh, không phải câu văn.
Để ghim một checkpoint thay vì mô hình cuối cùng, hãy thêm --policy.pretrained_revision. Điều đó yêu cầu quá trình chạy phải bắt đầu với --save_checkpoint_to_hub=true, mặc định là tắt: nếu không có nó, lerobot chỉ đẩy mô hình cuối cùng và không có gì khác. Với nó, mỗi checkpoint được gắn thẻ với bước được đệm bằng số 0 của nó, vì vậy --policy.pretrained_revision=060000 khôi phục checkpoint bước 60000. So sánh nó với 100000 trên cánh tay robot thực tế là thử nghiệm rẻ nhất hiện có.
Hai cách để đến cùng một checkpoint
Mọi thứ ở trên là cách thủ công và nó hoạt động. Cách sử dụng nền tảng đánh đổi quyền kiểm soát để không phải sở hữu GPU hoặc môi trường Python.
- Cài đặt lerobot 0.6.x với
core_scripts,training,feetech, ffmpeg. - Tìm cổng, đặt ID động cơ, hiệu chỉnh cả hai cánh tay, ghi lại 50 tập.
- Phát lại một vài tập để xác nhận dữ liệu chứa nhiệm vụ.
- Thuê hoặc sở hữu GPU 24 GB, khớp CUDA và PyTorch, chạy
lerobot-train --policy.type=act. - Đợi vài giờ, sau đó chạy
lerobot-rollouttrên máy tính tại cánh tay robot.
# the two commands that matter, end to end
lerobot-record --robot.type=so100_follower --robot.port=/dev/ttyACM0 \
--teleop.type=so100_leader --teleop.port=/dev/ttyACM1 \
--dataset.repo_id=${HF_USER}/so100_cube --dataset.num_episodes=50 \
--dataset.single_task="Grab the black cube"
lerobot-train --dataset.repo_id=${HF_USER}/so100_cube --policy.type=act \
--output_dir=outputs/train/act_so100_cube --policy.device=cudaKiểm soát hoàn toàn: chỉnh sửa configuration_act.py, thêm camera, phân nhánh trình huấn luyện. Đối với nghiên cứu hơn là triển khai một nhiệm vụ, một nền tảng là một sự phân tâm.
- Ghi lại bằng ứng dụng máy tính để bàn, hoặc mang theo ID kho lưu trữ Hugging Face hoặc tập dữ liệu cục bộ.
- Mở hướng dẫn ACT trên SO-100 và chọn mô hình và tập dữ liệu. Các giá trị mặc định là của lerobot; chunkSize, nActionSteps, seed và logFreq có thể chỉnh sửa được.
- Phần phụ trợ thuê GPU có kích thước theo VRAM và ghi các điểm kiểm tra vào bộ lưu trữ đối tượng.
- `/api/inference/pod` sau đó phục vụ chính sách cho máy khách robot cục bộ. Một watchdog không hoạt động sẽ hủy pod, vì vậy không có chi phí nào phát sinh một cách âm thầm.
- Các thao tác tương tự tồn tại trong CLI, máy chủ MCP và tài liệu huấn luyện.
Nó không sửa dữ liệu của bạn: một tập dữ liệu với camera bị di chuyển sẽ huấn luyện tệ như nhau ở đây, và biểu mẫu không thể phát hiện ra điều đó. Nó cũng không loại bỏ vấn đề độ trễ. Vòng lặp điều khiển là 20 đến 485 ms cho mỗi bước hành động, với các chuyến đi khứ hồi qua internet công cộng, và ACT bị ảnh hưởng nhiều nhất vì bước của nó ngắn nhất: 60 ms là độ chậm 12 phần trăm so với 485 ms của Pi0.5 nhưng gấp bốn lần bước của ACT là 20 ms. Suy luận từ xa phù hợp với các thao tác chọn và đặt chậm, không phải chuyển động phản ứng nhanh.

Điều gì thực sự sai
Hầu như không có vấn đề gì nằm ở lệnh huấn luyện. Vấn đề nằm ở những thứ xung quanh nó, được sắp xếp theo tần suất chúng gây lỗi lần đầu.
| Triệu chứng | Nguyên nhân thường gặp | Trang |
|---|---|---|
| lerobot-find-port không hiển thị gì | Quyền truy cập của driver, cáp hoặc node | cánh tay robot không được phát hiện |
| Camera bị thiếu khi ghi hình | Chỉ mục thay đổi khi khởi động lại, hoặc hai camera trên một bộ điều khiển USB | camera không được phát hiện |
| Huấn luyện từ chối tập dữ liệu | ACT yêu cầu v3.0, GR00T cần v2.1 | tập dữ liệu bị từ chối dưới dạng v3 |
| CUDA hết bộ nhớ | Kích thước batch tăng, hoặc khung hình 1080p thay vì 480p | hết bộ nhớ khi huấn luyện |
| Loss trông tốt, cánh tay robot không làm gì | Dữ liệu thiếu nhiệm vụ, hoặc camera bị di chuyển | loss giảm, chính sách không làm gì |
| Chuyển động giật cục hoặc tạm dừng giữa tập | Chưa được huấn luyện đủ, kẹt ở ranh giới khối, hoặc cuộc gọi suy luận hết thời gian | chính sách bị đóng băng giữa chuyển động |
Hai hàng đáng được nhấn mạnh. ACT huấn luyện trên LeRobot v3.0 trong khi bộ nạp của GR00T bị lỗi với nó và cần v2.1, do đó một tập dữ liệu huấn luyện ACT có thể làm hỏng một lần chạy GR00T. Và hàng cuối cùng có hai cách khắc phục: các tác giả ACT giải quyết chuyển động giật cục bằng cách huấn luyện thêm, trong khi với n_action_steps ở 100, một sự kẹt thực sự xảy ra ở ranh giới khối, một khoảng dừng rõ ràng cứ sau 3.3 giây ở 30 fps. Hai điều nữa cần biết: một khớp chết đơn lẻ thường là một id servo chưa bao giờ được ghi, và một bộ kẹp tiếp cận nhưng không bao giờ đóng có nghĩa là phạm vi kẹp quá nhỏ trong các bản trình diễn. Mục lục đầy đủ: các trang về chế độ lỗi.
Chi phí của một lần chạy
| Cấp | Mô hình | Thời gian chạy | Giá mỗi giờ | Chi phí mỗi lần chạy |
|---|---|---|---|---|
| RTX 4090 / 24 GB | ACT, SmolVLA | 2 đến 5 giờ | 0.30 to 0.60 USD | khoảng 1 đến 3 USD |
| A100 80 GB / H100 | GR00T N1.7, GR00T N1.5, Pi0.5 | 3 đến 6 giờ | 1.20 to 2.00 USD | khoảng 4 đến 12 USD |
Đây là lý do để bắt đầu với ACT ngay cả khi bạn muốn VLA sau này. Một lần chạy ACT thất bại chỉ tốn bằng giá một ly cà phê và cho bạn biết trong vài giờ liệu tập dữ liệu của bạn có chứa nhiệm vụ đó hay không. Một lần chạy GR00T thất bại tốn gấp bốn lần cho cùng một bài học. Chuyển sang GR00T N1.7 hoặc SmolVLA sau đó là một sự thay đổi về hình thức, không phải là xây dựng lại. Bối cảnh: mô hình hành động-ngôn ngữ-thị giác, hướng dẫn SO-100 đầy đủ, huấn luyện chính sách đầu tiên của bạn và học bắt chước. Không có cánh tay robot? Trang trực tiếp phát trực tiếp một SO-100 thực để điều khiển mà không cần đăng ký.
Huấn luyện ACT trên SO-100 của bạn
Hướng dẫn cho sự kết hợp chính xác này: cài đặt mặc định, cấp GPU và chi phí cho một lần chạy. Chọn tập dữ liệu, phần phụ trợ sẽ thuê card và ghi các điểm kiểm tra.
Mở hướng dẫn huấn luyệnCó mô hình ACT được huấn luyện trước nào tôi có thể tinh chỉnh thay thế không?▾
Không. ACT không có mô hình cơ sở; nó chỉ tồn tại sau khi bạn huấn luyện nó. Đó không phải là một lỗ hổng trong công cụ, đó chính là ACT: bài báo huấn luyện một chính sách từ đầu cho mỗi nhiệm vụ. Để sử dụng điểm kiểm tra của nhà cung cấp, hãy dùng GR00T N1.7 hoặc Pi0.5.
Tôi thực sự cần bao nhiêu tập?▾
50: là số lượng ALOHA đã ghi cho mỗi nhiệm vụ (100 cho Thread Velcro, nhiệm vụ khó nhất của nó) và là mức tối thiểu của AY-Robots. lerobot khuyên khoảng 10 cho mỗi vị trí đối tượng, camera cố định, nắm bắt nhất quán. Năm mươi tập sạch sẽ tốt hơn một trăm tập mà camera bị di chuyển.
Tôi có nên thay đổi chunk_size từ 100 không?▾
Thường là không. Sự loại bỏ tăng từ 1 percent ở k = 1 lên 44 percent ở k = 100 và giảm dần sau đó, vì vậy 100 nằm gần mức cao nhất. Nếu cánh tay robot thực hiện quá lâu, hãy giảm n_action_steps thay vào đó: ở 30 fps, 25 truy vấn lại mỗi 0.8 seconds.
Một lần chạy huấn luyện mất bao lâu, và tôi có thể dừng nó sớm không?▾
Hai đến năm giờ trên một card 24 GB cho 100000 steps. Các điểm kiểm tra được lưu sau mỗi 20000 steps và --resume=true sẽ tiếp tục một lần chạy, vì vậy việc dừng sớm là an toàn. Chỉ không dừng ở đoạn bằng phẳng đầu tiên: độ mượt mà cải thiện sau khi mất mát ổn định.
Mất mát giảm nhưng cánh tay robot vẫn thất bại. Bây giờ phải làm gì?▾
Gần như luôn là tập dữ liệu. Phát lại các tập đã ghi tại cánh tay robot: nếu phát lại không thực hiện được nhiệm vụ, dữ liệu không chứa nó. Sau đó kiểm tra xem có bất cứ thứ gì di chuyển không, đặc biệt là camera. ACT không có thông tin tiên nghiệm, vì vậy một sự xê dịch nhỏ ở tập 21 là vĩnh viễn.
Sources
- Zhao, Kumar, Levine, Finn: Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware (ACT), arXiv 2304.13705
- ALOHA / ACT project page
- tonyzhaozh/act, the reference implementation and its training-length advice
- tonyzhaozh/act issue 25: the action head reads only the first decoder layer
- huggingface/lerobot
- lerobot ACTConfig: chunk_size, n_action_steps, n_decoder_layers and the rest of the defaults
- lerobot TrainPipelineConfig: steps, batch_size, seed, save_freq, log_freq, save_checkpoint_to_hub
- lerobot train_utils: zero-padded checkpoint dirs, the last symlink and checkpoint push tagging
- lerobot v0.6.1 release, 3 August 2026
- LeRobot docs: ACT
- LeRobot docs: imitation learning on real robots (record, replay, train, rollout)
- LeRobot docs: SO-100 setup, motor ids and calibration
- LeRobot docs: installation and the optional extras
- Hugging Face blog: LeRobot Community Datasets, the ImageNet of Robotics, When and How?
- TheRobotStudio/SO-ARM100: Standard Open Arm 100
Ready for high-quality robotics data?
AY-Robots connects your robots to skilled operators worldwide.
Get Started