Macierz treningowa AY-Robots z pięcioma wierszami polityk i czterema kolumnami ramion robotycznych, gdzie każda komórka łączy się z przewodnikiem szkoleniowym dla konkretnego modelu i ramienia
ACTSO-100lerobotuczenie przez imitacjętrening polityki

Jak wytrenować ACT na SO-100 od podstaw

AY-Robots ResearchAugust 23, 202616 min czytania

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.
Jakie wersje to opisuje

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.

HiperparametrArtykuł ALOHA, Tabela IIIlerobot na main
współczynnik uczenia1e-5optimizer_lr = 1e-5
rozmiar partii8batch_size = 8, w TrainPipelineConfig, nie ACTConfig
warstwy kodera / dekodera4 / 7n_encoder_layers = 4 / n_decoder_layers = 1
rozmiar fragmentu k100chunk_size = 100
wymiar latentny zbrak; Rys. 11 pokazuje projekcję 32 do 512latent_dim = 32
ensembling czasowybrak; --temporal_agg w kodzie referencyjnymtemporal_ensemble_coeff = None
Wiersz warstw dekodera to nie literówka

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_size i zgłasza ValueError, 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.

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
Skracanie wykonywanej części fragmentu bez skracania predykcji.
Pułapka ensemblowania czasowego

Ustaw --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.

PolitykaRodzinaParametryNa krokPoziom GPUMin. epizodyZbiór danych
ACTTransformer z podziałem na fragmenty, od podstaw~80 M20 msRTX 4090 / 24 GB50LeRobot v3.0
SmolVLAKompaktowy VLA~450 M245 msRTX 4090 / 24 GB30LeRobot v3.0
GR00T N1.7Podstawa VLA, głowica dyfuzyjna~3 B (~40 M trained)152 msA100 / H100 80 GB50LeRobot v2.0 or v2.1
GR00T N1.5Podstawa VLA, poprzednik~3 B165 msA100 / H100 80 GB50LeRobot v2.0 or v2.1
Pi0.5VLA z dopasowaniem przepływu, zobacz dopasowanie przepływu~3 B, PaliGemma backbone485 msA100 / H100 80 GB50LeRobot v3.0
Strona polityk AY-Robots przedstawiająca tabelę porównawczą ACT, SmolVLA, GR00T N1.5, GR00T N1.7 i Pi0.5 z liczbą parametrów, wymaganiami GPU, opóźnieniem wnioskowania i minimalną liczbą epizodów
Tabela /policies: ACT ma najmniejszą liczbę parametrów i najkrótszy czas kroku.
Trenowanie ACT od podstaw
Zalety
  • 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.
Kompromisy
  • 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ęSerwaNapięcieKoszt częściStatus
SO-100Feetech STS32157.4 V~110 do 150 EURPełne wsparcie, ramię referencyjne
SO-101Feetech STS32157.4 V~130 do 170 EURPełne wsparcie
Koch v1.1Dynamixel XL330 / XL430Szyny 5 V i 12 V~250 do 350 EURKompatybilne
LeKiwiFeetech STS3215 (ramię)Ramię 7.4 V, podstawa 12 V~400 do 500 EURKompatybilne
7.4 V, nie 12 V

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.

  1. 1
    Zainstaluj lerobot z odpowiednimi dodatkami

    Nagrywanie wymaga core_scripts, trening training, serwa Feetech 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
    Znajdź 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.

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

    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
    Skalibruj 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.

    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
    Teleoperuj 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.

    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
    Nagraj 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. n kończy epizod, r nagrywa ponownie, q zatrzymuje i koduje.

    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
Strona samouczka nagrywania AY-Robots wyjaśniająca, jak przechwycić zbiór danych w formacie LeRobot z sesji teleoperacji
Samouczek nagrywania. Klient desktopowy zapisuje ten sam układ co lerobot-record.
Pułapka, która pochłania dzień: niespójny zbiór danych

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.

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
Odtwarzanie epizodu 0. Jeśli to się nie powiedzie, zatrzymaj i nagraj ponownie.

Trenowanie 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.

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
Polecenie treningowe z dokumentacji lerobot 0.6.x, na zbiorze danych SO-100.

--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ą.

UstawienieDomyślne lerobotFormularz ACT AY-RobotsKomentarz
Rozmiar partii88Obniż go najpierw, jeśli napotkasz limity VRAM.
Współczynnik uczenia1e-51e-5Taki sam jak w artykule ALOHA.
Maksymalna liczba kroków100000100000Mniej więcej tam, gdzie zestaw 50 epizodów przestaje się poprawiać.
Akumulacja gradientu11, nie dotyczyZamiast tego zmień rozmiar partii.
Ziarno1000ujawnionePunkt wejścia tyro GR00T nie ma ziarna; uruchomienia ACT są tymi, które można odtworzyć.
chunk_size / n_action_steps100 / 100100 / 100, edytowalneHoryzont przewidywania i wykonania. Obniż drugi, nie pierwszy.
Częstotliwość punktów kontrolnych20000nieujawnionesaveSteps to tutaj pokrętło GR00T.
Brak pamięci to problem rozmiaru partii, a nie karty

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.

bash
lerobot-train \
  --config_path=outputs/train/act_so100_cube/checkpoints/last/pretrained_model/train_config.json \
  --resume=true
Wznowienie przerwanego uruchomienia z ostatniego punktu kontrolnego.

Uruchamianie 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.

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
Autonomiczne uruchomienie bez nagrywania. Użyj --strategy.type=sentry, aby nagrać epizody ewaluacyjne.
To polecenie zostało niedawno zmienione, więc stare samouczki się różnią

Ewaluacja 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.

  1. Zainstaluj lerobot 0.6.x z core_scripts, training, feetech, ffmpeg.
  2. Znajdź porty, ustaw identyfikatory silników, skalibruj oba ramiona, nagraj 50 epizodów.
  3. Odtwórz kilka epizodów, aby potwierdzić, że dane zawierają zadanie.
  4. Wynajmij lub posiadaj GPU 24 GB, dopasuj CUDA i PyTorch, uruchom lerobot-train --policy.type=act.
  5. Poczekaj kilka godzin, a następnie uruchom lerobot-rollout na maszynie przy ramieniu.
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
Co daje ta ścieżka

Pełna kontrola: edytuj configuration_act.py, dodaj kamerę, rozwidlij trener. W przypadku badań, a nie dostarczania zadania, platforma jest rozpraszaczem.

Macierz treningowa AY-Robots z pięcioma wierszami polityk i czterema kolumnami ramion robotycznych, gdzie każda komórka łączy się z konkretnym przewodnikiem treningowym dla tej kombinacji modelu i ramienia
Macierz na /train. Wiersz ACT w stosunku do kolumny SO-100 to przewodnik z tego artykułu.

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.

ObjawTypowa przyczynaStrona
lerobot-find-port nic nie pokazujeSterownik, kabel lub uprawnienia węzłaramię nie wykryte
Brak kamery podczas nagrywaniaIndeks zmieniony po restarcie, lub dwie kamery na jednym kontrolerze USBkamera nie wykryta
Trening odrzuca zbiór danychACT wymaga v3.0, GR00T potrzebuje v2.1zbiór danych odrzucony jako v3
Brak pamięci CUDAZwiększony rozmiar partii (batch size), lub klatki 1080p zamiast 480pbrak pamięci podczas treningu
Wartość funkcji straty wygląda świetnie, ramię nic nie robiDane nie zawierają zadania, lub kamera się przesunęłaspadek funkcji straty, polityka nic nie robi
Szarpany ruch lub pauza w trakcie epizoduNiedotrenowany, zacięcie na granicy fragmentu (chunk boundary), lub przekroczony czas wywołania wnioskowaniapolityka 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

PoziomModeleCzas działaniaCena za godzinęKoszt uruchomienia
RTX 4090 / 24 GBACT, SmolVLA2 do 5 godzin0.30 to 0.60 USDokoło 1 do 3 USD
A100 80 GB / H100GR00T N1.7, GR00T N1.5, Pi0.53 do 6 godzin1.20 to 2.00 USDokoł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 szkoleniowy
Czy 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.

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started