
Wytrenuj Action Chunking Transformer od podstaw na SO-100 z lerobot: konfiguracja ACT, chunk_size i n_action_steps, harmonogram 100000 kroków, inferencja 20 ms.
ACT wyróżnia się spośród polityk SO-100. GR00T N1.7 i N1.5 zaczynają od nvidia/GR00T-N1.7-3B i nvidia/GR00T-N1.5-3B, Pi0.5 od lerobot/pi05_base. ACT zaczyna od zera: nie ma bazowego punktu kontrolnego, ponieważ nie jest modelem fundamentalnym. Jest to transformator o około 80 milionach parametrów, który trenujesz od podstaw dla jednego zadania, na swoim ramieniu, w swoim oświetleniu.
Dlatego też wykonuje krok sterowania w 20 ms, podczas gdy VLA z 3 miliardami parametrów potrzebuje od 152 do 485 ms i kosztuje od 1 do 3 USD za uruchomienie zamiast od 4 do 12. Ten przewodnik przedstawia ręczną ścieżkę z lerobot na SO-100: nagrywanie, konfiguracja act, co chunk_size i n_action_steps kontrolują, harmonogram 100000 kroków, wdrożenie. Następnie to samo zadanie na AY-Robots, włączając miejsca, gdzie platforma nie pomaga.
Co musisz wiedzieć
- •ACT trenuje od podstaw: bez modelu bazowego, bez wstępnego trenowania, bez wejścia językowego. Jeden punkt kontrolny, jedno zadanie.
- •Artykuł: około 80 M parametrów, około 5 godzin na 11 GB RTX 2080 Ti, 0.01 s wnioskowania.
- •Domyślne ustawienia lerobot: chunk_size 100, n_action_steps 100, batch 8, lr 1e-5, 100000 kroków, seed 1000.
- •Na AY-Robots: 20 ms na krok, najszybszy z pięciu. Minimum 50 epizodów, LeRobot v3.0, karta 24 GB, od 1 do 3 USD za uruchomienie.
- •Wygrywa w zadaniu, które widział, i przegrywa w momencie, gdy chcesz warunkowania językowego.
Sprawdzono 23 sierpnia 2026 r. dla lerobot 0.6.x: pyproject.toml na main wskazuje version = "0.6.2", najnowszy tag v0.6.1, 3 sierpnia 2026 r. Samouczek rozpoczynający się od python lerobot/scripts/train.py poprzedza punkty wejścia konsoli lerobot-train, lerobot-record i lerobot-rollout.
Czym właściwie jest ACT
Action Chunking with Transformers pochodzi z artykułu ALOHA, Uczenie się precyzyjnej manipulacji dwuręcznej za pomocą taniego sprzętu, autorstwa Zhao, Kumara, Levine'a i Finna, arXiv, 23 kwietnia 2023. Urządzenie nagrywa z częstotliwością 50 Hz za pomocą czterech kamer internetowych przesyłających obraz 480x640 przy 30 kl./s: dwie na chwytakach, jedna górna, jedna przednia. Abstrakt twierdzi, że osiągnięto sześć umiejętności z 80 do 90 procentową skutecznością, w tym otwieranie przezroczystego pojemnika na przyprawy i wkładanie baterii, na podstawie 10 minut demonstracji.
Treść jest bardziej przydatna podczas planowania sesji nagraniowej: 50 demonstracji na zadanie, z wyjątkiem Thread Velcro przy 100, co stanowi 10 do 20 minut danych i 30 do 60 minut czasu rzeczywistego po uwzględnieniu resetów. Sukces również nie jest jednolity: Thread Velcro kończy się na 20 procentach, Put On Shoe na 92, Cup Open 84, Prep Tape 64.
| Hiperparametr | Artykuł ALOHA, Tabela III | lerobot na main |
|---|---|---|
| współczynnik uczenia | 1e-5 | optimizer_lr = 1e-5 |
| rozmiar partii | 8 | batch_size = 8, w TrainPipelineConfig, nie ACTConfig |
| warstwy kodera / dekodera | 4 / 7 | n_encoder_layers = 4 / n_decoder_layers = 1 |
| rozmiar fragmentu k | 100 | chunk_size = 100 |
| wymiar latentny z | brak; Rys. 11 pokazuje projekcję 32 do 512 | latent_dim = 32 |
| ensembling czasowy | brak; --temporal_agg w kodzie referencyjnym | temporal_ensemble_coeff = None |
Artykuł wymienia 7 warstw dekodera, lerobot celowo dostarcza 1. Komentarz w configuration_act.py mówi, że oryginalna implementacja ma błąd, co oznacza, że używana jest tylko pierwsza warstwa, powołując się na issue 25 in tonyzhaozh/act: głowica akcji odczytuje hs[0], więc wszystkie siedem warstw działa, ale tylko pierwsze wyjście dociera do predykcji. Ten problem jest otwarty i bez odpowiedzi od 23 kwietnia 2024. lerobot dopasowuje zachowanie, które doprowadziło do opublikowanych wyników, a nie do wydrukowanej liczby. Zwiększ `--policy.n_decoder_layers`, a wytrenujesz model, którego artykuł nigdy nie oceniał.
Chunking akcji to cała idea
Zwykłe klonowanie behawioralne mapuje jedną obserwację na jedną akcję, a błędy się kumulują: odchylenie powoduje, że ramię znajduje się poza rozkładem, co prowadzi do gorszej akcji, a trzydzieści kroków później chwytak jest daleko od obiektu. Chunking akcji przewiduje k akcji jednocześnie i je wykonuje, zmniejszając efektywny horyzont o czynnik k. Radzi sobie również z uciążliwością specyficzną dla danych ludzkich: teleoperatorzy robią przerwy, a jednokrokowa markowska polityka nie może modelować pauzy, która zależy od tego, co było wcześniej.
Artykuł bada wpływ k, zamiast go narzucać. Przy wyłączonym ensemblowaniu czasowym, uśrednionym dla czterech ustawień, sukces wzrasta z 1 procenta przy k = 1 do 44 procent przy k = 100, a następnie stabilizuje się przy 200 i 400, gdy polityka zbliża się do sterowania w otwartej pętli. Ta krzywa jest powodem, dla którego domyślna wartość to 100.
- chunk_size: ile przyszłych akcji dekoder przewiduje na jedno przejście do przodu. Domyślnie 100.
- n_action_steps: ile z nich wykonujesz przed ponownym zapytaniem. Domyślnie 100, więc lerobot wykonuje cały fragment w otwartej pętli.
- lerobot sprawdza, czy
n_action_steps <= chunk_sizei zgłaszaValueError, jeśli warunek jest odwrotny.
Operacyjnie liczy się chunk_size podzielone przez liczbę klatek na sekundę (frame rate). Przy 30 fps, używanych w przykładach SO-100 lerobota, fragment 100 akcji obejmuje około 3.3 sekundy od jednej obserwacji. Jeśli zadanie wymaga korekty w tym oknie, zmniejsz n_action_steps, a nie chunk_size: zachowujesz długą predykcję i częściej dokonujesz ponownych obserwacji.
# 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=cudaUstaw --policy.temporal_ensemble_coeff, a lerobot będzie wymagał n_action_steps = 1, w przeciwnym razie zgłaszając NotImplementedError. Ensemblowanie odpytuje politykę w każdym kroku czasowym i łączy nakładające się predykcje dla tego kroku z wagami w_i = exp(-m * i), gdzie najstarsza otrzymuje w_0. W artykule podano, że dla ACT wynosi to 3.3 procent: realne, ale skromne, i mnoży liczbę wnioskowań przez długość fragmentu. Opłacalne przy 20 ms na krok, nie przy 485 ms. Zobacz opóźnienie wnioskowania.
Kiedy ACT przewyższa model bazowy
Pięć możliwych do trenowania polityk obok siebie, z liczbami, które AY-Robots mierzy i wykorzystuje do określenia rozmiaru wynajmowanego GPU.
| Polityka | Rodzina | Parametry | Na krok | Poziom GPU | Min. epizody | Zbiór danych |
|---|---|---|---|---|---|---|
| ACT | Transformer z podziałem na fragmenty, od podstaw | ~80 M | 20 ms | RTX 4090 / 24 GB | 50 | LeRobot v3.0 |
| SmolVLA | Kompaktowy VLA | ~450 M | 245 ms | RTX 4090 / 24 GB | 30 | LeRobot v3.0 |
| GR00T N1.7 | Podstawa VLA, głowica dyfuzyjna | ~3 B (~40 M trained) | 152 ms | A100 / H100 80 GB | 50 | LeRobot v2.0 or v2.1 |
| GR00T N1.5 | Podstawa VLA, poprzednik | ~3 B | 165 ms | A100 / H100 80 GB | 50 | LeRobot v2.0 or v2.1 |
| Pi0.5 | VLA z dopasowaniem przepływu, zobacz dopasowanie przepływu | ~3 B, PaliGemma backbone | 485 ms | A100 / H100 80 GB | 50 | LeRobot v3.0 |

- 20 ms na krok akcji, najszybszy z pięciu, na karcie 24 GB, nie A100.
- 1 do 3 USD za uruchomienie w porównaniu do 4 do 12 dla klasy 3 B.
- Precyzyjny w pracach wymagających kontaktu, które widział: 88 i 96 procent na Slide Ziploc i Slot Battery, gdzie wcześniejsze metody nigdy nie przeszły pierwszego etapu.
- Brak warunkowania językowego: ciąg zadania jest ignorowany, więc jeden punkt kontrolny to jedno zadanie.
- Brak wcześniejszych założeń semantycznych: wszystko, co wie, pochodzi z Twoich 50 epizodów.
- Wąska generalizacja: przesuń kamerę, a musisz ponownie trenować.
- Zawodzi po cichu: strata spada, ramię nic nie robi, logi nic nie mówią.
- Przewaga prędkości pomaga tylko wtedy, gdy wnioskowanie znajduje się obok serwomechanizmów.
Wybierz ACT, gdy zadanie i scena są stałe, a ruch musi być szybki i precyzyjny. Wybierz , gdy jeden punkt kontrolny musi obejmować kilka instrukcji. Dwie strony porównują decyzje bezpośrednio: i . Dla opublikowanych benchmarków, łączy każdą liczbę z jej źródłem.
Czego potrzebujesz, zanim zaczniesz
Jedno ramię podążające, jedno ramię wiodące do , co najmniej jedna kamera, GPU 24 GB. ACT odczytuje tylko obrazy i pozycje stawów. Dwie kamery to optymalne rozwiązanie: stały widok z przodu, aby widzieć, gdzie znajdują się obiekty, kamera na nadgarstku, aby widzieć, czego ma dotknąć, podobnie jak w ALOHA.
| Ramię | Serwa | Napięcie | Koszt części | Status |
|---|---|---|---|---|
| SO-100 | Feetech STS3215 | 7.4 V | ~110 do 150 EUR | Pełne wsparcie, ramię referencyjne |
| SO-101 | Feetech STS3215 | 7.4 V | ~130 do 170 EUR | Pełne wsparcie |
| Koch v1.1 | Dynamixel XL330 / XL430 | Szyny 5 V i 12 V | ~250 do 350 EUR | Kompatybilne |
| LeKiwi | Feetech STS3215 (ramię) | Ramię 7.4 V, podstawa 12 V | ~400 do 500 EUR | Kompatybilne |
SO-100 i SO-101 używają serw Feetech STS3215 na szynie 7.4 V. Zasilanie ich 12 V niszczy je, na tyle cicho, że ludzie najpierw obwiniają oprogramowanie, a zasilacz Koch 12 V fizycznie pasuje do płyty SO-100. Sprawdź etykietę. Objawy: serwo nie odpowiada, ramię drga, a następnie opada. Zobacz także SO-100 vs SO-101.
Od samego ramienia do zarejestrowanego zbioru danych
Poniższy przepływ dotyczy lerobot 0.6.x. Pomiń go, jeśli masz skalibrowane ramię i zbiór danych. W przeciwnym razie przewodnik wprowadzający SO-100 obejmuje montaż, instruktaż nagrywania obejmuje przechwytywanie, a dokumentacja zbiorów danych format.
- 1Zainstaluj lerobot z odpowiednimi dodatkami
Nagrywanie wymaga
core_scripts, treningtraining, serwa Feetechfeetech. 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 - 2Znajdź port USB każdego ramienia
Uruchom z podłączonymi obydwoma ramionami, odłączając jedno po wyświetleniu monitu. Na Linuksie może być konieczne otwarcie uprawnień węzła.
bashlerobot-find-port # on Linux, if the port exists but is unreadable: sudo chmod 666 /dev/ttyACM0 - 3Ustaw identyfikatory silników i prędkość transmisji
W przypadku SO-100 dzieje się to przed montażem: w przeciwieństwie do SO-101 złącza są niedostępne po złożeniu. Skrypt przechodzi przez magistralę silnik po silniku, zaczynając od chwytaka, zapisując identyfikatory do EEPROM.
bashlerobot-setup-motors \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM0 lerobot-setup-motors \ --teleop.type=so100_leader \ --teleop.port=/dev/ttyACM1 - 4Skalibruj oba ramiona
Ustaw każdy staw w środku jego zakresu, naciśnij Enter, a następnie przesuń każdy przez jego pełny zakres. Kalibracja pozwala na uruchomienie polityki wytrenowanej na jednym ramieniu na innym. Użyj ponownie tego samego
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 - 5Teleoperuj raz z włączonymi kamerami
Zasada kciuka lerobot: powinieneś być w stanie wykonać zadanie, patrząc tylko na obrazy z kamery. Jeśli nie możesz, ACT również nie może. To wyłapuje więcej złych zbiorów danych niż późniejsze debugowanie.
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 - 6Nagraj 50 epizodów
50 to minimum AY-Robots i to, czego ALOHA używała na zadanie. lerobot zaleca 10 na lokalizację obiektu, kamery stałe, chwyt spójny.
nkończy epizod,rnagrywa ponownie,qzatrzymuje i koduje.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 nie ma wcześniejszych założeń, na których mógłby się oprzeć, więc każda niespójność staje się trwała. Trzy najkosztowniejsze: kamera przesunięta między epizodem 20 a 21, światło, które zmieniło się, ponieważ nagrałeś połowę zestawu po południu, chwyt wykonany na dwa sposoby. Każdy z nich daje idealnie wyglądającą krzywą strat i ramię, które trafia w niewłaściwe miejsce. Zobacz strata spada, polityka nic nie robi, polityka działa tylko w jednej konfiguracji oraz zbieranie wysokiej jakości danych treningowych.
Przed treningiem odtwórz co najmniej pięć epizodów. przechowuje strumienie z kamer, stany stawów i akcje na , a odtwarzanie przesyła te akcje z powrotem do ramienia. Jeśli odtwarzanie nie wykonuje zadania, dane go nie zawierają, a trening go nie wymyśli.
lerobot-replay \
--robot.type=so100_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_follower \
--dataset.repo_id=${HF_USER}/so100_cube \
--dataset.episode=0Trenowanie polityki ACT
To jest całe polecenie. Wszystko, co jest specyficzne dla ACT, jest już domyślne, dlatego strona lerobot ACT zaleca rozpoczęcie od nich.
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 wczytuje ACTConfig, który dostosowuje się do liczby silników i kamer zarejestrowanych w Twoim zbiorze danych, więc nigdy nie deklarujesz kształtu obserwacji. --wandb.enable=true jest opcjonalne i warto: krzywa strat jest jedynym tanim sygnałem w przebiegu 100000 kroków. Harmonogram pochodzi z konfiguracji treningowej lerobot, a nie ACTConfig: 100000 kroków, partia 8, ziarno 1000, punkt kontrolny co 20000 kroków, logowanie co 200.
Pełne uruchomienie pozostawia pięć katalogów punktów kontrolnych, od 020000 do 100000, plus dowiązanie symboliczne ostatni. Zachowaj je wszystkie: najlepsza polityka często nie jest tą ostatnią.
| Ustawienie | Domyślne lerobot | Formularz ACT AY-Robots | Komentarz |
|---|---|---|---|
| Rozmiar partii | 8 | 8 | Obniż go najpierw, jeśli napotkasz limity VRAM. |
| Współczynnik uczenia | 1e-5 | 1e-5 | Taki sam jak w artykule ALOHA. |
| Maksymalna liczba kroków | 100000 | 100000 | Mniej więcej tam, gdzie zestaw 50 epizodów przestaje się poprawiać. |
| Akumulacja gradientu | 1 | 1, nie dotyczy | Zamiast tego zmień rozmiar partii. |
| Ziarno | 1000 | ujawnione | Punkt wejścia tyro GR00T nie ma ziarna; uruchomienia ACT są tymi, które można odtworzyć. |
| chunk_size / n_action_steps | 100 / 100 | 100 / 100, edytowalne | Horyzont przewidywania i wykonania. Obniż drugi, nie pierwszy. |
| Częstotliwość punktów kontrolnych | 20000 | nieujawnione | saveSteps to tutaj pokrętło GR00T. |
ACT z rozmiarem partii 8 i dwoma kamerami 640x480 mieści się komfortowo na 24 GB. Przestaje się mieścić, gdy ludzie zwiększają rozmiar partii dla szybkości lub podają mu klatki 1920x1080, jak pokazuje jeden z przykładów nagrywania lerobot. Dwa backbony ResNet-18 w rozdzielczości 1080p to zupełnie inny profil pamięci. Zmniejsz --batch_size do 4, zanim wynajmiesz większą kartę. Zobacz brak pamięci podczas treningu.
Czas trwania: około 5 godzin na karcie RTX 2080 Ti 11 GB (według artykułu), kilka godzin dla 100 tys. kroków na stronie ACT lerobot, 2 do 5 godzin na warstwie 24 GB AY-Robots. Nie skracaj tego. Plik README repozytorium referencyjnego mówi, że niestabilna lub przerywająca się polityka zazwyczaj potrzebuje więcej treningu, ponieważ sukces i płynność nadal się poprawiają po ustabilizowaniu się funkcji straty: dla danych rzeczywistych wymaga co najmniej 5000 epok, czyli 3 do 4 razy dłużej po plateau.
lerobot-train \
--config_path=outputs/train/act_so100_cube/checkpoints/last/pretrained_model/train_config.json \
--resume=trueUruchamianie wytrenowanej polityki na ramieniu
Wdrożenie wykorzystuje lerobot-rollout. Klucze kamer muszą odpowiadać nagranym: polityka wytrenowana na front i wrist nie zaakceptuje cam0 i cam1, a rename_map nie pomoże, ponieważ wymaga wstępnie wytrenowanego punktu kontrolnego. Ciąg znaków zadania można pominąć; własny przykład lerobot oznacza go jako pomijalny dla 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=60Ewaluacja była uruchamiana za pomocą lerobot-record --policy.path=.... W wersji 0.6.x jest to lerobot-rollout z selektorem --strategy.type: base, sentry (nagrywanie z automatycznym przesyłaniem), highlight (bufor pierścieniowy zapisywany klawiszem), dagger (człowiek w pętli) i episodic. Na dzień 23 sierpnia 2026 strona dokumentacji ACT nadal mówi "używając polecenia lerobot-record" bezpośrednio nad blokiem, który uruchamia lerobot-rollout. Postępuj zgodnie z poleceniem, a nie zdaniem.
Aby przypiąć punkt kontrolny zamiast końcowego modelu, dodaj --policy.pretrained_revision. Wymaga to, aby uruchomienie rozpoczęło się z --save_checkpoint_to_hub=true, domyślnie wyłączone: bez tego lerobot przesyła tylko końcowy model i nic więcej. Z nim każdy punkt kontrolny jest oznaczony swoim krokiem z wiodącymi zerami, więc --policy.pretrained_revision=060000 odzyskuje ten z kroku 60000. Porównanie go z 100000 na prawdziwym ramieniu to najtańszy dostępny eksperyment.
Dwie drogi do tego samego punktu kontrolnego
Wszystko powyżej to ręczna ścieżka i działa. Ścieżka platformowa wymienia kontrolę na brak konieczności posiadania GPU lub środowiska Pythona.
- Zainstaluj lerobot 0.6.x z
core_scripts,training,feetech, ffmpeg. - Znajdź porty, ustaw identyfikatory silników, skalibruj oba ramiona, nagraj 50 epizodów.
- Odtwórz kilka epizodów, aby potwierdzić, że dane zawierają zadanie.
- Wynajmij lub posiadaj GPU 24 GB, dopasuj CUDA i PyTorch, uruchom
lerobot-train --policy.type=act. - Poczekaj kilka godzin, a następnie uruchom
lerobot-rolloutna maszynie przy ramieniu.
# 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=cudaPełna kontrola: edytuj configuration_act.py, dodaj kamerę, rozwidlij trener. W przypadku badań, a nie dostarczania zadania, platforma jest rozpraszaczem.
- Nagrywaj za pomocą klienta desktopowego lub użyj repozytorium Hugging Face lub lokalnego zbioru danych.
- Otwórz przewodnik ACT na SO-100 i wybierz model oraz zbiór danych. Domyślne wartości są te z lerobot; chunkSize, nActionSteps, seed i logFreq są edytowalne.
- Backend wynajmuje GPU o rozmiarze VRAM i zapisuje punkty kontrolne do pamięci obiektowej.
/api/inference/podnastępnie udostępnia politykę lokalnemu klientowi robota. Bezczynny watchdog niszczy pod, więc nic nie jest fakturowane po cichu.- Te same operacje istnieją w CLI, serwerze MCP i dokumentacji szkoleniowej.
Nie naprawia to twoich danych: zbiór danych z przesuniętą kamerą trenuje tutaj równie źle, a formularz nie jest w stanie tego wykryć. Nie usuwa to również problemu opóźnień. Pętla sterowania wynosi od 20 do 485 ms na krok akcji, z dodatkowymi czasami podróży w obie strony przez publiczny internet, a ACT cierpi najbardziej, ponieważ jego krok jest najkrótszy: 60 ms to 12-procentowe spowolnienie w stosunku do 485 ms Pi0.5, ale czterokrotnie dłuższy krok w stosunku do 20 ms ACT. Zdalna inferencja nadaje się do wolnego podnoszenia i umieszczania, a nie do szybkiego ruchu reaktywnego.

Co faktycznie idzie nie tak
Prawie żaden problem nie leży w samej komendzie treningowej. Leży on w otaczających ją elementach, uporządkowanych według częstotliwości, z jaką sprawiają problemy za pierwszym razem.
| Objaw | Typowa przyczyna | Strona |
|---|---|---|
| lerobot-find-port nic nie pokazuje | Sterownik, kabel lub uprawnienia węzła | ramię nie wykryte |
| Brak kamery podczas nagrywania | Indeks zmieniony po restarcie, lub dwie kamery na jednym kontrolerze USB | kamera nie wykryta |
| Trening odrzuca zbiór danych | ACT wymaga v3.0, GR00T potrzebuje v2.1 | zbiór danych odrzucony jako v3 |
| Brak pamięci CUDA | Zwiększony rozmiar partii (batch size), lub klatki 1080p zamiast 480p | brak pamięci podczas treningu |
| Wartość funkcji straty wygląda świetnie, ramię nic nie robi | Dane nie zawierają zadania, lub kamera się przesunęła | spadek funkcji straty, polityka nic nie robi |
| Szarpany ruch lub pauza w trakcie epizodu | Niedotrenowany, zacięcie na granicy fragmentu (chunk boundary), lub przekroczony czas wywołania wnioskowania | polityka zawiesza się w trakcie ruchu |
Dwa wiersze zasługują na podkreślenie. ACT trenuje na LeRobot v3.0, podczas gdy loader GR00T zawiesza się na nim i wymaga v2.1, więc zbiór danych, który trenuje ACT, może spowodować błąd w uruchomieniu GR00T. A ostatni wiersz ma dwa rozwiązania: autorzy ACT odpowiadają na szarpany ruch większą ilością treningu, podczas gdy przy n_action_steps równym 100, prawdziwe zacięcie występuje na granicy fragmentu (chunk boundary), widoczna pauza co 3.3 sekundy przy 30 klatkach na sekundę. Jeszcze dwie rzeczy do zapamiętania: pojedynczy martwy staw to zazwyczaj ID serwa, które nigdy nie zostało zapisane, a chwytak, który się zbliża, ale nigdy nie zamyka oznacza zbyt mały zakres chwytaka w demonstracjach. Pełny indeks: strony z trybami awarii.
Ile kosztuje uruchomienie
| Poziom | Modele | Czas działania | Cena za godzinę | Koszt uruchomienia |
|---|---|---|---|---|
| RTX 4090 / 24 GB | ACT, SmolVLA | 2 do 5 godzin | 0.30 to 0.60 USD | około 1 do 3 USD |
| A100 80 GB / H100 | GR00T N1.7, GR00T N1.5, Pi0.5 | 3 do 6 godzin | 1.20 to 2.00 USD | około 4 do 12 USD |
To jest argument za rozpoczęciem od ACT, nawet jeśli później chcesz VLA. Nieudane uruchomienie ACT kosztuje tyle co kawa i w ciągu kilku godzin informuje, czy Twój zbiór danych zawiera zadanie. Nieudane uruchomienie GR00T kosztuje cztery razy więcej za tę samą lekcję. Przejście na GR00T N1.7 lub SmolVLA później to zmiana formy, a nie przebudowa. Tło: modele wizualno-językowo-akcyjne, kompletny przewodnik po SO-100, trenuj swoją pierwszą politykę i uczenie przez naśladowanie. Brak ramienia? strona na żywo transmituje prawdziwe SO-100 do sterowania bez rejestracji.
Trenuj ACT na swoim SO-100
Przewodnik dla tej konkretnej kombinacji: ustawienia domyślne, poziom GPU i koszt uruchomienia. Wybierz zbiór danych, zaplecze wynajmuje kartę i zapisuje punkty kontrolne.
Otwórz przewodnik szkoleniowyCzy istnieje wstępnie wytrenowany model ACT, który mogę zamiast tego dostroić?▾
Nie. ACT nie ma modelu bazowego; istnieje tylko po jego wytrenowaniu. To nie jest luka w narzędziach, to jest to, czym jest ACT: artykuł trenuje politykę od podstaw dla każdego zadania. Aby uzyskać punkt kontrolny dostawcy, użyj GR00T N1.7 lub Pi0.5.
Ile odcinków naprawdę potrzebuję?▾
50: tyle, ile ALOHA nagrała na zadanie (100 dla Thread Velcro, najtrudniejszego) i minimum AY-Robots. lerobot zaleca około 10 na lokalizację obiektu, kamery nieruchome, chwyt spójny. Pięćdziesiąt czystych odcinków jest lepsze niż sto, w których kamera się poruszyła.
Czy powinienem zmienić chunk_size ze 100?▾
Zazwyczaj nie. Ablacja rośnie od 1 procenta przy k = 1 do 44 procent przy k = 100 i później się stabilizuje, więc 100 znajduje się blisko szczytu. Jeśli ramię działa zbyt długo, zamiast tego zmniejsz n_action_steps: przy 30 fps, 25 ponownych zapytań co 0.8 sekundy.
Ile trwa uruchomienie treningu i czy mogę je zatrzymać wcześniej?▾
Od dwóch do pięciu godzin na karcie 24 GB dla 100000 kroków. Punkty kontrolne lądują co 20000 kroków, a --resume=true wznawia uruchomienie, więc wcześniejsze zatrzymanie jest bezpieczne. Tylko nie na pierwszym płaskim odcinku: płynność poprawia się po ustabilizowaniu się straty.
Strata spadła, a ramię nadal zawodzi. Co teraz?▾
Prawie zawsze zbiór danych. Odtwórz nagrane odcinki na ramieniu: jeśli odtworzenie nie wykonuje zadania, dane go nie zawierają. Następnie sprawdź, czy coś się nie poruszyło, zwłaszcza kamera. ACT nie ma wcześniejszych założeń, więc lekkie popchnięcie w odcinku 21 jest trwałe.
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