AY-Robots träningsmatris med fem policyrader och fyra robotarmskolumner, där varje cell länkar till en specifik modell- och armträningsguide
ACTSO-100lerobotimitationsinlärningpolicyträning

Hur man tränar ACT på SO-100 från grunden

AY-Robots ResearchAugust 23, 202616 min läsning

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.
Vilka versioner detta beskriver

Kontrollerad 23 augusti 2026 mot lerobot 0.6.x: pyproject.tomlmain 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.

HyperparameterALOHA-artikel, Tabell IIIlerobot på main
inlärningshastighet1e-5optimizer_lr = 1e-5
batchstorlek8batch_size = 8, in TrainPipelineConfig not ACTConfig
encoder-/decoderlager4 / 7n_encoder_layers = 4 / n_decoder_layers = 1
chunkstorlek k100chunk_size = 100
latent dimension av zsaknas; Fig. 11 visar en projektion från 32 till 512latent_dim = 32
temporal ensemblingsaknas; --temporal_agg i referenskodentemporal_ensemble_coeff = None
Raden för avkodningslager är inget stavfel

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_size och utlöser ett ValueError om 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.

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
Förkorta den utförda delen av chunken utan att förkorta prediktionen.
Fällan med temporal ensembling

Stä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.

PolicyFamiljParametrarPer stegGPU-nivåMin. avsnittDataset
ACTChunking-transformer, från grunden~80 M20 msRTX 4090 / 24 GB50LeRobot v3.0
SmolVLAKompakt VLA~450 M245 msRTX 4090 / 24 GB30LeRobot v3.0
GR00T N1.7VLA-grund, diffusionshuvud~3 B (~40 M tränade)152 msA100 / H100 80 GB50LeRobot v2.0 eller v2.1
GR00T N1.5VLA-grund, föregångare~3 B165 msA100 / H100 80 GB50LeRobot v2.0 eller v2.1
Pi0.5Flödesmatchande VLA, se flödesmatchning~3 B, PaliGemma-ryggrad485 msA100 / H100 80 GB50LeRobot v3.0
AY-Robots policies-sida som visar en jämförelsetabell över ACT, SmolVLA, GR00T N1.5, GR00T N1.7 och Pi0.5 med parameterantal, GPU-krav, inferenslatens och minsta antal episoder
Tabellen /policies: ACT har det minsta antalet parametrar och den kortaste steptiden.
Träna ACT från grunden
Fördelar
  • 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.
Kompromisser
  • 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.

ArmServonSpänningDelkostnadStatus
SO-100Feetech STS32157.4 V~110 till 150 EURFullt stöd, referensarm
SO-101Feetech STS32157.4 V~130 till 170 EURFullt stöd
Koch v1.1Dynamixel XL330 / XL4305 V och 12 V skenor~250 till 350 EURKompatibel
LeKiwiFeetech STS3215 (arm)7.4 V arm, 12 V bas~400 till 500 EURKompatibel
7.4 V, inte 12 V

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.

  1. 1
    Installera lerobot med rätt tillägg

    Inspelning kräver core_scripts, träning training, Feetech-servon 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
    Hitta 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.

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

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

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

    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
    Spela in 50 episoder

    50 är AY-Robots minimum och vad ALOHA använde per uppgift. lerobot rekommenderar 10 per objektplats, fasta kameror, konsekvent grepp. n avslutar en episod, r spelar in igen, q stoppar och kodar.

    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
AY-Robots inspelningstutorialsida som förklarar hur man fångar ett LeRobot-format dataset från en teleoperationssession
Inspelningstutorialen. Skrivbordsklienten skriver samma layout som lerobot-record.
Fällan som slukar en dag: ett inkonsekvent dataset

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.

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
Spelar upp avsnitt 0. Om detta misslyckas, stoppa och spela in igen.

Trä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.

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
Träningskommandot från lerobot 0.6.x-dokumentationen, på ett SO-100-dataset.

--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ällninglerobot standardAY-Robots ACT-formulärKommentar
batchstorlek88Sänk den först om du stöter på VRAM-gränser.
inlärningshastighet1e-51e-5Samma som i ALOHA-artikeln.
max antal steg100000100000Ungefär där en uppsättning med 50 episoder slutar förbättras.
gradientackumulering11, gäller ejÄndra batchstorleken istället.
seed1000exponeradGR00T:s tyro-ingångspunkt har inget seed; ACT-körningar är de reproducerbara.
chunk_size / n_action_steps100 / 100100 / 100, redigerbarPrediktions- och exekveringshorisont. Sänk den andra, inte den första.
checkpoint-frekvens20000ej exponeradsaveSteps är en GR00T-inställning här.
Minnesbrist är ett batchstorleksproblem, inte ett kortproblem

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.

bash
lerobot-train \
  --config_path=outputs/train/act_so100_cube/checkpoints/last/pretrained_model/train_config.json \
  --resume=true
Återuppta en avbruten körning från dess senaste kontrollpunkt.

Kö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.

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
Autonom utrullning utan inspelning. Använd --strategy.type=sentry för att spela in utvärderingsepisoderna.
Detta kommando döptes om nyligen, så gamla handledningar är inkonsekventa

Utvä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ö.

  1. Installera lerobot 0.6.x med core_scripts, training, feetech, ffmpeg.
  2. Hitta portar, ställ in motor-ID:n, kalibrera båda armarna, spela in 50 episoder.
  3. Spela upp några episoder för att bekräfta att datan innehåller uppgiften.
  4. Hyr eller äg en 24 GB GPU, matcha CUDA och PyTorch, kör lerobot-train --policy.type=act.
  5. Vänta några timmar, kör sedan lerobot-rollout på maskinen vid armen.
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
Vad denna väg ger dig

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

AY-Robots träningsmatris med fem policyrader och fyra robotarmkolumner, där varje cell länkar till den specifika träningsguiden för den modell- och armkombinationen
Matrisen på /train. ACT-raden mot SO-100-kolumnen är den här artikelns guide.

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.

SymptomVanlig orsakSida
lerobot-find-port visar ingetDrivrutin, kabel eller nodbehörigheterarm upptäcks inte
Kamera saknas vid inspelningstillfälletIndex ändrades vid omstart, eller två kameror på en USB-kontrollerkamera upptäcks inte
Träningen avvisar datasetetACT wants v3.0, GR00T needs v2.1dataset avvisades som v3
CUDA slut på minneBatchstorlek höjd, eller 1080p-bilder istället för 480pslut på minne under träning
Förlusten ser bra ut, armen gör ingetDatan saknar uppgiften, eller en kamera flyttadesförlusten sjunker, policyn gör inget
Ryckig rörelse eller en paus mitt i avsnittetOtillräckligt tränad, ett stopp vid en chunk-gräns, eller ett tidsinställt inferensanroppolicyn 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åModellerKörtidPris per timmeKostnad per körning
RTX 4090 / 24 GBACT, SmolVLA2 to 5 hours0.30 to 0.60 USDabout 1 to 3 USD
A100 80 GB / H100GR00T N1.7, GR00T N1.5, Pi0.53 to 6 hours1.20 to 2.00 USDabout 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äningsguiden
Finns 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.

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started