
Train een Action Chunking Transformer vanaf nul op een SO-100 met lerobot: de act config, chunk_size en n_action_steps, het 100000-stappen schema, 20 ms inferentie.
ACT is de vreemde eend in de bijt onder de SO-100 beleidslijnen. GR00T N1.7 en N1.5 beginnen bij nvidia/GR00T-N1.7-3B en nvidia/GR00T-N1.5-3B, Pi0.5 bij lerobot/pi05_base. ACT begint vanuit het niets: er is geen basischeckpoint, omdat het geen funderingsmodel is. Het is een transformator met ongeveer 80 miljoen parameters die je vanaf nul traint voor één taak, op jouw robotarm, onder jouw verlichting.
Dat is ook de reden waarom het een controlestap uitvoert in 20 ms, terwijl een VLA met 3 miljard parameters 152 tot 485 ms nodig heeft, en 1 tot 3 USD per run kost in plaats van 4 tot 12. Deze gids beschrijft de handmatige route met lerobot op een SO-100: opnemen, de act configuratie, wat chunk_size en n_action_steps regelen, het 100000-stappen schema, de rollout. Daarna dezelfde taak op AY-Robots, inclusief waar het platform niet helpt.
Wat je moet weten
- •ACT traint vanaf nul: geen basismodel, geen voor-training, geen taalinput. Eén checkpoint, één taak.
- •Het paper: ongeveer 80 M parameters, ongeveer 5 uur op een 11 GB RTX 2080 Ti, 0.01 s inferentie.
- •lerobot standaardinstellingen: chunk_size 100, n_action_steps 100, batch 8, lr 1e-5, 100000 stappen, seed 1000.
- •Op AY-Robots: 20 ms per stap, de snelste van de vijf. Minimaal 50 episodes, LeRobot v3.0, een 24 GB kaart, 1 tot 3 USD per run.
- •Het wint op een taak die het heeft gezien, en verliest zodra je taalconditionering wilt.
Gecontroleerd op 23 augustus 2026 tegen lerobot 0.6.x: pyproject.toml op main leest version = "0.6.2", nieuwste tag v0.6.1, 3 augustus 2026. Een tutorial die begint met python lerobot/scripts/train.py dateert van vóór de console-ingangspunten lerobot-train, lerobot-record en lerobot-rollout.
Wat ACT precies is
Action Chunking with Transformers komt uit het ALOHA-artikel, Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware, door Zhao, Kumar, Levine en Finn, arXiv, 23 april 2023. De opstelling neemt op met 50 Hz met vier webcams die 480x640 streamen met 30 fps: twee op de grijpers, één bovenaan, één vooraan. Het abstract claimt zes vaardigheden met 80 tot 90 procent succes, waaronder het openen van een doorschijnend kruidenpotje en het plaatsen van een batterij, gebaseerd op 10 minuten aan demonstraties.
De hoofdtekst is nuttiger bij het plannen van een opnamesessie: 50 demonstraties per taak, behalve Thread Velcro met 100, wat 10 tot 20 minuten aan data en 30 tot 60 minuten aan totale tijd is zodra resets zijn meegeteld. Het succes is ook niet uniform: Thread Velcro eindigt op 20 procent, Put On Shoe op 92, Cup Open 84, Prep Tape 64.
| Hyperparameter | ALOHA-artikel, Tabel III | lerobot op main |
|---|---|---|
| leersnelheid | 1e-5 | optimizer_lr = 1e-5 |
| batchgrootte | 8 | batch_size = 8, in TrainPipelineConfig not ACTConfig |
| encoder / decoder lagen | 4 / 7 | n_encoder_layers = 4 / n_decoder_layers = 1 |
| chunkgrootte k | 100 | chunk_size = 100 |
| latente dimensie van z | afwezig; Fig. 11 toont een projectie van 32 naar 512 | latent_dim = 32 |
| temporele ensembling | afwezig; --temporal_agg in de referentiecode | temporal_ensemble_coeff = None |
Het artikel vermeldt 7 decoderlagen, lerobot levert er opzettelijk 1. De opmerking in configuration_act.py stelt dat de oorspronkelijke implementatie een bug bevat waardoor alleen de eerste laag wordt gebruikt, verwijzend naar issue 25 in tonyzhaozh/act: de action head leest hs[0], dus alle zeven lagen worden uitgevoerd, maar alleen de eerste uitvoer bereikt de voorspelling. Dat issue is open en onbeantwoord sinds 23 april 2024. lerobot komt overeen met het gedrag dat de gepubliceerde resultaten opleverde, niet met het afgedrukte aantal. Verhoog --policy.n_decoder_layers en je traint een model dat het artikel nooit heeft geëvalueerd.
Action chunking is het hele idee
Gewone gedragscloning brengt één observatie in kaart naar één actie, en fouten stapelen zich op: een afwijking brengt de arm buiten de distributie, wat een slechtere actie oplevert, en dertig stappen later is de grijper nergens in de buurt van het object. Actie-chunking voorspelt k acties tegelijk en voert deze uit, waardoor de effectieve horizon met een factor k wordt verlaagd. Het behandelt ook een specifieke hinder bij menselijke gegevens: teleoperatoren pauzeren, en een Markoviaans beleid kan een pauze die afhangt van wat eraan voorafging niet modelleren.
Het artikel ablateert k in plaats van het te bevestigen. Met temporele ensembling uitgeschakeld, gemiddeld over vier instellingen, stijgt het succes van 1 procent bij k = 1 naar 44 procent bij k = 100, en vlakt vervolgens af bij 200 en 400 naarmate het beleid open-loop controle nadert. Die curve is de reden waarom de standaardwaarde 100 is.
- chunk_size: hoeveel toekomstige acties de decoder per forward pass voorspelt. Standaard 100.
- n_action_steps: hoeveel daarvan je uitvoert voordat je opnieuw een query doet. Standaard 100, dus lerobot voert de hele chunk open loop uit.
- lerobot valideert
n_action_steps <= chunk_sizeen genereert eenValueErrorals je het omgekeerd instelt.
Wat operationeel van belang is, is chunk_size gedeeld door de framerate. Bij de 30 fps die lerobot's SO-100 voorbeelden gebruiken, omvat een chunk van 100 ongeveer 3,3 seconden vanaf één observatie. Als de taak een correctie binnen dat venster vereist, verlaag dan n_action_steps, niet chunk_size: je behoudt de lange voorspelling en observeert vaker opnieuw.
# 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=cudaStel --policy.temporal_ensemble_coeff in en lerobot vereist n_action_steps = 1, anders wordt een NotImplementedError gegenereerd. Ensembling bevraagt het beleid bij elke tijdstap en mengt de overlappende voorspellingen voor die tijdstap met gewichten w_i = exp(-m * i), waarbij de oudste w_0 krijgt. Het artikel schat dit op 3,3 procent voor ACT: reëel maar bescheiden, en het vermenigvuldigt het aantal inferenties met de chunklengte. Betaalbaar bij 20 ms per stap, niet bij 485 ms. Zie inferentielatentie.
Wanneer ACT een funderingsmodel verslaat
De vijf trainbare beleidsregels naast elkaar, met de cijfers die AY-Robots meet en gebruikt om de GPU te dimensioneren die het huurt.
| Beleidsregel | Familie | Parameters | Per stap | GPU-klasse | Min. afleveringen | Dataset |
|---|---|---|---|---|---|---|
| ACT | Chunking-transformer, vanaf nul | ~80 M | 20 ms | RTX 4090 / 24 GB | 50 | LeRobot v3.0 |
| SmolVLA | Compacte VLA | ~450 M | 245 ms | RTX 4090 / 24 GB | 30 | LeRobot v3.0 |
| GR00T N1.7 | VLA-fundering, diffusie-kop | ~3 B (~40 M trained) | 152 ms | A100 / H100 80 GB | 50 | LeRobot v2.0 or v2.1 |
| GR00T N1.5 | VLA-fundering, voorganger | ~3 B | 165 ms | A100 / H100 80 GB | 50 | LeRobot v2.0 or v2.1 |
| Pi0.5 | Flow-matching VLA, zie flow matching | ~3 B, PaliGemma backbone | 485 ms | A100 / H100 80 GB | 50 | LeRobot v3.0 |

- 20 ms per actiestap, de snelste van de vijf, op een 24 GB kaart, geen A100.
- 1 tot 3 USD per run tegen 4 tot 12 voor de 3 B klasse.
- Nauwkeurig bij contactrijk werk dat het heeft gezien: 88 en 96 procent op Slide Ziploc en Slot Battery, waar eerdere methoden nooit fase één haalden.
- Geen taalconditionering: de taakstring wordt genegeerd, dus één checkpoint is één taak.
- Geen semantische voorkennis: alles wat het weet, komt van jouw 50 episodes.
- Beperkte generalisatie: verplaats een camera en je moet opnieuw trainen.
- Het faalt stilzwijgend: verlies daalt, de arm doet niets, de logs zeggen niets.
- Het snelheidsvoordeel helpt alleen als inferentie naast de servo's zit.
Kies ACT wanneer taak en scène vastliggen en beweging snel en precies moet zijn. Kies een wanneer één checkpoint meerdere instructies moet dekken. Twee pagina's vergelijken de beslissing direct: en . Voor gepubliceerde benchmarks, linkt elk nummer aan de bron.
Wat je nodig hebt voordat je begint
Eén volgerarm, één leiderarm voor , minstens één camera, een 24 GB GPU. ACT leest alleen beelden en gewrichtsposities. Twee camera's is de ideale configuratie: een vaste vooraanzicht voor waar dingen zijn, een polscamera voor wat de gaat aanraken, zoals bij ALOHA.
| Arm | Servo's | Voltage | Kosten onderdelen | Status |
|---|---|---|---|---|
| SO-100 | Feetech STS3215 | 7.4 V | ~110 tot 150 EUR | Volledige ondersteuning, referentiearm |
| SO-101 | Feetech STS3215 | 7.4 V | ~130 tot 170 EUR | Volledige ondersteuning |
| Koch v1.1 | Dynamixel XL330 / XL430 | 5 V en 12 V rails | ~250 tot 350 EUR | Compatibel |
| LeKiwi | Feetech STS3215 (arm) | 7.4 V arm, 12 V basis | ~400 tot 500 EUR | Compatibel |
SO-100 en SO-101 gebruiken Feetech STS3215 servo's op een 7.4 V rail. Ze voeden met 12 V vernietigt ze, stil genoeg dat mensen eerst de software de schuld geven, en een Koch 12 V voeding past fysiek op een SO-100 bord. Controleer het label. Symptomen: servo reageert niet, arm trilt en zakt dan in. Zie ook SO-100 vs SO-101.
Van kale arm tot opgenomen dataset
De onderstaande workflow is voor lerobot 0.6.x. Sla deze over als je een gekalibreerde arm en een dataset hebt. Anders behandelt de SO-100 handleiding voor beginners de montage, de opnamehandleiding de opname en de dataset documentatie het formaat.
- 1Installeer lerobot met de juiste extra's
Opnemen vereist
core_scripts, trainingtraining, Feetech servo'sfeetech. 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 - 2Vind de USB-poort van elke arm
Voer het uit met beide armen aangesloten, en koppel er één los wanneer daarom wordt gevraagd. Op Linux moet u mogelijk de node-permissies openen.
bashlerobot-find-port # on Linux, if the port exists but is unreadable: sudo chmod 666 /dev/ttyACM0 - 3Stel de motor-ID's en baudrate in
Bij de SO-100 gebeurt dit vóór de montage: in tegenstelling tot de SO-101 zijn de connectoren onbereikbaar zodra deze is gebouwd. Het script doorloopt de bus motor voor motor vanaf de grijper en schrijft ID's naar EEPROM.
bashlerobot-setup-motors \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM0 lerobot-setup-motors \ --teleop.type=so100_leader \ --teleop.port=/dev/ttyACM1 - 4Kalibreer beide armen
Zet elk gewricht in het midden van zijn bereik, druk op Enter en beweeg elk gewricht vervolgens door zijn volledige bereik. Kalibratie maakt het mogelijk dat een beleid dat op de ene arm is getraind, op een andere arm kan worden uitgevoerd. Hergebruik dezelfde
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 - 5Teleopereer één keer met de camera's aan
De vuistregel van lerobot: u moet de taak kunnen uitvoeren door alleen naar de camerabeelden te kijken. Als u dat niet kunt, kan ACT dat ook niet. Dit vangt meer slechte datasets op dan later debuggen.
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 - 6Neem 50 episodes op
50 is het minimum van AY-Robots en wat ALOHA per taak gebruikte. lerobot adviseert 10 per objectlocatie, vaste camera's, consistente greep.
nbeëindigt een episode,rneemt opnieuw op,qstopt en codeert.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 heeft geen voorkennis om op terug te vallen, dus elke inconsistentie wordt permanent. De drie duurste: een camera die tussen episode 20 en 21 werd verschoven, licht dat veranderde omdat u de helft van de set 's middags opnam, een greep die op twee manieren werd uitgevoerd. Elk geeft een perfect uitziende verliescurve en een arm die naar de verkeerde plaats gaat. Zie verlies daalt, beleid doet niets, beleid werkt alleen in één opstelling en gegevens van hoge kwaliteit verzamelen voor VLA-training.
Voordat u traint, speelt u minstens vijf episodes opnieuw af. slaat camerastromen, gewrichtstoestanden en acties op per , en het opnieuw afspelen stuurt die acties terug naar de arm. Als het opnieuw afspelen de taak niet uitvoert, bevatten de gegevens deze niet en zal de training deze ook niet uitvinden.
lerobot-replay \
--robot.type=so100_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_follower \
--dataset.repo_id=${HF_USER}/so100_cube \
--dataset.episode=0De ACT-policy trainen
Dit is de volledige opdracht. Alles wat ACT-specifiek is, is al een standaardinstelling, daarom staat op de lerobot ACT-pagina dat je hiermee moet beginnen.
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 laadt ACTConfig, die zich aanpast aan het aantal motoren en camera's dat uw dataset heeft opgenomen, zodat u nooit de observatievorm hoeft te declareren. --wandb.enable=true is optioneel en de moeite waard: de verliescurve is het enige goedkope signaal in een run van 100000 stappen. Het schema komt van lerobot's train config, niet ACTConfig: 100000 stappen, batch 8, seed 1000, een checkpoint elke 20000 stappen, loggen elke 200.
Een volledige run laat vijf checkpoint-mappen achter, 020000 tot en met 100000, plus een laatste symlink. Bewaar ze allemaal: het beste beleid is vaak niet het laatste.
| Instelling | lerobot standaard | AY-Robots ACT formulier | Opmerking |
|---|---|---|---|
| batchgrootte | 8 | 8 | Verlaag deze eerst als u VRAM-limieten bereikt. |
| leersnelheid | 1e-5 | 1e-5 | Hetzelfde als in het ALOHA-artikel. |
| max. stappen | 100000 | 100000 | Ongeveer waar een set van 50 afleveringen niet meer verbetert. |
| gradiëntaccumulatie | 1 | 1, niet van toepassing | Wijzig in plaats daarvan de batchgrootte. |
| seed | 1000 | zichtbaar | GR00T's tyro-ingangspunt heeft geen seed; ACT-runs zijn de reproduceerbare. |
| chunk_size / n_action_steps | 100 / 100 | 100 / 100, bewerkbaar | Voorspellings- en uitvoeringshorizon. Verlaag de tweede, niet de eerste. |
| checkpointfrequentie | 20000 | niet zichtbaar | saveSteps is hier een GR00T-instelling. |
ACT met batchgrootte 8 en twee 640x480 camera's past comfortabel op 24 GB. Het past niet meer wanneer mensen de batchgrootte verhogen voor snelheid, of het de 1920x1080 frames voeren die een lerobot opnamevoorbeeld toont. Twee ResNet-18 backbones op 1080p hebben een heel ander geheugenprofiel. Verlaag --batch_size naar 4 voordat u een grotere kaart huurt. Zie onvoldoende geheugen tijdens training.
Duur: ongeveer 5 uur op een 11 GB RTX 2080 Ti in het paper, een paar uur voor 100k stappen volgens de ACT-pagina van lerobot, 2 tot 5 uur op de 24 GB tier van AY-Robots. Kort het niet in. De README van de referentie-repo zegt dat een schokkerig of pauzerend beleid meestal gewoon meer training, omdat succes en vloeiendheid blijven verbeteren nadat het verlies stabiliseert: voor real-world data zijn minstens 5000 epochs nodig, of 3 tot 4 keer de lengte opnieuw na het plateau.
lerobot-train \
--config_path=outputs/train/act_so100_cube/checkpoints/last/pretrained_model/train_config.json \
--resume=trueHet getrainde beleid uitvoeren op de arm
Implementatie gebruikt lerobot-rollout. Cameratoetsen moeten overeenkomen met de opgenomen toetsen: een beleid getraind op front en wrist accepteert niet cam0 en cam1, en rename_map helpt niet, aangezien het een vooraf getraind checkpoint nodig heeft. De taakstring kan worden weggelaten; lerobot's eigen voorbeeld markeert deze als over te slaan voor 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=60Evaluatie werd uitgevoerd via lerobot-record --policy.path=.... In 0.6.x is dit lerobot-rollout met een --strategy.type selector: base, sentry (opname met auto-upload), highlight (ringbuffer opgeslagen via toetsaanslag), dagger (mens in de lus) en episodic. Vanaf 23 augustus 2026 vermeldt de ACT-documentatiepagina nog steeds "using the lerobot-record command" direct boven een blok dat lerobot-rollout uitvoert. Volg het commando, niet de zin.
Om een checkpoint vast te zetten in plaats van het uiteindelijke model, voeg toe --policy.pretrained_revision. Dat vereist dat de run is gestart met --save_checkpoint_to_hub=true, standaard uitgeschakeld: zonder dit pusht lerobot alleen het uiteindelijke model en niets anders. Hiermee wordt elk checkpoint getagd met zijn met nullen opgevulde stap, dus --policy.pretrained_revision=060000 herstelt die van stap 60000. Het vergelijken ervan met 100000 op de echte arm is het goedkoopste experiment dat beschikbaar is.
Twee routes naar hetzelfde checkpoint
Alles hierboven is de handmatige route en het werkt. De platformroute ruilt controle in voor het niet bezitten van een GPU of een Python-omgeving.
- Installeer lerobot 0.6.x met
core_scripts,training,feetech, ffmpeg. - Vind poorten, stel motor-ID's in, kalibreer beide armen, neem 50 afleveringen op.
- Speel een paar afleveringen opnieuw af om te bevestigen dat de gegevens de taak bevatten.
- Huur of bezit een 24 GB GPU, match CUDA en PyTorch, voer
lerobot-train --policy.type=actuit. - Wacht een paar uur en voer dan
lerobot-rolloutuit op de machine bij de arm.
# 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=cudaVolledige controle: bewerk configuration_act.py, voeg een camera toe, fork de trainer. Voor onderzoek in plaats van het opleveren van een taak, is een platform een afleiding.
- Neem op met de desktopclient, of breng een Hugging Face repo-ID of lokale dataset mee.
- Open de ACT op SO-100 gids en kies model en dataset. Standaardwaarden zijn die van lerobot; chunkSize, nActionSteps, seed en logFreq zijn bewerkbaar.
- De backend huurt een GPU met een VRAM-grootte en schrijft checkpoints naar objectopslag.
/api/inference/podserveert vervolgens het beleid aan de lokale robotclient. Een inactieve watchdog vernietigt de pod, zodat er niets stilzwijgend wordt gefactureerd.- Dezelfde bewerkingen bestaan in de CLI, de MCP-server en de trainingsdocumentatie.
Het lost uw gegevens niet op: een dataset met een verplaatste camera traint hier precies even slecht, en het formulier kan dit niet detecteren. Het verwijdert ook het latentieprobleem niet. De controlelus is 20 tot 485 ms per actiestap, met daarbovenop roundtrips via het openbare internet, en ACT wordt het meest benadeeld omdat de stap het kortst is: 60 ms is een vertraging van 12 procent op de 485 ms van Pi0.5, maar vier keer de stap op de 20 ms van ACT. Externe inferentie is geschikt voor langzaam oppakken en plaatsen, niet voor snelle reactieve bewegingen.

Wat er daadwerkelijk misgaat
Bijna geen van de problemen zit in het trainingscommando. Het zit in de zaken eromheen, gerangschikt naar hoe vaak ze de eerste keer problemen veroorzaken.
| Symptoom | Gebruikelijke oorzaak | Pagina |
|---|---|---|
| lerobot-find-port shows nothing | Driver, kabel of knooppuntmachtigingen | arm niet gedetecteerd |
| Camera ontbreekt tijdens opname | Index gewijzigd na herstart, of twee camera's op één USB-controller | camera niet gedetecteerd |
| Training weigert de dataset | ACT wants v3.0, GR00T needs v2.1 | dataset geweigerd als v3 |
| CUDA out of memory | Batchgrootte verhoogd, of 1080p frames in plaats van 480p | onvoldoende geheugen tijdens training |
| Verlies ziet er goed uit, arm doet niets | De data mist de taak, of een camera is verplaatst | verlies daalt, beleid doet niets |
| Schokkerige beweging of een pauze midden in de episode | Ondertraind, een blokgrensblokkade, of een time-out bij inferentie | beleid bevriest midden in de beweging |
Twee rijen verdienen de nadruk. ACT traint op LeRobot v3.0 terwijl de loader van GR00T erop crasht en v2.1 nodig heeft, dus een dataset die ACT traint, kan een GR00T-uitvoering laten mislukken. En de laatste rij heeft twee oplossingen: de ACT-auteurs beantwoorden schokkerige bewegingen met meer training, terwijl met n_action_steps op 100 een echte blokkade op een blokgrens terechtkomt, een zichtbare pauze elke 3.3 seconden bij 30 fps. Nog twee om te weten: een enkel dood gewricht is meestal een servo-ID dat nooit is geschreven, en een grijper die nadert maar nooit sluit betekent te weinig grijperbereik in de demonstraties. Volledige index: de pagina's met storingsmodi.
Wat een run kost
| Niveau | Modellen | Uitvoertijd | Prijs per uur | Kosten per uitvoering |
|---|---|---|---|---|
| RTX 4090 / 24 GB | ACT, SmolVLA | 2 to 5 hours | 0.30 to 0.60 USD | about 1 to 3 USD |
| A100 80 GB / H100 | GR00T N1.7, GR00T N1.5, Pi0.5 | 3 to 6 hours | 1.20 to 2.00 USD | about 4 to 12 USD |
Dit is het argument om met ACT te beginnen, zelfs als je later een VLA wilt. Een mislukte ACT-uitvoering kost de prijs van een kop koffie en vertelt je binnen enkele uren of je dataset de taak bevat. Een mislukte GR00T-uitvoering kost vier keer zoveel voor dezelfde les. Opschalen naar GR00T N1.7 of SmolVLA achteraf is een vormverandering, geen herbouw. Achtergrond: visie-taal-actie modellen, de complete SO-100 gids, train je eerste beleid en imitatie leren. Geen arm? De live pagina streamt een echte SO-100 om te besturen zonder aan te melden.
Train ACT op je SO-100
De gids voor deze exacte combinatie: standaardinstellingen, GPU-niveau en wat een uitvoering kost. Kies de dataset, de backend huurt de kaart en schrijft de checkpoints.
Open de trainingsgidsIs er een voorgegetraind ACT-model dat ik in plaats daarvan kan fine-tunen?▾
Nee. ACT heeft geen basismodel; het bestaat pas nadat je het getraind hebt. Dat is geen hiaat in de tooling, het is wat ACT is: de paper traint een beleid vanaf nul per taak. Gebruik voor een vendor checkpoint GR00T N1.7 of Pi0.5.
Hoeveel afleveringen heb ik echt nodig?▾
50: wat ALOHA per taak opnam (100 voor Thread Velcro, de moeilijkste) en het AY-Robots minimum. lerobot adviseert ongeveer 10 per objectlocatie, camera's vast, consistente greep. Vijftig schone afleveringen zijn beter dan honderd waarbij de camera bewoog.
Moet ik chunk_size van 100 wijzigen?▾
Meestal niet. De ablatie stijgt van 1 procent bij k = 1 naar 44 procent bij k = 100 en vlakt daarna af, dus 100 zit dicht bij de top. Als de arm te lang vastzit, verlaag dan n_action_steps: bij 30 fps, 25 her-query's elke 0,8 seconden.
Hoe lang duurt een trainingsrun, en kan ik deze vroegtijdig stoppen?▾
Twee tot vijf uur op een 24 GB kaart voor 100000 stappen. Checkpoints worden elke 20000 stappen opgeslagen en --resume=true pakt een run weer op, dus vroegtijdig stoppen is veilig. Alleen niet bij het eerste vlakke stuk: de soepelheid verbetert nadat het verlies stabiliseert.
Het verlies daalde en de arm faalt nog steeds. Wat nu?▾
Bijna altijd de dataset. Speel opgenomen afleveringen af met de arm: als de herhaling de taak niet uitvoert, bevat de data deze niet. Controleer dan of er iets bewoog, vooral een camera. ACT heeft geen voorkennis, dus een duwtje in aflevering 21 is permanent.
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