Ma trận huấn luyện AY-Robots với năm hàng chính sách và bốn cột cánh tay robot, mỗi ô liên kết đến một mô hình và hướng dẫn huấn luyện cánh tay cụ thể
ACTSO-100lerobothọc bắt chướchuấn luyện chính sách

Cách huấn luyện ACT trên SO-100 từ đầu

AY-Robots ResearchAugust 23, 202616 phút đọc

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-3Bnvidia/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_sizen_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ữ.
Các phiên bản được mô tả

Đã 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 IIIlerobot trên main
tốc độ học1e-5optimizer_lr = 1e-5
kích thước batch8batch_size = 8, in TrainPipelineConfig not ACTConfig
số lớp encoder / decoder4 / 7n_encoder_layers = 4 / n_decoder_layers = 1
kích thước chunk k100chunk_size = 100
chiều tiềm ẩn của zkhông có; Hình 11 cho thấy phép chiếu từ 32 đến 512latent_dim = 32
tập hợp theo thời giankhông có; --temporal_agg trong mã tham chiếutemporal_ensemble_coeff = None
Dòng lớp giải mã không phải là lỗi chính tả

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_size và đưa ra ValueError nế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.

bash
# 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
Rút ngắn phần thực thi của khối mà không rút ngắn dự đoán.
Cái bẫy kết hợp theo thời gian

Đặ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áchHọTham sốMỗi bướcCấp GPUSố tập tối thiểuTập dữ liệu
ACTTransformer phân đoạn, từ đầu~80 M20 msRTX 4090 / 24 GB50LeRobot v3.0
SmolVLAVLA nhỏ gọn~450 M245 msRTX 4090 / 24 GB30LeRobot v3.0
GR00T N1.7Nền tảng VLA, đầu khuếch tán~3 B (~40 M trained)152 msA100 / H100 80 GB50LeRobot v2.0 or v2.1
GR00T N1.5Nền tảng VLA, tiền nhiệm~3 B165 msA100 / H100 80 GB50LeRobot v2.0 or v2.1
Pi0.5VLA khớp dòng, xem khớp dòng~3 B, PaliGemma backbone485 msA100 / H100 80 GB50LeRobot v3.0
Trang chính sách của AY-Robots hiển thị bảng so sánh ACT, SmolVLA, GR00T N1.5, GR00T N1.7 và Pi0.5 với số lượng tham số, yêu cầu GPU, độ trễ suy luận và số tập tối thiểu
Bảng /policies: ACT có số lượng tham số nhỏ nhất và thời gian mỗi bước ngắn nhất.
Huấn luyện ACT từ đầu
Ưu điểm
  • 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.
Đánh đổi
  • 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 ápChi phí linh kiệnTrạng thái
SO-100Feetech STS32157.4 V~110 to 150 EURHỗ trợ đầy đủ, cánh tay tham chiếu
SO-101Feetech STS32157.4 V~130 to 170 EURHỗ trợ đầy đủ
Koch v1.1Dynamixel XL330 / XL4305 V and 12 V rails~250 to 350 EURTương thích
LeKiwiFeetech STS3215 (arm)7.4 V arm, 12 V base~400 to 500 EURTương thích
7.4 V, không phải 12 V

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.

  1. 1
    Cà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ần training, servo Feetech cần feetech. Python 3.12+.

    bash
    conda 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
  2. 2
    Tì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.

    bash
    lerobot-find-port
    # on Linux, if the port exists but is unreadable:
    sudo chmod 666 /dev/ttyACM0
  3. 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.

    bash
    lerobot-setup-motors \
        --robot.type=so100_follower \
        --robot.port=/dev/ttyACM0
    
    lerobot-setup-motors \
        --teleop.type=so100_leader \
        --teleop.port=/dev/ttyACM1
  4. 4
    Hiệ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.

    bash
    lerobot-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. 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.

    bash
    lerobot-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
  6. 6
    Ghi 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. n kết thúc một tập, r ghi lại, q dừng và mã hóa.

    bash
    HF_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
Trang hướng dẫn ghi hình của AY-Robots giải thích cách thu thập bộ dữ liệu định dạng LeRobot từ một phiên điều khiển từ xa
Hướng dẫn ghi hình. Ứng dụng máy tính để bàn ghi cùng bố cục với lerobot-record.
Cái bẫy làm mất cả ngày: bộ dữ liệu không nhất quán

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ậpthu 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ó.

bash
lerobot-replay \
    --robot.type=so100_follower \
    --robot.port=/dev/ttyACM0 \
    --robot.id=my_follower \
    --dataset.repo_id=${HF_USER}/so100_cube \
    --dataset.episode=0
Phát lại tập 0. Nếu thất bại, hãy dừng lại và ghi hình lại.

Huấ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.

bash
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
Lệnh huấn luyện từ tài liệu lerobot 0.6.x, trên tập dữ liệu SO-100.

--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 đặtMặc định của lerobotBiểu mẫu ACT của AY-RobotsBình luận
Kích thước lô88Giảm nó trước nếu bạn gặp giới hạn VRAM.
Tốc độ học1e-51e-5Giống như bài báo ALOHA.
Số bước tối đa100000100000Khoảng nơi một tập hợp 50 tập dừng cải thiện.
Tích lũy gradient11, không áp dụngThay đổi kích thước lô thay thế.
Hạt giống1000đượ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_steps100 / 100100 / 100, có thể chỉnh sửaChâ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 tra20000không được hiển thịsaveSteps là một nút điều chỉnh của GR00T ở đây.
Hết bộ nhớ là vấn đề về kích thước lô, không phải vấn đề về card

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.

bash
lerobot-train \
  --config_path=outputs/train/act_so100_cube/checkpoints/last/pretrained_model/train_config.json \
  --resume=true
Tiếp tục một lần chạy bị gián đoạn từ điểm kiểm tra cuối cùng của nó.

Chạ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 frontwrist sẽ không chấp nhận cam0cam1, 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.

bash
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
Triển khai tự động không ghi lại. Sử dụng --strategy.type=sentry để ghi lại các tập đánh giá.
Lệnh này đã được đổi tên gần đây, vì vậy các hướng dẫn cũ không còn phù hợp

Đá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.

  1. Cài đặt lerobot 0.6.x với core_scripts, training, feetech, ffmpeg.
  2. Tìm cổng, đặt ID động cơ, hiệu chỉnh cả hai cánh tay, ghi lại 50 tập.
  3. Phát lại một vài tập để xác nhận dữ liệu chứa nhiệm vụ.
  4. Thuê hoặc sở hữu GPU 24 GB, khớp CUDA và PyTorch, chạy lerobot-train --policy.type=act.
  5. Đợi vài giờ, sau đó chạy lerobot-rollout trên máy tính tại cánh tay robot.
bash
# 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=cuda
Lợi ích của cách này

Kiể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.

Ma trận huấn luyện AY-Robots với năm hàng chính sách và bốn cột cánh tay robot, trong đó mỗi ô liên kết đến hướng dẫn huấn luyện cụ thể cho sự kết hợp mô hình và cánh tay đó
Ma trận trên /train. Hàng ACT so với cột SO-100 là hướng dẫn của bài viết này.

Đ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ứngNguyên nhân thường gặpTrang
lerobot-find-port không hiển thị gìQuyền truy cập của driver, cáp hoặc nodecánh tay robot không được phát hiện
Camera bị thiếu khi ghi hìnhChỉ mục thay đổi khi khởi động lại, hoặc hai camera trên một bộ điều khiển USBcamera không được phát hiện
Huấn luyện từ chối tập dữ liệuACT yêu cầu v3.0, GR00T cần v2.1tậ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ì 480phế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ểnloss 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ậpChư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 gianchí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ấpMô hìnhThời gian chạyGiá mỗi giờChi phí mỗi lần chạy
RTX 4090 / 24 GBACT, SmolVLA2 đến 5 giờ0.30 to 0.60 USDkhoảng 1 đến 3 USD
A100 80 GB / H100GR00T N1.7, GR00T N1.5, Pi0.53 đến 6 giờ1.20 to 2.00 USDkhoả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ạnhọ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ện
Có 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.

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started