
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.
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.
| Hyperparameter | ALOHA paper, Table III | lerobot on main |
|---|---|---|
| learning rate | 1e-5 | optimizer_lr = 1e-5 |
| batch size | 8 | batch_size = 8, in TrainPipelineConfig not ACTConfig |
| encoder / decoder layers | 4 / 7 | n_encoder_layers = 4 / n_decoder_layers = 1 |
| chunk size k | 100 | chunk_size = 100 |
| latent dim ng z | wala; Ipinapakita ng Fig. 11 ang isang 32 to 512 projection | latent_dim = 32 |
| temporal ensembling | wala; --temporal_agg sa reference code | temporal_ensemble_coeff = None |
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_sizeat nagpapataas ngValueErrorkung 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.
# 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=cudaItakda 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.
| Patakaran | Pamilya | Parametro | Bawat hakbang | Antas ng GPU | Minimum na episode | Dataset |
|---|---|---|---|---|---|---|
| ACT | Chunking transformer, mula sa simula | ~80 M | 20 ms | RTX 4090 / 24 GB | 50 | LeRobot v3.0 |
| SmolVLA | Compact VLA | ~450 M | 245 ms | RTX 4090 / 24 GB | 30 | LeRobot v3.0 |
| GR00T N1.7 | VLA foundation, diffusion head | ~3 B (~40 M trained) | 152 ms | A100 / H100 80 GB | 50 | LeRobot v2.0 or v2.1 |
| GR00T N1.5 | VLA foundation, sinundan | ~3 B | 165 ms | A100 / H100 80 GB | 50 | LeRobot v2.0 or v2.1 |
| Pi0.5 | Flow-matching VLA, tingnan ang flow matching | ~3 B, PaliGemma backbone | 485 ms | A100 / H100 80 GB | 50 | LeRobot v3.0 |

- 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.
- 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.
| Arm | Mga Servo | Boltahe | Halaga ng mga Bahagi | Katayuan |
|---|---|---|---|---|
| SO-100 | Feetech STS3215 | 7.4 V | ~110 to 150 EUR | Buong suporta, sanggunian na arm |
| SO-101 | Feetech STS3215 | 7.4 V | ~130 to 170 EUR | Buong suporta |
| Koch v1.1 | Dynamixel XL330 / XL430 | 5 V and 12 V rails | ~250 to 350 EUR | Katugma |
| LeKiwi | Feetech STS3215 (arm) | 7.4 V arm, 12 V base | ~400 to 500 EUR | Katugma |
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.
- 1I-install ang lerobot gamit ang tamang extras
Ang pagre-record ay nangangailangan ng
core_scripts, ang pagte-training aytraining, ang Feetech servos ayfeetech. 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 - 2Hanapin 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.
bashlerobot-find-port # on Linux, if the port exists but is unreadable: sudo chmod 666 /dev/ttyACM0 - 3Itakda 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.
bashlerobot-setup-motors \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM0 lerobot-setup-motors \ --teleop.type=so100_leader \ --teleop.port=/dev/ttyACM1 - 4I-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.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 - 5Mag-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.
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 - 6Mag-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
nang isang episode, muling nagre-record angr, humihinto at nag-e-encode angq.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

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.
lerobot-replay \
--robot.type=so100_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_follower \
--dataset.repo_id=${HF_USER}/so100_cube \
--dataset.episode=0Pagsasanay 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.
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 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.
| Setting | default ng lerobot | form ng AY-Robots ACT | Komento |
|---|---|---|---|
| Laki ng batch | 8 | 8 | Bawasan ito muna kung naabot ang limitasyon ng VRAM. |
| Rate ng pagkatuto | 1e-5 | 1e-5 | Pareho sa papel ng ALOHA. |
| Maximum na hakbang | 100000 | 100000 | Humigit-kumulang kung saan humihinto ang pagpapabuti ng isang set ng 50 episode. |
| Akumulasyon ng gradient | 1 | 1, does not apply | Baguhin ang laki ng batch sa halip. |
| Seed | 1000 | exposed | Walang seed ang entry point ng tyro ng GR00T; ang mga ACT run ang mga reproducible. |
| laki ng chunk / bilang ng hakbang ng aksyon | 100 / 100 | 100 / 100, editable | Horizon ng prediksyon at pagpapatupad. Bawasan ang pangalawa, hindi ang una. |
| Dalas ng checkpoint | 20000 | not exposed | Ang saveSteps ay isang GR00T knob dito. |
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.
lerobot-train \
--config_path=outputs/train/act_so100_cube/checkpoints/last/pretrained_model/train_config.json \
--resume=truePagpapatakbo 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.
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=60Ang 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.
- I-install ang lerobot 0.6.x kasama ang
core_scripts,training,feetech, ffmpeg. - Hanapin ang mga port, itakda ang mga motor ID, i-calibrate ang parehong braso, mag-record ng 50 episode.
- I-replay ang ilang episode upang kumpirmahin na naglalaman ang data ng gawain.
- Magrenta o magmay-ari ng 24 GB GPU, itugma ang CUDA at PyTorch, patakbuhin ang
lerobot-train --policy.type=act. - Maghintay ng ilang oras, pagkatapos ay patakbuhin ang
lerobot-rolloutsa makina sa braso.
# 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=cudaGanap 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.
- Mag-record gamit ang desktop client, o magdala ng Hugging Face repo ID o lokal na dataset.
- Buksan ang gabay ng ACT sa SO-100 at pumili ng modelo at dataset. Ang mga default ay ang mga lerobot; ang chunkSize, nActionSteps, seed at logFreq ay maaaring i-edit.
- Ang backend ay nagrerenta ng GPU na may sukat ayon sa VRAM at nagsusulat ng mga checkpoint sa object storage.
- Ang
/api/inference/podpagkatapos ay naghahatid ng patakaran sa lokal na robot client. Sinisira ng isang idle watchdog ang pod, kaya walang tahimik na nagbabayad. - Ang parehong operasyon ay umiiral sa CLI, ang MCP server at ang mga training docs.
Hindi nito inaayos ang iyong data: ang isang dataset na may inilipat na camera ay nagsasanay nang kasing sama dito, at hindi ito matukoy ng form. Hindi rin nito inaalis ang problema sa latency. Ang control loop ay 20 hanggang 485 ms bawat hakbang ng aksyon, na may mga round trip sa pampublikong internet sa itaas, at ang ACT ang pinaka-nasasaktan dahil ang hakbang nito ay pinakamaikli: ang 60 ms ay isang 12 porsiyentong pagbagal sa 485 ms ng Pi0.5 ngunit apat na beses ang hakbang sa 20 ms ng ACT. Ang remote inference ay angkop para sa mabagal na pagpili at paglalagay, hindi para sa mabilis na reaktibong paggalaw.

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.
| Sintomas | Karaniwang sanhi | Pahina |
|---|---|---|
| lerobot-find-port shows nothing | Mga pahintulot ng driver, cable o node | |
| Nawawala ang camera sa oras ng pag-record | Nagbago ang index sa pag-reboot, o dalawang camera sa isang USB controller | |
| Tinanggihan ng training ang dataset | ACT ay nangangailangan ng v3.0, GR00T ay nangangailangan ng v2.1 | |
| CUDA ubos ang memorya | Tumaas ang batch size, o 1080p frames sa halip na 480p | |
| Maganda ang loss, walang ginagawa ang braso | Kulang ang data sa gawain, o gumalaw ang camera | |
| Galaw na pabugso-bugso o paghinto sa gitna ng episode | Kulangan 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
| Antas | Mga Modelo | Oras ng Pagpapatakbo | Presyo kada oras | Gastos kada pagpapatakbo |
|---|---|---|---|---|
| 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 |
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 pagsasanayMayroon 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.
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