
Träna en Action Chunking Transformer från grunden på en SO-100 med lerobot: act config, chunk_size och n_action_steps, schemat för 100000 steg, 20 ms inferens.
ACT är undantaget bland SO-100-policyerna. GR00T N1.7 och N1.5 utgår från nvidia/GR00T-N1.7-3B och nvidia/GR00T-N1.5-3B, Pi0.5 från lerobot/pi05_base. ACT börjar från noll: det finns ingen bas-checkpoint, eftersom det inte är en grundmodell. Det är en transformator med ungefär 80 miljoner parametrar som du tränar från grunden för en uppgift, på din arm, under din belysning.
Det är också därför den kör ett kontrollsteg på 20 ms där en VLA med 3 miljarder parametrar behöver 152 till 485 ms, och kostar 1 till 3 USD per körning istället för 4 till 12. Denna guide beskriver den manuella vägen med lerobot på en SO-100: inspelning, act konfigurationen, vad chunk_size och n_action_steps kontrollerar, schemat med 100000 steg, och utrullningen. Därefter samma jobb på AY-Robots, inklusive där plattformen inte hjälper till.
Vad du behöver veta
- •ACT tränas från grunden: ingen basmodell, ingen förträning, ingen språkinmatning. En checkpoint, en uppgift.
- •Artikeln: cirka 80 M parametrar, runt 5 timmar på ett 11 GB RTX 2080 Ti, 0,01 s inferens.
- •lerobot standardinställningar: chunk_size 100, n_action_steps 100, batch 8, lr 1e-5, 100000 steg, seed 1000.
- •På AY-Robots: 20 ms per steg, den snabbaste av de fem. Minst 50 episoder, LeRobot v3.0, ett 24 GB kort, 1 till 3 USD per körning.
- •Den vinner på en uppgift den har sett, och förlorar i samma ögonblick som du vill ha språkkonditionering.
Kontrollerad 23 augusti 2026 mot lerobot 0.6.x: pyproject.toml på main läser version = "0.6.2", nyaste taggen v0.6.1, 3 augusti 2026. En handledning som börjar med python lerobot/scripts/train.py föregår konsolens ingångspunkter lerobot-train, lerobot-record och lerobot-rollout.
Vad ACT faktiskt är
Action Chunking with Transformers kommer från ALOHA-artikeln, Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware, av Zhao, Kumar, Levine och Finn, arXiv, 23 april 2023. Riggen spelar in med 50 Hz med fyra webbkameror som strömmar 480x640 vid 30 fps: två på gripklorna, en uppifrån, en framifrån. Abstraktet hävdar sex färdigheter med 80 till 90 procents framgång, bland annat att öppna en genomskinlig kryddkopp och att sätta i ett batteri, från 10 minuters demonstrationer.
Brödtexten är mer användbar vid planering av en inspelningssession: 50 demonstrationer per uppgift, förutom Trä kardborreband vid 100, vilket är 10 till 20 minuters data och 30 till 60 minuters realtid när återställningar räknats. Framgången är inte heller enhetlig: Trä kardborreband slutar på 20 procent, Ta på sko på 92, Öppna kopp 84, Förbered tejp 64.
| Hyperparameter | ALOHA-artikel, Tabell III | lerobot på main |
|---|---|---|
| inlärningshastighet | 1e-5 | optimizer_lr = 1e-5 |
| batchstorlek | 8 | batch_size = 8, in TrainPipelineConfig not ACTConfig |
| encoder-/decoderlager | 4 / 7 | n_encoder_layers = 4 / n_decoder_layers = 1 |
| chunkstorlek k | 100 | chunk_size = 100 |
| latent dimension av z | saknas; Fig. 11 visar en projektion från 32 till 512 | latent_dim = 32 |
| temporal ensembling | saknas; --temporal_agg i referenskoden | temporal_ensemble_coeff = None |
Artikeln listar 7 avkodningslager, lerobot levererar 1, medvetet. Kommentaren i `configuration_act.py` säger att den ursprungliga implementeringen har en bugg som innebär att endast det första lagret används, med hänvisning till issue 25 i tonyzhaozh/act: action head läser `hs[0]`, så alla sju lager körs men endast den första utgången når prediktionen. Detta problem är öppet och obesvarat sedan den 23 april 2024. lerobot matchar beteendet som producerade de publicerade resultaten, inte det tryckta numret. Öka `--policy.n_decoder_layers` och du tränar en modell som artikeln aldrig utvärderade.
Action chunking är hela idén
Vanlig beteendekloning mappar en observation till en handling, och fel ackumuleras: en avvikelse placerar armen utanför distributionen, vilket producerar en sämre handling, och trettio steg senare är griparen ingenstans nära objektet. Action chunking förutsäger k handlingar samtidigt och utför dem, vilket minskar den effektiva horisonten med en faktor k. Det hanterar också ett problem som är specifikt för mänsklig data: teleoperatörer pausar, och en enstegs Markovisk policy kan inte modellera en paus som beror på vad som kom före.
Artikeln ablaterar k snarare än att hävda det. Med temporal ensembling avstängd, i genomsnitt över fyra inställningar, stiger framgången från 1 procent vid k = 1 till 44 procent vid k = 100, för att sedan avta vid 200 och 400 när policyn närmar sig öppen-loop-kontroll. Den kurvan är anledningen till att standardvärdet är 100.
- chunk_size: hur många framtida åtgärder avkodaren förutsäger per framåtkörning. Standard 100.
- n_action_steps: hur många av dem du utför innan du frågar igen. Standard 100, så lerobot kör hela chunken i öppen slinga.
- lerobot validerar
n_action_steps <= chunk_sizeoch utlöser ettValueErrorom du anger det felaktigt.
Vad som är viktigt operationellt är chunk_size dividerat med bildfrekvensen. Vid de 30 fps som lerobots SO-100-exempel använder, motsvarar en chunk på 100 cirka 3,3 sekunder från en observation. Om uppgiften kräver en korrigering inom det fönstret, sänk n_action_steps, inte chunk_size: du behåller den långa prediktionen och observerar om oftare.
# 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=cudaStäll in --policy.temporal_ensemble_coeff och lerobot kräver n_action_steps = 1, annars utlöses NotImplementedError. Ensembling frågar policyn vid varje tidssteg och blandar de överlappande prediktionerna för det tidssteget med vikter w_i = exp(-m * i), där den äldsta får w_0. Artikeln anger det till 3,3 procent för ACT: verkligt men blygsamt, och det multiplicerar antalet inferenser med chunklängden. Överkomligt vid 20 ms per steg, inte vid 485 ms. Se inferenslatens.
När ACT överträffar en grundmodell
De fem träningsbara policyerna sida vid sida, med siffrorna AY-Robots mäter och använder för att dimensionera den GPU de hyr.
| Policy | Familj | Parametrar | Per steg | GPU-nivå | Min. avsnitt | Dataset |
|---|---|---|---|---|---|---|
| ACT | Chunking-transformer, från grunden | ~80 M | 20 ms | RTX 4090 / 24 GB | 50 | LeRobot v3.0 |
| SmolVLA | Kompakt VLA | ~450 M | 245 ms | RTX 4090 / 24 GB | 30 | LeRobot v3.0 |
| GR00T N1.7 | VLA-grund, diffusionshuvud | ~3 B (~40 M tränade) | 152 ms | A100 / H100 80 GB | 50 | LeRobot v2.0 eller v2.1 |
| GR00T N1.5 | VLA-grund, föregångare | ~3 B | 165 ms | A100 / H100 80 GB | 50 | LeRobot v2.0 eller v2.1 |
| Pi0.5 | Flödesmatchande VLA, se flödesmatchning | ~3 B, PaliGemma-ryggrad | 485 ms | A100 / H100 80 GB | 50 | LeRobot v3.0 |

- 20 ms per åtgärdssteg, den snabbaste av de fem, på ett 24 GB-kort, inte ett A100.
- 1 till 3 USD per körning jämfört med 4 till 12 för 3 B-klassen.
- Precis vid kontaktintensivt arbete den har sett: 88 och 96 procent på Slide Ziploc och Slot Battery, där tidigare metoder aldrig klarade första steget.
- Ingen språkkonditionering: uppgiftssträngen ignoreras, så en kontrollpunkt är en uppgift.
- Inga semantiska förkunskaper: allt den vet kom från dina 50 episoder.
- Smal generalisering: flytta en kamera och du måste träna om.
- Den misslyckas tyst: förlusten minskar, armen gör ingenting, loggarna säger ingenting.
- Hastighetsfördelen hjälper bara om inferensen sitter bredvid servona.
Välj ACT när uppgift och scen är fasta och rörelsen måste vara snabb och precis. Välj en när en kontrollpunkt måste täcka flera instruktioner. Två sidor jämför beslutet direkt: och . För publicerade riktmärken, länkar varje siffra till dess källa.
Vad du behöver innan du börjar
En följararm, en ledararm för , minst en kamera, en 24 GB GPU. ACT läser endast bilder och ledpositioner. Två kameror är optimalt: en fast frontvy för var saker befinner sig, en handledskamera för vad är på väg att röra, som på ALOHA.
| Arm | Servon | Spänning | Delkostnad | Status |
|---|---|---|---|---|
| SO-100 | Feetech STS3215 | 7.4 V | ~110 till 150 EUR | Fullt stöd, referensarm |
| SO-101 | Feetech STS3215 | 7.4 V | ~130 till 170 EUR | Fullt stöd |
| Koch v1.1 | Dynamixel XL330 / XL430 | 5 V och 12 V skenor | ~250 till 350 EUR | Kompatibel |
| LeKiwi | Feetech STS3215 (arm) | 7.4 V arm, 12 V bas | ~400 till 500 EUR | Kompatibel |
SO-100 och SO-101 använder Feetech STS3215-servon på en 7.4 V skena. Att mata dem med 12 V förstör dem, tyst nog att folk först skyller på mjukvaran, och en Koch 12 V-strömförsörjning passar fysiskt på ett SO-100-kort. Kontrollera etiketten. Symptom: servon svarar inte, armen rycker sedan sjunker. Se även SO-100 vs SO-101.
Från bar arm till inspelad datamängd
Flödet nedan är lerobot 0.6.x. Hoppa över det om du har en kalibrerad arm och en datamängd. Annars täcker SO-100 startguide, monteringen, inspelningsgenomgången täcker insamlingen och datamängdsdokumentationen formatet.
- 1Installera lerobot med rätt tillägg
Inspelning kräver
core_scripts, träningtraining, Feetech-servonfeetech. 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 - 2Hitta USB-porten för varje arm
Kör den med båda armarna inkopplade, koppla ur en när du uppmanas. På Linux kan du behöva öppna nodbehörigheterna.
bashlerobot-find-port # on Linux, if the port exists but is unreadable: sudo chmod 666 /dev/ttyACM0 - 3Ställ in motor-ID:n och baudrate
På SO-100 sker detta före montering: till skillnad från SO-101 är kontakterna oåtkomliga när den väl är byggd. Skriptet går igenom bussen en motor i taget från griparen och skriver ID:n till EEPROM.
bashlerobot-setup-motors \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM0 lerobot-setup-motors \ --teleop.type=so100_leader \ --teleop.port=/dev/ttyACM1 - 4Kalibrera båda armarna
Ställ in varje led till mitten av dess rörelseområde, tryck Enter och svep sedan varje led genom hela dess rörelseområde. Kalibrering låter en policy tränad på en arm köras på en annan. Återanvänd samma
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 - 5Teleoperera en gång med kamerorna på
Lerobots tumregel: du bör kunna utföra uppgiften genom att bara titta på kamerabilderna. Om du inte kan det, kan inte ACT heller. Detta fångar fler dåliga dataset än senare felsökning.
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 - 6Spela in 50 episoder
50 är AY-Robots minimum och vad ALOHA använde per uppgift. lerobot rekommenderar 10 per objektplats, fasta kameror, konsekvent grepp.
navslutar en episod,rspelar in igen,qstoppar och kodar.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 har inga förkunskaper att falla tillbaka på, så varje inkonsekvens blir permanent. De tre dyraste: en kamera som flyttades mellan episod 20 och 21, ljus som ändrades för att du spelade in halva uppsättningen på eftermiddagen, ett grepp som utfördes på två sätt. Var och en ger en perfekt utseende förlustkurva och en arm som går till fel plats. Se förlusten sjunker, policyn gör ingenting, policyn fungerar bara i en viss konfiguration och samla in högkvalitativ träningsdata.
Före träning, spela upp minst fem episoder. LeRobot-datasetformatet lagrar kameraströmmar, ledtillstånd och åtgärder per episod, och uppspelning skickar tillbaka dessa åtgärder till armen. Om uppspelningen inte utför uppgiften, innehåller datan den inte och träningen kommer inte att uppfinna den.
lerobot-replay \
--robot.type=so100_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_follower \
--dataset.repo_id=${HF_USER}/so100_cube \
--dataset.episode=0Träna ACT-policyn
Detta är hela kommandot. Allt ACT-specifikt är redan standard, vilket är anledningen till att lerobot ACT-sidan säger att man ska börja med dem.
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 laddar ACTConfig, som anpassar sig till hur många motorer och kameror din datamängd registrerade, så du behöver aldrig deklarera observationsformen. --wandb.enable=true är valfritt och värt det: förlustkurvan är den enda billiga signalen i en körning på 100000 steg. Schemat kommer från lerobot:s träningskonfiguration, inte ACTConfig: 100000 steg, batch 8, seed 1000, en checkpoint var 20000:e steg, loggning var 200:e.
En fullständig körning lämnar fem checkpoint-kataloger, 020000 till 100000, plus en last symlänk. Behåll dem alla: den bästa policyn är ofta inte den sista.
| Inställning | lerobot standard | AY-Robots ACT-formulär | Kommentar |
|---|---|---|---|
| batchstorlek | 8 | 8 | Sänk den först om du stöter på VRAM-gränser. |
| inlärningshastighet | 1e-5 | 1e-5 | Samma som i ALOHA-artikeln. |
| max antal steg | 100000 | 100000 | Ungefär där en uppsättning med 50 episoder slutar förbättras. |
| gradientackumulering | 1 | 1, gäller ej | Ändra batchstorleken istället. |
| seed | 1000 | exponerad | GR00T:s tyro-ingångspunkt har inget seed; ACT-körningar är de reproducerbara. |
| chunk_size / n_action_steps | 100 / 100 | 100 / 100, redigerbar | Prediktions- och exekveringshorisont. Sänk den andra, inte den första. |
| checkpoint-frekvens | 20000 | ej exponerad | saveSteps är en GR00T-inställning här. |
ACT med batchstorlek 8 och två 640x480-kameror får bekvämt plats på 24 GB. Det slutar passa när folk höjer batchstorleken för hastighet, eller matar det med 1920x1080-bilderna som ett lerobot-inspelningsexempel visar. Två ResNet-18 backbones vid 1080p har en mycket annorlunda minnesprofil. Sänk --batch_size till 4 innan du hyr ett större kort. Se minnesbrist vid träning.
Varaktighet: cirka 5 timmar på ett 11 GB RTX 2080 Ti i artikeln, några timmar för 100k steg enligt lerobots ACT-sida, 2 till 5 timmar på AY-Robots 24 GB-nivå. Korta inte av det. Referens-repots README säger att en ryckig eller pausande policy vanligtvis bara behöver mer träning, eftersom framgång och jämnhet fortsätter att förbättras efter att förlusten planar ut: för verklig data krävs minst 5000 epoker, eller 3 till 4 gånger längden igen efter platån.
lerobot-train \
--config_path=outputs/train/act_so100_cube/checkpoints/last/pretrained_model/train_config.json \
--resume=trueKöra den tränade policyn på armen
Distribution använder lerobot-rollout. Kameranycklar måste matcha de inspelade: en policy tränad på front och wrist kommer inte att acceptera cam0 och cam1, och rename_map hjälper inte, eftersom den behöver en förtränad kontrollpunkt. Uppgiftssträngen kan utelämnas; lerobots eget exempel markerar den som valfri för 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=60Utvärdering brukade köras via lerobot-record --policy.path=.... I 0.6.x är det lerobot-rollout med en --strategy.type-väljare: base, sentry (inspelning med automatisk uppladdning), highlight (ringbuffert sparad med tangenttryckning), dagger (människa i loopen) och episodic. Från och med den 23 augusti 2026 står det fortfarande på ACT-dokumentationssidan "using the lerobot-record command" direkt ovanför ett block som kör lerobot-rollout. Följ kommandot, inte meningen.
För att fästa en checkpoint snarare än den slutliga modellen, lägg till --policy.pretrained_revision. Det kräver att körningen har startat med --save_checkpoint_to_hub=true, avstängt som standard: utan det laddar lerobot upp den slutliga modellen och inget annat. Med det taggas varje checkpoint med dess nollutfyllda steg, så --policy.pretrained_revision=060000 återställer den med 60000 steg. Att jämföra den med 100000 på den riktiga armen är det billigaste experimentet som finns tillgängligt.
Två vägar till samma checkpoint
Allt ovan är den manuella vägen och den fungerar. Plattformsvägen byter kontroll mot att slippa äga en GPU eller en Python-miljö.
- Installera lerobot 0.6.x med
core_scripts,training,feetech, ffmpeg. - Hitta portar, ställ in motor-ID:n, kalibrera båda armarna, spela in 50 episoder.
- Spela upp några episoder för att bekräfta att datan innehåller uppgiften.
- Hyr eller äg en 24 GB GPU, matcha CUDA och PyTorch, kör
lerobot-train --policy.type=act. - Vänta några timmar, kör sedan
lerobot-rolloutpå maskinen vid armen.
# 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=cudaTotal kontroll: redigera configuration_act.py, lägg till en kamera, forka tränaren. För forskning snarare än att leverera en uppgift är en plattform en distraktion.
- Spela in med skrivbordsklienten, eller använd ett Hugging Face repo-ID eller en lokal dataset.
- Öppna guiden för ACT på SO-100 och välj modell och dataset. Standardvärdena är lerobot-värdena; chunkSize, nActionSteps, seed och logFreq är redigerbara.
- Backend hyr en GPU dimensionerad efter VRAM och skriver checkpoints till objektlagring.
/api/inference/podserverar sedan policyn till den lokala robotklienten. En inaktiv watchdog förstör podden, så inget faktureras tyst.- Samma operationer finns i CLI, MCP-servern och träningsdokumentationen.
Den fixar inte din data: en dataset med en flyttad kamera tränas precis lika dåligt här, och formuläret kan inte upptäcka det. Den tar inte heller bort latensproblemet. Kontrollloopen är 20 till 485 ms per åtgärdssteg, med offentliga internet-rundresor ovanpå, och ACT drabbas mest eftersom dess steg är kortast: 60 ms är en 12 procents fördröjning på Pi0.5:s 485 ms men fyra gånger steget på ACT:s 20 ms. Fjärrinferens passar för långsam plockning och placering, inte snabb reaktiv rörelse.

Vad som faktiskt går fel
Nästan inget av besväret ligger i träningskommandot. Det ligger i sakerna runt omkring det, ordnade efter hur ofta de orsakar problem första gången.
| Symptom | Vanlig orsak | Sida |
|---|---|---|
| lerobot-find-port visar inget | Drivrutin, kabel eller nodbehörigheter | arm upptäcks inte |
| Kamera saknas vid inspelningstillfället | Index ändrades vid omstart, eller två kameror på en USB-kontroller | kamera upptäcks inte |
| Träningen avvisar datasetet | ACT wants v3.0, GR00T needs v2.1 | dataset avvisades som v3 |
| CUDA slut på minne | Batchstorlek höjd, eller 1080p-bilder istället för 480p | slut på minne under träning |
| Förlusten ser bra ut, armen gör inget | Datan saknar uppgiften, eller en kamera flyttades | förlusten sjunker, policyn gör inget |
| Ryckig rörelse eller en paus mitt i avsnittet | Otillräckligt tränad, ett stopp vid en chunk-gräns, eller ett tidsinställt inferensanrop | policyn fryser mitt i rörelsen |
Två rader förtjänar att lyftas fram. ACT tränar på LeRobot v3.0 medan GR00T:s laddare kraschar på det och behöver v2.1, så ett dataset som tränar ACT kan misslyckas med en GR00T-körning. Och den sista raden har två lösningar: ACT-författarna svarar på ryckig rörelse med mer träning, medan med n_action_steps vid 100 landar ett verkligt stopp vid en chunk-gräns, en synlig paus var 3,3 sekund vid 30 fps. Ytterligare två att känna till: en enskild död led är vanligtvis ett servo-ID som aldrig skrevs, och en gripklo som närmar sig men aldrig stänger betyder för litet gripområde i demonstrationerna. Fullständigt index: sidorna för fellägen.
Vad en körning kostar
| Nivå | Modeller | Körtid | Pris per timme | Kostnad per körning |
|---|---|---|---|---|
| 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 |
Detta är argumentet för att börja med ACT även om du vill ha en VLA senare. En misslyckad ACT-körning kostar som en kopp kaffe och berättar inom några timmar om din datamängd innehåller uppgiften. En misslyckad GR00T-körning kostar fyra gånger så mycket för samma lärdom. Att sedan gå vidare till GR00T N1.7 eller SmolVLA efteråt är en formförändring, inte en ombyggnad. Bakgrund: vision-language-action-modeller, den kompletta SO-100-guiden, träna din första policy och imitationsinlärning. Ingen arm? Livesidan streamar en riktig SO-100 att köra utan att registrera dig.
Träna ACT på din SO-100
Guiden för denna exakta kombination: standardinställningar, GPU-nivå och vad en körning kostar. Välj datamängden, backend hyr kortet och skriver checkpoints.
Öppna träningsguidenFinns det en förtränad ACT-modell jag kan finjustera istället?▾
Nej. ACT har ingen basmodell; den existerar bara efter att du har tränat den. Det är ingen brist i verktygen, det är vad ACT är: artikeln tränar en policy från grunden per uppgift. För en leverantörs-checkpoint, använd GR00T N1.7 eller Pi0.5.
Hur många episoder behöver jag egentligen?▾
50: vad ALOHA spelade in per uppgift (100 för Thread Velcro, dess svåraste) och AY-Robots minimum. lerobot rekommenderar cirka 10 per objektposition, med fasta kameror och konsekvent grepp. Femtio rena episoder slår hundra där kameran rörde sig.
Ska jag ändra chunk_size från 100?▾
Vanligtvis inte. Ablationen klättrar från 1 procent vid k = 1 till 44 procent vid k = 100 och avtar sedan, så 100 ligger nära toppen. Om armen utför för länge, sänk n_action_steps istället: vid 30 fps, 25 omfrågningar var 0.8 sekund.
Hur lång tid tar en träningskörning, och kan jag stoppa den tidigt?▾
Två till fem timmar på ett 24 GB-kort för 100000 steg. Checkpoints sparas var 20000:e steg och --resume=true återupptar en körning, så det är säkert att stoppa tidigt. Bara inte vid den första platta sträckan: jämnheten förbättras efter att förlusten platåar.
Förlusten minskade men armen misslyckas fortfarande. Vad nu?▾
Nästan alltid datamängden. Spela upp inspelade episoder med armen: om uppspelningen inte utför uppgiften, innehåller datan den inte. Kontrollera sedan om något rörde sig, särskilt en kamera. ACT har inga förkunskaper, så en knuff på episod 21 är 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