Ang AY-Robots training matrix na may limang policy rows at apat na robot arm columns, bawat cell ay nagli-link sa isang partikular na model at arm training guide
ACTSO-100lerobotpag-aaral sa pamamagitan ng panggagayapagsasanay ng patakaran

Paano Sanayin ang ACT sa SO-100 mula sa Simula

AY-Robots ResearchAugust 23, 202616 min basahin

Sanayin ang isang Action Chunking Transformer mula sa simula sa isang SO-100 gamit ang lerobot: ang act config, chunk_size at n_action_steps, ang 100000 hakbang na iskedyul, 20 ms inference.

Ang ACT ay ang naiiba sa mga patakaran ng SO-100. Ang GR00T N1.7 at N1.5 ay nagsisimula sa nvidia/GR00T-N1.7-3B at nvidia/GR00T-N1.5-3B, ang Pi0.5 naman ay mula sa lerobot/pi05_base. Ang ACT ay nagsisimula sa wala: walang base checkpoint, dahil hindi ito isang foundation model. Ito ay isang humigit-kumulang 80 milyong parameter na transformer na sinasanay mo mula sa simula sa isang gawain, sa iyong braso, sa ilalim ng iyong ilaw.

Ito rin ang dahilan kung bakit nagpapatakbo ito ng control step sa loob ng 20 ms kung saan ang isang 3 bilyong parameter na VLA ay nangangailangan ng 152 hanggang 485 ms, at nagkakahalaga ng 1 hanggang 3 USD bawat pagtakbo sa halip na 4 hanggang 12. Ang gabay na ito ay nagpapakita ng manu-manong ruta gamit ang lerobot sa isang SO-100: ang pag-record, ang act config, kung ano ang kinokontrol ng chunk_size at n_action_steps, ang 100000 step schedule, ang rollout. Pagkatapos ay ang parehong trabaho sa AY-Robots, kasama ang mga sitwasyon kung saan hindi nakakatulong ang platform.

Ano ang kailangan mong malaman

  • Ang ACT ay sinasanay mula sa simula: walang base model, walang pretraining, walang language input. Isang checkpoint, isang gawain.
  • Ang papel: humigit-kumulang 80 M parameters, mga 5 oras sa isang 11 GB RTX 2080 Ti, 0.01 s inference.
  • Mga default ng lerobot: chunk_size 100, n_action_steps 100, batch 8, lr 1e-5, 100000 steps, seed 1000.
  • Sa AY-Robots: 20 ms bawat hakbang, ang pinakamabilis sa lima. Minimum na 50 episodes, LeRobot v3.0, isang 24 GB card, 1 hanggang 3 USD bawat pagtakbo.
  • Nanalo ito sa isang gawaing nakita na nito, at natatalo sa sandaling gusto mo ng language conditioning.
Anong mga bersyon ang inilalarawan nito

Sinuri noong 23 Agosto 2026 laban sa lerobot 0.6.x: Ang pyproject.toml sa main ay nagbabasa ng version = "0.6.2", pinakabagong tag v0.6.1, 3 Agosto 2026. Ang isang tutorial na nagsisimula sa python lerobot/scripts/train.py ay nauna sa mga console entry points na lerobot-train, lerobot-record at lerobot-rollout.

Ano ba talaga ang ACT

Ang Action Chunking with Transformers ay nagmula sa ALOHA paper, Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware, nina Zhao, Kumar, Levine at Finn, arXiv, 23 Abril 2023. Ang rig ay nagre-record sa 50 Hz na may apat na webcam na nag-stream ng 480x640 sa 30 fps: dalawa sa mga gripper, isa sa itaas, isa sa harap. Ang abstract ay nag-aangkin ng anim na kasanayan na may 80 hanggang 90 porsiyentong tagumpay, kabilang ang pagbubukas ng translucent na condiment cup at pagpasok ng baterya, mula sa 10 minutong demonstrasyon.

Ang katawan ay mas kapaki-pakinabang kapag nagpaplano ng isang recording session: 50 demonstrasyon bawat gawain, maliban sa Thread Velcro sa 100, na 10 hanggang 20 minuto ng data at 30 hanggang 60 minuto ng wall-clock time kapag nabibilang na ang mga reset. Hindi rin pare-pareho ang tagumpay: Ang Thread Velcro ay nagtatapos sa 20 porsiyento, Put On Shoe sa 92, Cup Open 84, Prep Tape 64.

HyperparameterALOHA paper, Table IIIlerobot on main
learning rate1e-5optimizer_lr = 1e-5
batch size8batch_size = 8, in TrainPipelineConfig not ACTConfig
encoder / decoder layers4 / 7n_encoder_layers = 4 / n_decoder_layers = 1
chunk size k100chunk_size = 100
latent dim ng zwala; Ipinapakita ng Fig. 11 ang isang 32 to 512 projectionlatent_dim = 32
temporal ensemblingwala; --temporal_agg sa reference codetemporal_ensemble_coeff = None
Ang row ng decoder layer ay hindi typo

Ang papel ay naglilista ng 7 decoder layer, ang lerobot ay nagpapadala ng 1, sinasadya. Ang komento sa configuration_act.py ay nagsasaad na ang orihinal na implementasyon ay may bug na nangangahulugang ang unang layer lamang ang ginagamit, binabanggit ang isyu 25 sa tonyzhaozh/act: binabasa ng action head ang hs[0], kaya tumatakbo ang lahat ng pitong layer ngunit ang unang output lamang ang nakakarating sa prediksyon. Ang isyung iyon ay bukas at hindi pa nasasagot mula noong 23 Abril 2024. Ang lerobot ay tumutugma sa pag-uugali na nagdulot ng mga nailathalang resulta, hindi sa nakalimbag na numero. Taasan ang --policy.n_decoder_layers at magte-train ka ng model na hindi kailanman na-evaluate ng papel.

Ang action chunking ang buong ideya

Ang ordinaryong behavioural cloning ay nagmamapa ng isang obserbasyon sa isang aksyon, at ang mga error ay lumalala: ang isang paglihis ay naglalagay sa braso na wala sa distribusyon, na gumagawa ng mas masamang aksyon, at pagkatapos ng tatlumpung hakbang ang gripper ay malayo sa bagay. Pag-chunk ng aksyon ay naghuhula ng k aksyon nang sabay-sabay at isinasagawa ang mga ito, binabawasan ang epektibong horizon sa pamamagitan ng factor na k. Pinangangasiwaan din nito ang isang abala na partikular sa data ng tao: ang mga teleoperator ay nagpapahinga, at ang isang single-step na Markovian patakaran ay hindi kayang imodelo ang isang paghinto na nakasalalay sa kung ano ang nauna.

Ang papel ay nag-aablate ng k sa halip na igiit ito. Sa naka-off na temporal ensembling, na-average sa apat na setting, ang tagumpay ay tumataas mula 1 porsyento sa k = 1 hanggang 44 porsyento sa k = 100, pagkatapos ay bumababa sa 200 at 400 habang ang patakaran ay lumalapit sa open-loop control. Ang kurba na iyon ang dahilan kung bakit ang default ay 100.

  • chunk_size: kung gaano karaming aksyon sa hinaharap ang hinuhulaan ng decoder sa bawat forward pass. Default 100.
  • n_action_steps: ilan sa mga ito ang iyong isasagawa bago muling magtanong. Default 100, kaya ang lerobot ay nagpapatakbo ng buong chunk nang open loop.
  • Binibigyang-bisa ng lerobot ang n_action_steps <= chunk_size at nagpapataas ng ValueError kung baliktad ang iyong pagkakakuha nito.

Ang mahalaga sa operasyon ay ang chunk_size na hinati sa frame rate. Sa 30 fps na ginagamit ng mga halimbawa ng SO-100 ng lerobot, ang isang chunk ng 100 ay nagbibigay ng humigit-kumulang 3.3 segundo mula sa isang obserbasyon. Kung kailangan ng gawain ng pagwawasto sa loob ng window na iyon, babaan ang n_action_steps, hindi ang chunk_size: pinapanatili mo ang mahabang prediksyon at mas madalas na muling nagmamasid.

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
Pagpapaikli sa isinagawang bahagi ng chunk nang hindi pinapaikli ang prediksyon.
Ang bitag ng temporal ensembling

Itakda ang --policy.temporal_ensemble_coeff at kinakailangan ng lerobot ang n_action_steps = 1, nagpapataas ng NotImplementedError kung hindi. Ang ensembling ay nagtatanong sa policy sa bawat timestep at pinagsasama ang magkakapatong na prediksyon para sa timestep na iyon na may mga timbang na w_i = exp(-m * i), ang pinakaluma ay nakakakuha ng w_0. Inilalagay ito ng papel sa 3.3 porsyento para sa ACT: totoo ngunit katamtaman, at pinaparami nito ang bilang ng inference sa haba ng chunk. Abot-kaya sa 20 ms bawat hakbang, hindi sa 485 ms. Tingnan ang latency ng inference.

Kapag nalampasan ng ACT ang isang foundation model

Ang limang trainable na patakaran na magkakatabi, kasama ang mga numerong sinusukat at ginagamit ng AY-Robots upang sukatin ang GPU na inuupahan nito.

PatakaranPamilyaParametroBawat hakbangAntas ng GPUMinimum na episodeDataset
ACTChunking transformer, mula sa simula~80 M20 msRTX 4090 / 24 GB50LeRobot v3.0
SmolVLACompact VLA~450 M245 msRTX 4090 / 24 GB30LeRobot v3.0
GR00T N1.7VLA foundation, diffusion head~3 B (~40 M trained)152 msA100 / H100 80 GB50LeRobot v2.0 or v2.1
GR00T N1.5VLA foundation, sinundan~3 B165 msA100 / H100 80 GB50LeRobot v2.0 or v2.1
Pi0.5Flow-matching VLA, tingnan ang flow matching~3 B, PaliGemma backbone485 msA100 / H100 80 GB50LeRobot v3.0
Ang pahina ng mga patakaran ng AY-Robots na nagpapakita ng talahanayan ng paghahambing ng ACT, SmolVLA, GR00T N1.5, GR00T N1.7 at Pi0.5 na may bilang ng parametro, mga kinakailangan sa GPU, inference latency at minimum na bilang ng episode
Ang talahanayan ng /policies: Ang ACT ay may pinakamaliit na bilang ng parametro at pinakamaikling oras ng hakbang.
Pagsasanay ng ACT mula sa simula
Mga Kalamangan
  • 20 ms bawat hakbang ng aksyon, ang pinakamabilis sa lima, sa isang 24 GB card hindi isang A100.
  • 1 hanggang 3 USD bawat pagtakbo laban sa 4 hanggang 12 para sa klase ng 3 B.
  • Tumpak sa mga gawaing mayaman sa kontak na nakita nito: 88 at 96 porsyento sa Slide Ziploc at Slot Battery, kung saan ang mga naunang pamamaraan ay hindi kailanman nalampasan ang unang yugto.
Mga Kompromiso
  • Walang kondisyon sa wika: ang string ng gawain ay binabalewala, kaya ang isang checkpoint ay isang gawain.
  • Walang semantic priors: lahat ng alam nito ay nagmula sa iyong 50 episode.
  • Makipot na heneralisasyon: ilipat ang isang camera at ikaw ay muling nagsasanay.
  • Tahimik itong nabibigo: bumababa ang loss, walang ginagawa ang braso, walang sinasabi ang mga log.
  • Ang bentahe sa bilis ay nakakatulong lamang kung ang inference ay nasa tabi ng mga servo.

Piliin ang ACT kapag ang gawain at eksena ay nakapirmi at ang galaw ay dapat mabilis at tumpak. Pumili ng isang kapag ang isang checkpoint ay dapat sumaklaw ng ilang tagubilin. Dalawang pahina ang nagtatrabaho sa desisyon nang harapan: at . Para sa mga nai-publish na benchmark, ay nagli-link ng bawat numero sa pinagmulan nito.

Ano ang kailangan mo bago ka magsimula

Isang follower arm, isang leader arm para sa , hindi bababa sa isang camera, isang 24 GB GPU. Binabasa lamang ng ACT ang mga imahe at posisyon ng joint. Ang dalawang camera ang pinakamainam: isang nakapirming front view para sa kinaroroonan ng mga bagay, isang wrist camera para sa kung ano ang ay malapit nang hawakan, tulad sa ALOHA.

ArmMga ServoBoltaheHalaga ng mga BahagiKatayuan
SO-100Feetech STS32157.4 V~110 to 150 EURBuong suporta, sanggunian na arm
SO-101Feetech STS32157.4 V~130 to 170 EURBuong suporta
Koch v1.1Dynamixel XL330 / XL4305 V and 12 V rails~250 to 350 EURKatugma
LeKiwiFeetech STS3215 (arm)7.4 V arm, 12 V base~400 to 500 EURKatugma
7.4 V, hindi 12 V

Ang SO-100 at SO-101 ay gumagamit ng Feetech STS3215 servos sa isang 7.4 V na riles. Ang pagbibigay sa kanila ng 12 V ay sumisira sa kanila, sapat na tahimik upang sisihin muna ng mga tao ang software, at ang isang Koch 12 V supply ay pisikal na akma sa isang SO-100 board. Suriin ang label. Mga Sintomas: servo ay hindi tumutugon, arm ay kumikibot pagkatapos ay bumababa. Tingnan din ang SO-100 vs SO-101.

Mula sa hubad na arm hanggang sa naitalang dataset

Ang daloy sa ibaba ay lerobot 0.6.x. Laktawan ito kung mayroon kang calibrated arm at dataset. Kung hindi, ang SO-100 gabay sa pagsisimula ay sumasaklaw sa pag-assemble, ang walkthrough ng pagre-record ay sumasaklaw sa pagkuha at ang mga dokumento ng dataset ang format.

  1. 1
    I-install ang lerobot gamit ang tamang extras

    Ang pagre-record ay nangangailangan ng core_scripts, ang pagte-training ay training, ang Feetech servos ay 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
    Hanapin ang USB port ng bawat braso

    Patakbuhin ito nang nakasaksak ang parehong braso, at tanggalin ang isa kapag sinenyasan. Sa Linux, maaaring kailangan mong buksan ang mga pahintulot ng node.

    bash
    lerobot-find-port
    # on Linux, if the port exists but is unreadable:
    sudo chmod 666 /dev/ttyACM0
  3. 3
    Itakda ang mga ID ng motor at baudrate

    Sa SO-100, nangyayari ito bago ang pag-assemble: hindi tulad ng SO-101, hindi na maaabot ang mga konektor kapag nabuo na. Ang script ay naglalakad sa bus ng isang motor sa bawat pagkakataon mula sa gripper, at isinusulat ang mga ID sa 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
    I-calibrate ang parehong braso

    Itakda ang bawat joint sa gitna ng saklaw nito, pindutin ang Enter, pagkatapos ay i-sweep ang bawat isa sa buong saklaw nito. Ang Calibration ay nagpapahintulot sa isang policy na sinanay sa isang braso na tumakbo sa isa pa. Gamitin muli ang parehong 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
    Mag-teleoperate nang isang beses na nakabukas ang mga camera

    Ang patakaran ng lerobot: dapat mong magawa ang gawain sa pamamagitan lamang ng pagtingin sa mga imahe ng camera. Kung hindi mo magawa, hindi rin magagawa ng ACT. Mas maraming masamang dataset ang nahuhuli nito kaysa sa pag-debug sa huli.

    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
    Mag-record ng 50 episode

    Ang 50 ang minimum ng AY-Robots at ang ginamit ng ALOHA sa bawat gawain. Pinapayuhan ng lerobot ang 10 bawat lokasyon ng object, nakapirming camera, pare-parehong paghawak. Tinatapos ng n ang isang episode, muling nagre-record ang r, humihinto at nag-e-encode ang q.

    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
Ang pahina ng tutorial sa pagre-record ng AY-Robots na nagpapaliwanag kung paano kumuha ng dataset na LeRobot-format mula sa isang teleoperation session
Ang tutorial sa pagre-record. Ang desktop client ay sumusulat ng parehong layout tulad ng lerobot-record.
Ang bitag na kumakain ng isang araw: isang inkonsistent na dataset

Walang priors ang ACT na maaaring balikan, kaya ang bawat inkonsistensi ay nagiging permanente. Ang tatlong pinakamahal: isang camera na bahagyang gumalaw sa pagitan ng episode 20 at 21, ilaw na nagbago dahil na-record mo ang kalahati ng set sa hapon, isang paghawak na ginawa sa dalawang paraan. Ang bawat isa ay nagbibigay ng perpektong loss curve at isang braso na napupunta sa maling lugar. Tingnan ang bumababa ang loss, walang ginagawa ang policy, gumagana lang ang policy sa isang setup at pagkolekta ng mataas na kalidad na data ng training.

Bago mag-training, i-replay ang hindi bababa sa limang episode. ay nag-iimbak ng mga camera stream, joint state at aksyon bawat , at ang replay ay nagtutulak ng mga aksyon na iyon pabalik sa braso. Kung hindi ginagawa ng replay ang gawain, hindi ito naglalaman ng data at hindi ito iimbentuhin ng training.

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
Pag-replay ng episode 0. Kung ito ay mabigo, itigil at i-record muli.

Pagsasanay sa patakaran ng ACT

Ito ang buong command. Lahat ng ACT-specific ay default na, kaya sinasabi ng lerobot ACT page na simulan sa mga ito.

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
Ang command ng pagsasanay mula sa lerobot 0.6.x docs, sa isang SO-100 dataset.

--policy.type=act naglo-load ng ACTConfig, na umaangkop sa dami ng motor at camera na naitala ng iyong dataset, kaya hindi mo na kailangang ideklara ang hugis ng obserbasyon. --wandb.enable=true ay opsyonal at sulit: ang loss curve ang tanging murang signal sa isang 100000-step na pagtakbo. Ang iskedyul ay nagmumula sa train config ng lerobot, hindi sa ACTConfig: 100000 hakbang, batch 8, seed 1000, isang checkpoint bawat 20000 hakbang, at pag-log bawat 200.

Ang isang buong pagtakbo ay nag-iiwan ng limang direktoryo ng checkpoint, 020000 hanggang 100000, kasama ang isang huli symlink. Panatilihin ang lahat ng ito: ang pinakamahusay na patakaran ay madalas na hindi ang huli.

Settingdefault ng lerobotform ng AY-Robots ACTKomento
Laki ng batch88Bawasan ito muna kung naabot ang limitasyon ng VRAM.
Rate ng pagkatuto1e-51e-5Pareho sa papel ng ALOHA.
Maximum na hakbang100000100000Humigit-kumulang kung saan humihinto ang pagpapabuti ng isang set ng 50 episode.
Akumulasyon ng gradient11, does not applyBaguhin ang laki ng batch sa halip.
Seed1000exposedWalang seed ang entry point ng tyro ng GR00T; ang mga ACT run ang mga reproducible.
laki ng chunk / bilang ng hakbang ng aksyon100 / 100100 / 100, editableHorizon ng prediksyon at pagpapatupad. Bawasan ang pangalawa, hindi ang una.
Dalas ng checkpoint20000not exposedAng saveSteps ay isang GR00T knob dito.
Ang kakulangan sa memorya ay problema sa laki ng batch, hindi sa card

Ang ACT sa laki ng batch na 8 na may dalawang 640x480 camera ay kumportable sa 24 GB. Humihinto ito sa pagkasya kapag itinaas ng mga tao ang laki ng batch para sa bilis, o pinapakain ito ng 1920x1080 na frame na ipinapakita ng isang halimbawa ng pagre-record ng lerobot. Ang dalawang ResNet-18 backbone sa 1080p ay may ibang-ibang profile ng memorya. Bawasan ang --batch_size sa 4 bago umarkila ng mas malaking card. Tingnan ang kakulangan sa memorya sa pag-train.

Tagal: humigit-kumulang 5 oras sa isang 11 GB RTX 2080 Ti sa papel, ilang oras para sa 100k na hakbang bawat pahina ng ACT ng lerobot, 2 hanggang 5 oras sa AY-Robots 24 GB tier. Huwag itong paikliin. Sinasabi ng README ng reference repo na ang isang patakarang pabago-bago o humihinto ay karaniwang nangangailangan lamang ng mas maraming pagsasanay, dahil ang tagumpay at kinis ay patuloy na bumubuti pagkatapos ng paghinto ng pagbaba ng loss: para sa real-world data, nangangailangan ito ng hindi bababa sa 5000 epochs, o 3 hanggang 4 na beses ang haba muli pagkatapos ng plateau.

bash
lerobot-train \
  --config_path=outputs/train/act_so100_cube/checkpoints/last/pretrained_model/train_config.json \
  --resume=true
Pagpapatuloy ng isang naantalang pagpapatakbo mula sa huling checkpoint nito.

Pagpapatakbo ng sinanay na patakaran sa braso

Gumagamit ang deployment ng lerobot-rollout. Dapat tumugma ang mga camera key sa mga naitala: ang isang patakarang sinanay sa front at wrist ay hindi tatanggap ng cam0 at cam1, at rename_map ay hindi makakatulong, dahil nangangailangan ito ng isang pretrained checkpoint. Maaaring alisin ang task string; minarkahan ito ng sariling halimbawa ng lerobot bilang skippable para sa 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
Autonomous rollout na walang recording. Gamitin ang --strategy.type=sentry para i-record ang mga evaluation episode.
Kamakailan lang pinalitan ang pangalan ng command na ito, kaya magkaiba ang lumang mga tutorial.

Ang evaluation ay dating tumatakbo sa pamamagitan ng lerobot-record --policy.path=.... Sa 0.6.x, ito ay lerobot-rollout na may --strategy.type selector: base, sentry (recording na may auto-upload), highlight (ring buffer na nai-save sa pamamagitan ng keystroke), dagger (human in the loop) at episodic. Simula Agosto 23, 2026, ang pahina ng dokumentasyon ng ACT ay nagsasabi pa rin ng "using the lerobot-record command" direkta sa itaas ng isang block na nagpapatakbo ng lerobot-rollout. Sundin ang command, hindi ang pangungusap.

Para i-pin ang isang checkpoint sa halip na ang final model, idagdag ang --policy.pretrained_revision. Kailangan nito na nagsimula ang pagpapatakbo sa --save_checkpoint_to_hub=true, naka-off bilang default: kung wala ito, itutulak ng lerobot ang final model at wala nang iba. Sa pamamagitan nito, ang bawat checkpoint ay may tag na zero-padded step nito, kaya --policy.pretrained_revision=060000 ay nakakakuha ng 60000 step na isa. Ang paghahambing nito sa 100000 sa totoong braso ay ang pinakamurang eksperimento na magagamit.

Dalawang ruta patungo sa parehong checkpoint

Ang lahat ng nasa itaas ay ang manu-manong ruta at ito ay gumagana. Ang ruta ng platform ay nagpapalit ng kontrol para sa hindi pagmamay-ari ng isang GPU o isang Python environment.

  1. I-install ang lerobot 0.6.x kasama ang core_scripts, training, feetech, ffmpeg.
  2. Hanapin ang mga port, itakda ang mga motor ID, i-calibrate ang parehong braso, mag-record ng 50 episode.
  3. I-replay ang ilang episode upang kumpirmahin na naglalaman ang data ng gawain.
  4. Magrenta o magmay-ari ng 24 GB GPU, itugma ang CUDA at PyTorch, patakbuhin ang lerobot-train --policy.type=act.
  5. Maghintay ng ilang oras, pagkatapos ay patakbuhin ang lerobot-rollout sa makina sa braso.
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
Ano ang ibinibigay sa iyo ng rutang ito

Ganap na kontrol: i-edit ang configuration_act.py, magdagdag ng camera, i-fork ang trainer. Para sa pananaliksik sa halip na pagpapadala ng isang gawain, ang isang platform ay isang abala.

Ang AY-Robots training matrix na may limang hilera ng patakaran at apat na column ng robot arm, kung saan ang bawat cell ay nagli-link sa partikular na gabay sa pagsasanay para sa kombinasyon ng modelo at braso na iyon.
Ang matrix sa /train. Ang hilera ng ACT laban sa column ng SO-100 ay ang gabay ng artikulong ito.

Ano ang talagang nagiging mali

Halos wala sa sakit ay nasa training command. Ito ay nasa mga bagay sa paligid nito, nakaayos ayon sa kung gaano kadalas sila kumagat sa unang pagkakataon.

SintomasKaraniwang sanhiPahina
lerobot-find-port shows nothingMga pahintulot ng driver, cable o node
Nawawala ang camera sa oras ng pag-recordNagbago ang index sa pag-reboot, o dalawang camera sa isang USB controller
Tinanggihan ng training ang datasetACT ay nangangailangan ng v3.0, GR00T ay nangangailangan ng v2.1
CUDA ubos ang memoryaTumaas ang batch size, o 1080p frames sa halip na 480p
Maganda ang loss, walang ginagawa ang brasoKulang ang data sa gawain, o gumalaw ang camera
Galaw na pabugso-bugso o paghinto sa gitna ng episodeKulangan sa training, paghinto sa hangganan ng chunk, o timed-out na tawag sa inference

Dalawang row ang nararapat bigyan ng diin. Ang ACT ay nagsasanay sa LeRobot v3.0 habang ang loader ng GR00T ay nagka-crash dito at nangangailangan ng v2.1, kaya ang isang dataset na nagsasanay sa ACT ay maaaring magdulot ng pagkabigo sa pagpapatakbo ng GR00T. At ang huling row ay may dalawang solusyon: sinasagot ng mga may-akda ng ACT ang pabugso-bugsong galaw sa pamamagitan ng mas maraming training, habang sa n_action_steps sa 100 ang isang tunay na paghinto ay bumabagsak sa hangganan ng chunk, isang nakikitang paghinto bawat 3.3 segundo sa 30 fps. Dalawa pa ang dapat malaman: ang isang patay na joint ay karaniwang isang , at ay nangangahulugang masyadong maliit ang saklaw ng gripper sa mga demonstrasyon. Buong index: .

Magkano ang halaga ng isang pagpapatakbo

AntasMga ModeloOras ng PagpapatakboPresyo kada orasGastos kada pagpapatakbo
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

Ito ang argumento para sa pagsisimula sa ACT kahit na gusto mo ng VLA sa huli. Ang isang nabigong pagpapatakbo ng ACT ay nagkakahalaga ng presyo ng kape at nagsasabi sa iyo sa loob ng ilang oras kung ang iyong dataset ay naglalaman ng gawain. Ang isang nabigong pagpapatakbo ng GR00T ay nagkakahalaga ng apat na beses niyan para sa parehong aralin. Ang paglipat sa GR00T N1.7 o SmolVLA pagkatapos ay isang pagbabago sa anyo, hindi isang muling pagbuo. Background: mga modelo ng paningin-wika-aksyon, ang kumpletong gabay sa SO-100, sanayin ang iyong unang patakaran at pag-aaral ng panggagaya. Walang braso? Ang live na pahina ay nag-stream ng isang tunay na SO-100 upang patakbuhin nang hindi nagrerehistro.

Sanayin ang ACT sa iyong SO-100

Ang gabay para sa eksaktong kombinasyong ito: mga default, antas ng GPU at kung magkano ang gastos ng isang pagpapatakbo. Piliin ang dataset, ang backend ang umuupa sa card at nagsusulat ng mga checkpoint.

Buksan ang gabay sa pagsasanay
Mayroon bang pretrained na modelo ng ACT na maaari kong i-fine-tune sa halip?

Wala. Walang base model ang ACT; umiiral lamang ito pagkatapos mong sanayin ito. Hindi iyan kakulangan sa tooling, iyan ang ACT: sinasanay ng papel ang isang patakaran mula sa simula kada gawain. Para sa isang vendor checkpoint, gamitin ang GR00T N1.7 o Pi0.5.

Ilang episode ba talaga ang kailangan ko?

50: kung ano ang naitala ng ALOHA kada gawain (100 para sa Thread Velcro, ang pinakamahirap nito) at ang minimum ng AY-Robots. Pinapayuhan ng lerobot ang humigit-kumulang 10 kada lokasyon ng bagay, nakapirming camera, pare-parehong paghawak. Mas mahusay ang limampung malinis na episode kaysa sa isang daan kung saan gumalaw ang camera.

Dapat ko bang baguhin ang chunk_size mula 100?

Karaniwan hindi. Ang ablation ay umaakyat mula 1 porsyento sa k = 1 hanggang 44 porsyento sa k = 100 at bumababa pagkatapos, kaya ang 100 ay malapit sa tuktok. Kung masyadong matagal ang paggawa ng braso, babaan ang n_action_steps sa halip: sa 30 fps, 25 muling pagtatanong bawat 0.8 segundo.

Gaano katagal ang isang training run, at maaari ko ba itong ihinto nang maaga?

Dalawa hanggang limang oras sa isang 24 GB card para sa 100000 hakbang. Ang mga checkpoint ay lumalabas bawat 20000 hakbang at ang --resume=true ay nagpapatuloy ng isang pagpapatakbo, kaya ligtas ang maagang paghinto. Huwag lang sa unang patag na bahagi: bumubuti ang kinis pagkatapos ng pag-plateau ng loss.

Bumaba ang loss at nabibigo pa rin ang braso. Ano na ngayon?

Halos palaging ang dataset. I-replay ang mga naitalang episode sa braso: kung hindi ginagawa ng replay ang gawain, hindi ito naglalaman ng data. Pagkatapos ay suriin kung may gumalaw, lalo na ang isang camera. Walang priors ang ACT, kaya ang isang pagtulak sa episode 21 ay permanente.

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started