
Apmokykite Action Chunking Transformer nuo nulio SO-100 su lerobot: act konfigūracija, chunk_size ir n_action_steps, 100000 žingsnių tvarkaraštis, 20 ms išvada.
ACT yra išskirtinis tarp SO-100 politikų. GR00T N1.7 ir N1.5 prasideda nuo nvidia/GR00T-N1.7-3B ir nvidia/GR00T-N1.5-3B, Pi0.5 nuo lerobot/pi05_base. ACT prasideda nuo nulio: nėra bazinio kontrolinio taško, nes tai nėra pagrindinis modelis. Tai yra maždaug 80 milijonų parametrų transformatorius, kurį apmokote nuo nulio vienai užduočiai, ant savo roboto rankos, esant jūsų apšvietimui.
Todėl jis atlieka valdymo žingsnį per 20 ms, kai 3 milijardų parametrų VLA reikia nuo 152 iki 485 ms, ir kainuoja nuo 1 iki 3 USD už paleidimą, o ne nuo 4 iki 12. Šis vadovas aprašo rankinį kelią su lerobot ant SO-100: įrašymas, act konfigūracija, ką chunk_size ir n_action_steps valdo, 100000 žingsnių tvarkaraštis, išleidimas. Tada tas pats darbas su AY-Robots, įskaitant atvejus, kai platforma nepadeda.
Ką reikia žinoti
- •ACT apmokomas nuo nulio: jokio bazinio modelio, jokio išankstinio apmokymo, jokios kalbos įvesties. Vienas kontrolinis taškas, viena užduotis.
- •Straipsnis: apie 80 M parametrų, apie 5 valandos su 11 GB RTX 2080 Ti, 0,01 s išvada.
- •lerobot numatytosios reikšmės: chunk_size 100, n_action_steps 100, batch 8, lr 1e-5, 100000 žingsnių, seed 1000.
- •Su AY-Robots: 20 ms per žingsnį, greičiausias iš penkių. Mažiausiai 50 epizodų, LeRobot v3.0, 24 GB kortelė, nuo 1 iki 3 USD už paleidimą.
- •Jis laimi užduotyje, kurią matė, ir pralaimi, kai norite kalbos sąlygojimo.
Patikrinta 2026 m. rugpjūčio 23 d. su lerobot 0.6.x: pyproject.toml on main reads version = "0.6.2", newest tag v0.6.1, 2026 m. rugpjūčio 3 d. Mokomoji medžiaga, prasidedanti su python lerobot/scripts/train.py yra senesnė už konsolės įvesties taškus lerobot-train, lerobot-record and lerobot-rollout.
Kas iš tikrųjų yra ACT
Veiksmų skaidymas su transformatoriais (Action Chunking with Transformers) yra iš ALOHA straipsnio, Smulkių dvirankių manipuliacijų mokymasis su pigia aparatine įranga, autoriai Zhao, Kumar, Levine ir Finn, arXiv, 2023 m. balandžio 23 d. Įrenginys įrašo 50 Hz dažniu su keturiomis internetinėmis kameromis, transliuojančiomis 480x640 raiškos vaizdą 30 kadrų per sekundę greičiu: dvi ant griebtuvų, viena viršuje, viena priekyje. Santraukoje teigiama, kad pasiekiami šeši įgūdžiai su 80–90 procentų sėkme, tarp jų permatomo prieskonių puodelio atidarymas ir baterijos įdėjimas, remiantis 10 minučių demonstracijomis.
Pagrindinė dalis yra naudingesnė planuojant įrašymo sesiją: 50 demonstracijų kiekvienai užduočiai, išskyrus Thread Velcro su 100, kas sudaro 10–20 minučių duomenų ir 30–60 minučių realaus laiko, kai įskaičiuojami atstatymai. Sėkmė taip pat nėra vienoda: Thread Velcro baigiasi 20 procentų, Put On Shoe – 92, Cup Open – 84, Prep Tape – 64.
| Hiperparametras | ALOHA straipsnis, III lentelė | lerobot pagrindinėje šakoje |
|---|---|---|
| mokymosi sparta | 1e-5 | optimizer_lr = 1e-5 |
| paketo dydis | 8 | batch_size = 8, in TrainPipelineConfig not ACTConfig |
| koderio / dekoderio sluoksniai | 4 / 7 | n_encoder_layers = 4 / n_decoder_layers = 1 |
| gabalėlio dydis k | 100 | chunk_size = 100 |
| latentinis z matmuo | nėra; 11 pav. rodo projekciją nuo 32 iki 512 | latent_dim = 32 |
| laikinis ansambliavimas | nėra; --temporal_agg referenciniame kode | temporal_ensemble_coeff = None |
Straipsnyje nurodomi 7 dekoderio sluoksniai, lerobot sąmoningai naudoja 1. Komentaras faile `configuration_act.py` teigia, kad originalioje implementacijoje yra klaida, reiškianti, jog naudojamas tik pirmasis sluoksnis, cituojant 25-ąją problemą tonyzhaozh/act: veiksmo galvutė nuskaito `hs[0]`, todėl visi septyni sluoksniai veikia, bet tik pirmojo išvestis pasiekia prognozę. Ši problema yra atvira ir neatsakyta nuo 2024 m. balandžio 23 d. lerobot atitinka elgesį, kuris lėmė paskelbtus rezultatus, o ne atspausdintą skaičių. Padidinkite `--policy.n_decoder_layers` ir apmokysite modelį, kurio straipsnis niekada nevertino.
Veiksmų suskaidymas yra visa idėja
Įprastas elgesio klonavimas susieja vieną stebėjimą su vienu veiksmu, o klaidos kaupiasi: nukrypimas nukreipia ranką nuo pasiskirstymo, sukeldamas blogesnį veiksmą, ir po trisdešimties žingsnių griebtuvas yra toli nuo objekto. Veiksmų suskaidymas vienu metu prognozuoja k veiksmų ir juos vykdo, sumažindamas efektyvųjį horizontą k kartų. Tai taip pat sprendžia problemą, būdingą žmogaus duomenims: teleoperatoriai daro pauzes, o vieno žingsnio Markovo politika negali modeliuoti pauzės, kuri priklauso nuo to, kas buvo anksčiau.
Straipsnis tiria k, o ne jį tvirtina. Išjungus laikinąjį ansambliavimą, vidutiniškai keturiose aplinkose, sėkmė pakyla nuo 1 procento, kai k = 1, iki 44 procentų, kai k = 100, tada stabilizuojasi ties 200 ir 400, kai politika artėja prie atvirojo ciklo valdymo. Ši kreivė yra priežastis, kodėl numatytoji reikšmė yra 100.
- chunk_size: kiek būsimų veiksmų dekoderis prognozuoja per vieną praleidimą į priekį. Numatytasis 100.
- n_action_steps: kiek iš jų įvykdote prieš pakartotinai užklausiant. Numatytasis 100, todėl lerobot vykdo visą gabalą atviru ciklu.
- lerobot patvirtina
n_action_steps <= chunk_sizeir iškeliaValueError, jei nustatote atvirkščiai.
Operaciniu požiūriu svarbu gabalo dydis (chunk_size) padalintas iš kadrų dažnio. Esant 30 kadrų per sekundę, kuriuos naudoja lerobot SO-100 pavyzdžiai, 100 veiksmų gabalas (chunk) apima maždaug 3,3 sekundės nuo vieno stebėjimo. Jei užduočiai reikia korekcijos tame lange, sumažinkite n_action_steps, o ne chunk_size: išlaikote ilgą prognozę ir stebite dažniau.
# 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=cudaNustačius --policy.temporal_ensemble_coeff, lerobot reikalauja n_action_steps = 1, priešingu atveju iškeldamas NotImplementedError. Ansambliavimas užklausia politiką kiekvienu laiko žingsniu ir sujungia persidengiančias prognozes tam laiko žingsniui su svoriais w_i = exp(-m * i), seniausiam gaunant w_0. Straipsnyje nurodoma, kad ACT atveju tai sudaro 3,3 procento: realu, bet kuklu, ir tai padaugina išvadų skaičių iš gabalo ilgio. Įperkama esant 20 ms per žingsnį, bet ne 485 ms. Žr. išvadų vėlavimas.
Kai ACT pranoksta pagrindinį modelį
Penkios apmokomos politikos viena šalia kitos, su skaičiais, kuriuos AY-Robots matuoja ir naudoja, kad nustatytų nuomojamo GPU dydį.
| Politika | Šeima | Parametrai | Žingsniui | GPU lygis | Min. epizodų | Duomenų rinkinys |
|---|---|---|---|---|---|---|
| ACT | Blokinis transformatorius, nuo nulio | ~80 M | 20 ms | RTX 4090 / 24 GB | 50 | LeRobot v3.0 |
| SmolVLA | Kompaktiškas VLA | ~450 M | 245 ms | RTX 4090 / 24 GB | 30 | LeRobot v3.0 |
| GR00T N1.7 | VLA pagrindas, difuzijos galvutė | ~3 B (~40 M apmokyta) | 152 ms | A100 / H100 80 GB | 50 | LeRobot v2.0 or v2.1 |
| GR00T N1.5 | VLA pagrindas, pirmtakas | ~3 B | 165 ms | A100 / H100 80 GB | 50 | LeRobot v2.0 or v2.1 |
| Pi0.5 | Srauto derinimo VLA, žr. srauto derinimas | ~3 B, PaliGemma backbone | 485 ms | A100 / H100 80 GB | 50 | LeRobot v3.0 |

- 20 ms vienam veiksmo žingsniui, greičiausias iš penkių, naudojant 24 GB kortelę, o ne A100.
- Nuo 1 iki 3 USD už paleidimą, palyginti su 4–12 USD už 3 B klasę.
- Tikslus atliekant kontaktinius darbus, kuriuos jis matė: 88 ir 96 procentai „Slide Ziploc“ ir „Slot Battery“ užduotyse, kur ankstesni metodai niekada neįveikė pirmojo etapo.
- Nėra kalbos sąlygojimo: užduoties eilutė ignoruojama, todėl vienas kontrolinis taškas yra viena užduotis.
- Nėra semantinių prioritetų: viskas, ką jis žino, gauta iš jūsų 50 epizodų.
- Siauras apibendrinimas: pajudinus kamerą, reikia persimokyti.
- Jis tyliai sugenda: nuostoliai mažėja, ranka nieko nedaro, žurnaluose nieko nerašoma.
- Greičio pranašumas padeda tik tada, jei išvados apdorojimas vyksta šalia servovariklių.
Pasirinkite ACT, kai užduotis ir scena yra fiksuotos, o judesys turi būti greitas ir tikslus. Pasirinkite , kai vienas kontrolinis taškas turi apimti kelias instrukcijas. Du puslapiai padeda priimti sprendimą tiesiogiai: ir . Dėl paskelbtų etalonų, susieja kiekvieną skaičių su jo šaltiniu.
Ko jums reikia prieš pradedant
Viena sekimo ranka, viena vadovavimo ranka , bent viena kamera, 24 GB GPU. ACT nuskaito tik vaizdus ir jungčių pozicijas. Dvi kameros yra optimalus variantas: fiksuotas priekinis vaizdas, skirtas daiktų vietai, riešo kamera, skirta tam, ką ketina paliesti, kaip ir ALOHA atveju.
| Ranka | Servovarikliai | Įtampa | Dalių kaina | Būsena |
|---|---|---|---|---|
| SO-100 | Feetech STS3215 | 7.4 V | ~110 to 150 EUR | Visas palaikymas, etaloninė ranka |
| SO-101 | Feetech STS3215 | 7.4 V | ~130 to 170 EUR | Visas palaikymas |
| Koch v1.1 | Dynamixel XL330 / XL430 | 5 V and 12 V rails | ~250 to 350 EUR | Suderinama |
| LeKiwi | Feetech STS3215 (arm) | 7.4 V arm, 12 V base | ~400 to 500 EUR | Suderinama |
SO-100 ir SO-101 naudoja Feetech STS3215 servovariklius su 7.4 V maitinimo linija. Maitinant juos 12 V, jie sugenda, pakankamai tyliai, kad žmonės pirmiausia kaltina programinę įrangą, o Koch 12 V maitinimo šaltinis fiziškai tinka SO-100 plokštei. Patikrinkite etiketę. Simptomai: servovariklis nereaguoja, ranka trūkčioja, tada nusvyra. Taip pat SO-100 vs SO-101.
Nuo plikos rankos iki įrašyto duomenų rinkinio
Toliau aprašytas srautas yra lerobot 0.6.x. Praleiskite jį, jei turite sukalibruotą ranką ir duomenų rinkinį. Priešingu atveju SO-100 pradžios vadovas apima surinkimą, įrašymo apžvalga apima fiksavimą, o duomenų rinkinio dokumentacija formatą.
- 1Įdiekite lerobot su reikiamais priedais
Įrašymui reikalingi
core_scripts, apmokymuitraining, Feetech servovarikliamsfeetech. 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 - 2Raskite kiekvienos rankos USB prievadą
Paleiskite jį prijungus abi rankas, atjungdami vieną, kai bus paprašyta. „Linux“ sistemoje gali tekti atidaryti mazgo leidimus.
bashlerobot-find-port # on Linux, if the port exists but is unreadable: sudo chmod 666 /dev/ttyACM0 - 3Nustatykite variklių ID ir perdavimo spartą
SO-100 atveju tai atliekama prieš surinkimą: skirtingai nei SO-101, jungtys tampa nepasiekiamos surinkus. Scenarijus eina per magistralę po vieną variklį nuo griebtuvo, rašydamas ID į EEPROM.
bashlerobot-setup-motors \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM0 lerobot-setup-motors \ --teleop.type=so100_leader \ --teleop.port=/dev/ttyACM1 - 4Kalibruokite abi rankas
Nustatykite kiekvieną jungtį į diapazono vidurį, paspauskite Enter, tada perbraukite kiekvieną per visą diapazoną. Kalibravimas leidžia vienai rankai apmokytą politiką paleisti ant kitos. Pakartotinai naudokite tą patį
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 - 5Vieną kartą teleoperuokite su įjungtomis kameromis
Lerobot nykščio taisyklė: turėtumėte gebėti atlikti užduotį žiūrėdami tik į kameros vaizdus. Jei negalite, ACT taip pat negali. Tai aptinka daugiau blogų duomenų rinkinių nei vėlesnis derinimas.
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 - 6Įrašykite 50 epizodų
50 yra AY-Robots minimumas ir tai, ką ALOHA naudojo kiekvienai užduočiai. lerobot pataria 10 vienai objekto vietai, kameros fiksuotos, griebimas nuoseklus.
nbaigia epizodą,rperrašo,qsustabdo ir užkoduoja.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 neturi išankstinių žinių, į kurias galėtų remtis, todėl kiekvienas nenuoseklumas tampa nuolatiniu. Trys brangiausi: kamera pajudinta tarp 20 ir 21 epizodo, pasikeitusi šviesa, nes pusę rinkinio įrašėte po pietų, griebimas atliktas dviem būdais. Kiekvienas duoda tobulai atrodančią nuostolių kreivę ir ranką, kuri eina į netinkamą vietą. Žr. nuostoliai mažėja, politika nieko nedaro, politika veikia tik vienoje sąrankoje ir aukštos kokybės mokymo duomenų rinkimas.
Prieš apmokymą, pakartokite bent penkis epizodus. LeRobot duomenų rinkinio formatas saugo kameros srautus, jungčių būsenas ir veiksmus kiekvienam epizodui, o pakartotinis paleidimas grąžina tuos veiksmus rankai. Jei pakartotinis paleidimas neatlieka užduoties, duomenys jos neturi ir apmokymas jos nesukurs.
lerobot-replay \
--robot.type=so100_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_follower \
--dataset.repo_id=${HF_USER}/so100_cube \
--dataset.episode=0ACT politikos apmokymas
Tai yra visa komanda. Viskas, kas susiję su ACT, jau yra numatytasis nustatymas, todėl lerobot ACT puslapyje rekomenduojama pradėti nuo jų.
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 įkelia ACTConfig, kuris prisitaiko prie to, kiek variklių ir kamerų įrašė jūsų duomenų rinkinys, todėl niekada nereikia deklaruoti stebėjimo formos. --wandb.enable=true yra neprivalomas ir vertas dėmesio: nuostolių kreivė yra vienintelis pigus signalas 100000 žingsnių vykdyme. Tvarkaraštis gaunamas iš lerobot mokymo konfigūracijos, o ne iš ACTConfig: 100000 žingsnių, paketas 8, sėkla 1000, kontrolinis taškas kas 20000 žingsnių, registravimas kas 200.
Visas vykdymas palieka penkis kontrolinių taškų katalogus, nuo 020000 iki 100000, plius paskutinę simbolinę nuorodą. Išsaugokite juos visus: geriausia politika dažnai būna ne paskutinė.
| Nustatymas | lerobot default | AY-Robots ACT form | Komentaras |
|---|---|---|---|
| paketo dydis | 8 | 8 | Pirmiausia sumažinkite jį, jei pasieksite VRAM limitus. |
| mokymosi sparta | 1e-5 | 1e-5 | Tas pats, kas ALOHA straipsnyje. |
| maksimalus žingsnių skaičius | 100000 | 100000 | Apytiksliai ten, kur 50 epizodų rinkinys nustoja tobulėti. |
| gradiento kaupimas | 1 | 1, does not apply | Vietoj to pakeiskite paketo dydį. |
| sėkla | 1000 | prieinamas | GR00T's tyro entry point has no seed; ACT runs are the reproducible ones. |
| chunk_size / n_action_steps | 100 / 100 | 100 / 100, redaguojamas | Prognozavimo ir vykdymo horizontas. Sumažinkite antrąjį, o ne pirmąjį. |
| kontrolinio taško dažnis | 20000 | neprieinamas | saveSteps čia yra GR00T nustatymas. |
ACT su 8 paketo dydžiu ir dviem 640x480 kameromis patogiai telpa į 24 GB. Jis nustoja tilpti, kai žmonės padidina paketo dydį dėl greičio arba pateikia jam 1920x1080 kadrus, kuriuos rodo vienas lerobot įrašymo pavyzdys. Du ResNet-18 pagrindai 1080p raiška turi labai skirtingą atminties profilį. Sumažinkite --batch_size iki 4 prieš nuomodami didesnę kortelę. Žr. atminties trūkumas mokymo metu.
Trukmė: apie 5 valandas su 11 GB RTX 2080 Ti (pagal straipsnį), kelios valandos 100 tūkst. žingsnių (pagal lerobot ACT puslapį), 2–5 valandos su AY-Robots 24 GB pakopa. Nenutraukite per anksti. Nuorodos saugyklos README teigia, kad trūkčiojanti ar sustojanti politika paprastai tiesiog reikalauja daugiau mokymo, nes sėkmė ir sklandumas toliau gerėja po to, kai nuostoliai stabilizuojasi: realaus pasaulio duomenims reikia bent 5000 epochų, arba 3–4 kartus ilgesnio laiko po stabilizavimosi.
lerobot-train \
--config_path=outputs/train/act_so100_cube/checkpoints/last/pretrained_model/train_config.json \
--resume=trueIšmokytos politikos vykdymas ant roboto rankos
Diegimui naudojama lerobot-rollout. Kameros raktai turi atitikti įrašytus: politika, apmokyta su front ir wrist nepriims cam0 ir cam1, o rename_map nepadeda, nes jai reikia iš anksto apmokyto kontrolinio taško. Užduoties eilutę galima praleisti; lerobot pavyzdyje ji pažymėta kaip praleidžiama 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=60Vertinimas anksčiau buvo vykdomas per lerobot-record --policy.path=.... Versijoje 0.6.x tai yra lerobot-rollout su --strategy.type selektoriumi: base, sentry (įrašymas su automatiniu įkėlimu), highlight (žiedinis buferis išsaugomas paspaudus klavišą), dagger (žmogus cikle) ir episodic. Nuo 2026 m. rugpjūčio 23 d. ACT dokumentacijos puslapyje vis dar rašoma "naudojant lerobot-record komandą" tiesiai virš bloko, kuriame vykdoma lerobot-rollout. Vadovaukitės komanda, o ne sakiniu.
Norėdami prisegti kontrolinį tašką, o ne galutinį modelį, pridėkite --policy.pretrained_revision. Tam reikia, kad paleidimas būtų pradėtas su --save_checkpoint_to_hub=true, pagal numatytuosius nustatymus išjungta: be jo lerobot įkelia tik galutinį modelį ir nieko daugiau. Su juo kiekvienas kontrolinis taškas yra pažymėtas nuliais užpildytu žingsniu, todėl --policy.pretrained_revision=060000 atkuria 60000 žingsnio. Palyginimas su 100000 ant tikrosios rankos yra pigiausias galimas eksperimentas.
Du keliai į tą patį kontrolinį tašką
Viskas aukščiau yra rankinis kelias ir jis veikia. Platformos kelias maino valdymą į tai, kad nereikia turėti GPU ar Python aplinkos.
- Įdiekite lerobot 0.6.x su
core_scripts,training,feetech, ffmpeg. - Raskite prievadus, nustatykite variklių ID, kalibruokite abi rankas, įrašykite 50 epizodų.
- Atkurkite kelis epizodus, kad patvirtintumėte, jog duomenyse yra užduotis.
- Išsinuomokite arba turėkite 24 GB GPU, suderinkite CUDA ir PyTorch, paleiskite
lerobot-train --policy.type=act. - Palaukite kelias valandas, tada paleiskite
lerobot-rolloutmašinoje prie rankos.
# 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=cudaVisiškas valdymas: redaguokite configuration_act.py, pridėkite kamerą, išsišakokite treniruoklį. Tyrimams, o ne užduoties pristatymui, platforma yra blaškantis veiksnys.
- Įrašykite naudodami darbalaukio klientą arba pateikite Hugging Face saugyklos ID ar vietinį duomenų rinkinį.
- Atidarykite ACT ant SO-100 vadovą ir pasirinkite modelį bei duomenų rinkinį. Numatytosios reikšmės yra lerobot; chunkSize, nActionSteps, seed ir logFreq yra redaguojami.
- Backendas nuomoja GPU, kurio dydis nustatomas pagal VRAM, ir rašo kontrolinius taškus į objektų saugyklą.
/api/inference/podtada pateikia politiką vietiniam roboto klientui. Nenaudojamas stebėjimo procesas sunaikina pod'ą, todėl niekas tyliai neapmokestinama.- Tos pačios operacijos egzistuoja CLI, MCP serveryje ir mokymo dokumentuose.
Tai neištaiso jūsų duomenų: duomenų rinkinys su perkelta kamera čia treniruojasi lygiai taip pat blogai, ir forma negali to aptikti. Tai taip pat nepašalina vėlavimo problemos. Valdymo ciklas yra nuo 20 iki 485 ms vienam veiksmo žingsniui, su viešojo interneto kelionėmis pirmyn ir atgal, o ACT kenčia labiausiai, nes jo žingsnis yra trumpiausias: 60 ms yra 12 procentų sulėtėjimas, palyginti su Pi0.5 485 ms, bet keturis kartus ilgesnis žingsnis, palyginti su ACT 20 ms. Nuotolinis išvados darymas tinka lėtam paėmimui ir padėjimui, o ne greitam reaktyviam judėjimui.

Kas iš tikrųjų nutinka ne taip
Beveik jokių problemų nekyla su treniravimo komanda. Jos kyla dėl aplinkinių dalykų, išdėstytų pagal tai, kaip dažnai jos pasitaiko pirmą kartą.
| Simptomas | Įprasta priežastis | Puslapis |
|---|---|---|
| lerobot-find-port nieko nerodo | Tvarkyklės, kabelio arba mazgo leidimai | ranka neaptikta |
| Kamera nerasta įrašymo metu | Indeksas pasikeitė po perkrovimo, arba dvi kameros prijungtos prie vieno USB valdiklio | kamera neaptikta |
| Treniravimas atmeta duomenų rinkinį | ACT reikalauja v3.0, GR00T reikia v2.1 | duomenų rinkinys atmestas kaip v3 |
| CUDA atminties trūkumas | Padidintas paketo dydis, arba 1080p kadrai vietoj 480p | atminties trūkumas treniruojant |
| Nuostolis atrodo puikiai, ranka nieko nedaro | Duomenyse trūksta užduoties, arba kamera pajudėjo | nuostolis mažėja, politika nieko nedaro |
| Trūkčiojantis judesys arba pauzė epizodo viduryje | Nepakankamai apmokyta, bloko ribos sustojimas arba laiko limitą viršijęs išvados (inference) iškvietimas | politika sustingsta judesio viduryje |
Dvi eilutės nusipelno dėmesio. ACT treniruojasi su LeRobot v3.0, o GR00T įkroviklis su juo sugenda ir reikalauja v2.1, todėl duomenų rinkinys, kuris treniruoja ACT, gali sukelti GR00T vykdymo klaidą. Ir paskutinė eilutė turi du pataisymus: ACT autoriai į trūkčiojantį judesį atsako papildomu treniravimu, o su n_action_steps ties 100 tikras sustojimas atsiranda bloko riboje, matoma pauzė kas 3.3 sekundės esant 30 kadrų per sekundę. Dar du dalykai, kuriuos reikia žinoti: vienas neveikiantis sujungimas paprastai yra servo ID, kuris niekada nebuvo įrašytas, ir griebtuvas, kuris artėja, bet niekada neužsidaro reiškia per mažą griebtuvo diapazoną demonstracijose. Visas indeksas: gedimo režimų puslapiai.
Kiek kainuoja vykdymas
| Lygis | Modeliai | Vykdymo laikas | Kaina už valandą | Kaina už vykdymą |
|---|---|---|---|---|
| RTX 4090 / 24 GB | ACT, SmolVLA | nuo 2 iki 5 valandų | 0.30 to 0.60 USD | about 1 to 3 USD |
| A100 80 GB / H100 | GR00T N1.7, GR00T N1.5, Pi0.5 | nuo 3 iki 6 valandų | 1.20 to 2.00 USD | about 4 to 12 USD |
Tai yra argumentas, kodėl verta pradėti nuo ACT, net jei vėliau norėsite VLA. Nepavykęs ACT vykdymas kainuoja kavos puodelio kainą ir per kelias valandas parodo, ar jūsų duomenų rinkinyje yra užduotis. Nepavykęs GR00T vykdymas kainuoja keturis kartus daugiau už tą pačią pamoką. Pereiti prie GR00T N1.7 arba SmolVLA vėliau yra formos pakeitimas, o ne atstatymas. Fonas: vizijos-kalbos-veiksmų modeliai, išsamus SO-100 vadovas, apmokykite savo pirmąją politiką ir imitacinis mokymasis. Neturite roboto rankos? Tiesioginė transliacija transliuoja tikrą SO-100, kurį galite valdyti be registracijos.
Apmokykite ACT savo SO-100
Šio tikslaus derinio vadovas: numatytosios nuostatos, GPU lygis ir kiek kainuoja vykdymas. Pasirinkite duomenų rinkinį, foninė sistema išnuomoja kortelę ir įrašo kontrolinius taškus.
Atidaryti mokymo vadovąAr yra iš anksto apmokytas ACT modelis, kurį galėčiau vietoj to patikslinti?▾
Ne. ACT neturi bazinio modelio; jis egzistuoja tik po to, kai jį apmokote. Tai nėra įrankių trūkumas, tai yra ACT esmė: straipsnyje politika apmokoma nuo nulio kiekvienai užduočiai. Norėdami gauti pardavėjo kontrolinį tašką, naudokite GR00T N1.7 arba Pi0.5.
Kiek epizodų man tikrai reikia?▾
50: tiek ALOHA įrašė kiekvienai užduočiai (100 „Thread Velcro“, sunkiausiai), ir AY-Robots minimumas. lerobot pataria apie 10 vienai objekto vietai, kameros fiksuotos, sugriebimas nuoseklus. Penkiasdešimt švarių epizodų yra geriau nei šimtas, kai kamera judėjo.
Ar turėčiau pakeisti chunk_size iš 100?▾
Paprastai ne. Ablacija kyla nuo 1 procento, kai k = 1, iki 44 procentų, kai k = 100, ir po to mažėja, todėl 100 yra arti viršaus. Jei ranka per ilgai įsipareigoja, vietoj to sumažinkite n_action_steps: esant 30 kadrų per sekundę, 25 pakartotinės užklausos kas 0.8 sekundės.
Kiek laiko trunka mokymo vykdymas ir ar galiu jį sustabdyti anksčiau?▾
Nuo dviejų iki penkių valandų su 24 GB kortele 100000 žingsnių. Kontroliniai taškai įrašomi kas 20000 žingsnių, o --resume=true atnaujina vykdymą, todėl ankstyvas sustabdymas yra saugus. Tik ne pirmoje lygioje atkarpoje: lygumas pagerėja po to, kai nuostoliai stabilizuojasi.
Nuostoliai sumažėjo, o ranka vis dar neveikia. Ką daryti dabar?▾
Beveik visada duomenų rinkinys. Atkurkite įrašytus epizodus su ranka: jei atkūrimas neatlieka užduoties, duomenys jos neturi. Tada patikrinkite, ar kas nors pajudėjo, ypač kamera. ACT neturi išankstinių žinių, todėl postūmis 21-ame epizode yra nuolatinis.
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