
Addestra un Action Chunking Transformer da zero su un SO-100 con lerobot: la configurazione act, chunk_size e n_action_steps, la pianificazione a 100000 passi, inferenza a 20 ms.
ACT è l'eccezione tra le policy SO-100. GR00T N1.7 e N1.5 partono da nvidia/GR00T-N1.7-3B e nvidia/GR00T-N1.5-3B, Pi0.5 da lerobot/pi05_base. ACT parte da zero: non esiste un checkpoint di base, perché non è un modello fondamentale. È un trasformatore di circa 80 milioni di parametri che si addestra da zero su un singolo compito, sul proprio braccio, con la propria illuminazione.
Questo è anche il motivo per cui esegue un passo di controllo in 20 ms, mentre un VLA da 3 miliardi di parametri richiede da 152 a 485 ms e costa da 1 a 3 USD per esecuzione invece di 4 a 12. Questa guida illustra il percorso manuale con lerobot su un SO-100: la registrazione, la configurazione act, cosa controllano chunk_size e n_action_steps, la pianificazione di 100000 passi, il rollout. Poi lo stesso lavoro su AY-Robots, inclusi i casi in cui la piattaforma non è d'aiuto.
Cosa devi sapere
- •ACT si addestra da zero: nessun modello di base, nessun pre-addestramento, nessun input linguistico. Un checkpoint, un compito.
- •Il paper: circa 80 M parametri, circa 5 ore su una RTX 2080 Ti da 11 GB, 0.01 s di inferenza.
- •Impostazioni predefinite di lerobot: chunk_size 100, n_action_steps 100, batch 8, lr 1e-5, 100000 passi, seed 1000.
- •Su AY-Robots: 20 ms per passo, il più veloce dei cinque. Minimo 50 episodi, LeRobot v3.0, una scheda da 24 GB, da 1 a 3 USD per esecuzione.
- •Vince su un compito che ha già visto, e perde nel momento in cui si desidera il condizionamento linguistico.
Verificato il 23 agosto 2026 rispetto a lerobot 0.6.x: pyproject.toml su main riporta version = "0.6.2", il tag più recente v0.6.1, 3 agosto 2026. Un tutorial che inizia con python lerobot/scripts/train.py precede i punti di ingresso della console lerobot-train, lerobot-record e lerobot-rollout.
Cosa sia realmente ACT
Action Chunking with Transformers deriva dal paper ALOHA, Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware, di Zhao, Kumar, Levine e Finn, arXiv, 23 aprile 2023. L'attrezzatura registra a 50 Hz con quattro webcam che trasmettono 480x640 a 30 fps: due sulle pinze, una superiore, una frontale. L'abstract dichiara sei abilità con una percentuale di successo dall'80 al 90 percento, tra cui l'apertura di un contenitore per condimenti traslucido e l'inserimento di una batteria, da 10 minuti di dimostrazioni.
Il corpo è più utile quando si pianifica una sessione di registrazione: 50 dimostrazioni per compito, eccetto Thread Velcro a 100, che corrisponde a 10-20 minuti di dati e 30-60 minuti di tempo effettivo una volta contati i reset. Il successo non è uniforme: Thread Velcro termina al 20 percento, Put On Shoe al 92, Cup Open 84, Prep Tape 64.
| Iperparametro | Paper ALOHA, Tabella III | lerobot su main |
|---|---|---|
| tasso di apprendimento | 1e-5 | optimizer_lr = 1e-5 |
| dimensione del batch | 8 | batch_size = 8, in TrainPipelineConfig not ACTConfig |
| strati encoder / decoder | 4 / 7 | n_encoder_layers = 4 / n_decoder_layers = 1 |
| dimensione del chunk k | 100 | chunk_size = 100 |
| dimensione latente di z | assente; Fig. 11 mostra una proiezione da 32 a 512 | latent_dim = 32 |
| ensembling temporale | assente; --temporal_agg nel codice di riferimento | temporal_ensemble_coeff = None |
Il paper elenca 7 layer decodificatori, lerobot ne include 1, deliberatamente. Il commento in configuration_act.py afferma che l'implementazione originale ha un bug che significa che viene utilizzato solo il primo layer, citando il problema 25 in tonyzhaozh/act: l'action head legge hs[0], quindi tutti e sette i layer vengono eseguiti ma solo il primo output raggiunge la predizione. Quel problema è aperto e senza risposta dal 23 aprile 2024. lerobot corrisponde al comportamento che ha prodotto i risultati pubblicati, non al numero stampato. Aumenta --policy.n_decoder_layers e addestrerai un modello che il paper non ha mai valutato.
L'action chunking è l'idea centrale
Il cloning comportamentale ordinario mappa un'osservazione a un'azione, e gli errori si accumulano: una deviazione porta il braccio fuori distribuzione, producendo un'azione peggiore, e trenta passi dopo la pinza non è da nessuna parte vicino all'oggetto. L'action chunking predice k azioni contemporaneamente e le esegue, riducendo l'orizzonte effettivo di un fattore k. Gestisce anche un inconveniente specifico dei dati umani: i teleoperatori fanno delle pause, e una policy Markoviana a singolo passo non può modellare una pausa che dipende da ciò che è venuto prima.
Il paper abla k piuttosto che affermarlo. Con l'ensembling temporale disattivato, mediato su quattro configurazioni, il successo sale dall'1 percento a k = 1 al 44 percento a k = 100, poi si stabilizza a 200 e 400 man mano che la policy si avvicina al controllo ad anello aperto. Quella curva è il motivo per cui il valore predefinito è 100.
- chunk_size: quante azioni future il decodificatore predice per ogni passaggio in avanti. Predefinito 100.
- n_action_steps: quante di esse vengono eseguite prima di interrogare nuovamente. Predefinito 100, quindi lerobot esegue l'intero chunk in open loop.
- lerobot convalida
n_action_steps <= chunk_sizee solleva unValueErrorse i valori sono invertiti.
Ciò che conta operativamente è la dimensione del chunk divisa per il frame rate. Ai 30 fps utilizzati dagli esempi SO-100 di lerobot, un chunk di 100 impegna circa 3.3 secondi da una singola osservazione. Se il compito richiede una correzione all'interno di quella finestra, abbassare n_action_steps, non chunk_size: si mantiene la previsione lunga e si riosserva più spesso.
# 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=cudaImpostando --policy.temporal_ensemble_coeff, lerobot richiede n_action_steps = 1, sollevando altrimenti un NotImplementedError. L'ensembling interroga la policy ad ogni timestep e fonde le previsioni sovrapposte per quel timestep con pesi w_i = exp(-m * i), dove il più vecchio ottiene w_0. Il paper lo indica al 3.3 percento per ACT: reale ma modesto, e moltiplica il conteggio delle inferenze per la lunghezza del chunk. Conveniente a 20 ms per passo, non a 485 ms. Vedi latenza di inferenza.
Quando ACT supera un modello di base
Le cinque policy addestrabili affiancate, con i numeri che AY-Robots misura e utilizza per dimensionare la GPU che noleggia.
| Policy | Famiglia | Parametri | Per passo | Livello GPU | Episodi minimi | Dataset |
|---|---|---|---|---|---|---|
| [object Object] | Transformer a chunking, da zero | ~80 M | 20 ms | RTX 4090 / 24 GB | 50 | LeRobot v3.0 |
| [object Object] | VLA compatto | ~450 M | 245 ms | RTX 4090 / 24 GB | 30 | LeRobot v3.0 |
| [object Object] | Base VLA, testa di diffusione | ~3 B (~40 M trained) | 152 ms | A100 / H100 80 GB | 50 | LeRobot v2.0 or v2.1 |
| [object Object] | Base VLA, predecessore | ~3 B | 165 ms | A100 / H100 80 GB | 50 | LeRobot v2.0 or v2.1 |
| [object Object] | VLA con flow-matching, vedi | ~3 B, PaliGemma backbone | 485 ms | A100 / H100 80 GB | 50 | LeRobot v3.0 |

- 20 ms per passo d'azione, il più veloce dei cinque, su una scheda da 24 GB non una A100.
- Da 1 a 3 USD per esecuzione contro 4 a 12 per la classe 3 B.
- Preciso su lavori ricchi di contatto che ha già visto: 88 e 96 percento su Slide Ziploc e Slot Battery, dove i metodi precedenti non hanno mai superato la prima fase.
- Nessun condizionamento linguistico: la stringa del compito viene ignorata, quindi un checkpoint corrisponde a un solo compito.
- Nessuna conoscenza semantica pregressa: tutto ciò che sa deriva dai tuoi 50 episodi.
- Generalizzazione limitata: sposta una telecamera e devi riaddestrare.
- Fallisce silenziosamente: la perdita diminuisce, il braccio non fa nulla, i log non dicono nulla.
- Il vantaggio di velocità aiuta solo se l'inferenza si trova accanto ai servomotori.
Scegli ACT quando il compito e la scena sono fissi e il movimento deve essere veloce e preciso. Scegli un quando un checkpoint deve coprire diverse istruzioni. Due pagine confrontano direttamente la decisione: e . Per i benchmark pubblicati, collega ogni numero alla sua fonte.
Cosa ti serve prima di iniziare
Un braccio follower, un braccio leader per la , almeno una telecamera, una GPU da 24 GB. ACT legge solo immagini e posizioni delle giunture. Due telecamere sono l'ideale: una vista frontale fissa per dove si trovano le cose, una telecamera da polso per ciò che l' sta per toccare, come su ALOHA.
| Braccio | Servi | Tensione | Costo dei componenti | Stato |
|---|---|---|---|---|
| SO-100 | Feetech STS3215 | 7.4 V | ~110 to 150 EUR | Supporto completo, braccio di riferimento |
| SO-101 | Feetech STS3215 | 7.4 V | ~130 to 170 EUR | Supporto completo |
| Koch v1.1 | Dynamixel XL330 / XL430 | 5 V and 12 V rails | ~250 to 350 EUR | Compatibile |
| LeKiwi | Feetech STS3215 (arm) | 7.4 V arm, 12 V base | ~400 to 500 EUR | Compatibile |
I SO-100 e SO-101 utilizzano servi Feetech STS3215 su un binario da 7.4 V. Alimentarli con 12 V li distrugge, in modo abbastanza silenzioso da far sì che le persone incolpino prima il software, e un alimentatore Koch da 12 V si adatta fisicamente a una scheda SO-100. Controllare l'etichetta. Sintomi: servo non risponde, il braccio si contrae e poi cede. Vedere anche SO-100 vs SO-101.
Dal braccio nudo al dataset registrato
Il flusso seguente è lerobot 0.6.x. Saltalo se hai un braccio calibrato e un dataset. Altrimenti la guida introduttiva SO-100 copre l'assemblaggio, il tutorial di registrazione copre l'acquisizione e la documentazione del dataset il formato.
- 1Installa lerobot con gli extra corretti
La registrazione richiede
core_scripts, l'addestramentotraining, i servi Feetechfeetech. 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 - 2Trova la porta USB di ciascun braccio
Eseguilo con entrambi i bracci collegati, scollegandone uno quando richiesto. Su Linux potrebbe essere necessario aprire i permessi del nodo.
bashlerobot-find-port # on Linux, if the port exists but is unreadable: sudo chmod 666 /dev/ttyACM0 - 3Imposta gli ID dei motori e il baudrate
Sull'SO-100 questo avviene prima dell'assemblaggio: a differenza dell'SO-101, i connettori sono irraggiungibili una volta costruito. Lo script percorre il bus un motore alla volta dalla pinza, scrivendo gli ID nella EEPROM.
bashlerobot-setup-motors \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM0 lerobot-setup-motors \ --teleop.type=so100_leader \ --teleop.port=/dev/ttyACM1 - 4Calibra entrambi i bracci
Imposta ogni giunto al centro del suo intervallo, premi Invio, quindi muovi ciascuno attraverso il suo intervallo completo. La calibrazione consente a una policy addestrata su un braccio di funzionare su un altro. Riutilizza lo stesso
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 - 5Teleopera una volta con le telecamere accese
La regola empirica di lerobot: dovresti essere in grado di eseguire il compito guardando solo le immagini della telecamera. Se non puoi, nemmeno ACT può. Questo rileva più dataset errati che un debugging successivo.
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 - 6Registra 50 episodi
50 è il minimo di AY-Robots e ciò che ALOHA ha usato per compito. lerobot consiglia 10 per posizione dell'oggetto, telecamere fisse, presa coerente.
ntermina un episodio,rregistra di nuovo,qsi ferma e codifica.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 non ha preconcetti a cui ricorrere, quindi ogni inconsistenza diventa permanente. Le tre più costose: una telecamera spostata tra l'episodio 20 e 21, la luce che è cambiata perché hai registrato metà del set nel pomeriggio, una presa eseguita in due modi. Ognuna produce una curva di perdita dall'aspetto perfetto e un braccio che va nel posto sbagliato. Vedi la perdita diminuisce, la policy non fa nulla, la policy funziona solo in una configurazione e raccolta di dati di addestramento di alta qualità.
Prima dell'addestramento, riproduci almeno cinque episodi. memorizza i flussi della telecamera, gli stati dei giunti e le azioni per , e la riproduzione rimanda quelle azioni al braccio. Se la riproduzione non esegue il compito, i dati non lo contengono e l'addestramento non lo inventerà.
lerobot-replay \
--robot.type=so100_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_follower \
--dataset.repo_id=${HF_USER}/so100_cube \
--dataset.episode=0Addestramento della policy ACT
Questo è il comando completo. Tutto ciò che è specifico per ACT è già un'impostazione predefinita, motivo per cui la pagina ACT di lerobot consiglia di iniziare con essi.
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 carica ACTConfig, che si adatta al numero di motori e telecamere registrati dal tuo dataset, quindi non dichiari mai la forma dell'osservazione. --wandb.enable=true è opzionale e ne vale la pena: la curva di perdita è l'unico segnale economico in un'esecuzione di 100000 passi. La pianificazione proviene dalla configurazione di addestramento di lerobot, non da ACTConfig: 100000 passi, batch 8, seed 1000, un checkpoint ogni 20000 passi, logging ogni 200.
Un'esecuzione completa lascia cinque directory di checkpoint, da 020000 a 100000, più un symlink last. Conservali tutti: la migliore policy spesso non è l'ultima.
| Impostazione | Default lerobot | Form ACT AY-Robots | Commento |
|---|---|---|---|
| dimensione del batch | 8 | 8 | Abbassalo per primo se raggiungi i limiti della VRAM. |
| tasso di apprendimento | 1e-5 | 1e-5 | Come nel paper ALOHA. |
| passi massimi | 100000 | 100000 | Circa dove un set di 50 episodi smette di migliorare. |
| accumulo del gradiente | 1 | 1, non applicabile | Cambia invece la dimensione del batch. |
| seed | 1000 | esposto | Il punto di ingresso tyro di GR00T non ha un seed; le esecuzioni ACT sono quelle riproducibili. |
| chunk_size / n_action_steps | 100 / 100 | 100 / 100, modificabile | Orizzonte di previsione ed esecuzione. Abbassa il secondo, non il primo. |
| frequenza checkpoint | 20000 | non esposto | saveSteps è una manopola GR00T qui. |
ACT con dimensione del batch 8 e due telecamere 640x480 si adatta comodamente a 24 GB. Smette di adattarsi quando le persone aumentano la dimensione del batch per la velocità, o gli forniscono i frame 1920x1080 che un esempio di registrazione lerobot mostra. Due backbone ResNet-18 a 1080p hanno un profilo di memoria molto diverso. Riduci --batch_size a 4 prima di noleggiare una scheda più grande. Vedi memoria insufficiente durante l'addestramento.
Durata: circa 5 ore su una RTX 2080 Ti da 11 GB nel paper, alcune ore per 100k passi secondo la pagina ACT di lerobot, da 2 a 5 ore sul livello da 24 GB di AY-Robots. Non interrompere prematuramente. Il README del repository di riferimento afferma che una policy a scatti o in pausa di solito necessita solo di più addestramento, perché il successo e la fluidità continuano a migliorare dopo che la perdita si stabilizza: per i dati del mondo reale sono necessari almeno 5000 epoche, o 3-4 volte la lunghezza dopo il plateau.
lerobot-train \
--config_path=outputs/train/act_so100_cube/checkpoints/last/pretrained_model/train_config.json \
--resume=trueEsecuzione della policy addestrata sul braccio
Il deployment utilizza lerobot-rollout. Le chiavi della telecamera devono corrispondere a quelle registrate: una policy addestrata su front e wrist non accetterà cam0 e cam1, e rename_map non è d'aiuto, poiché richiede un checkpoint pre-addestrato. La stringa del task può essere omessa; l'esempio di lerobot la indica come skippabile per 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=60La valutazione veniva eseguita tramite lerobot-record --policy.path=.... Nella versione 0.6.x è lerobot-rollout con un selettore --strategy.type: base, sentry (registrazione con caricamento automatico), highlight (buffer circolare salvato tramite pressione di tasto), dagger (human in the loop) ed episodic. Al 23 agosto 2026, la pagina di documentazione ACT afferma ancora "usando il comando lerobot-record" direttamente sopra un blocco che esegue lerobot-rollout. Segui il comando, non la frase.
Per fissare un checkpoint anziché il modello finale, aggiungi --policy.pretrained_revision. Ciò richiede che l'esecuzione sia iniziata con --save_checkpoint_to_hub=true, disattivato per impostazione predefinita: senza di esso lerobot carica solo il modello finale e nient'altro. Con esso, ogni checkpoint è etichettato con il suo passo riempito di zeri, quindi --policy.pretrained_revision=060000 recupera quello del passo 60000. Confrontarlo con quello del passo 100000 sul braccio reale è l'esperimento più economico disponibile.
Due percorsi allo stesso checkpoint
Tutto quanto sopra è il percorso manuale e funziona. Il percorso tramite piattaforma scambia il controllo con il non dover possedere una GPU o un ambiente Python.
- Installa lerobot 0.6.x con
core_scripts,training,feetech, ffmpeg. - Trova le porte, imposta gli ID dei motori, calibra entrambi i bracci, registra 50 episodi.
- Riproduci alcuni episodi per confermare che i dati contengano il compito.
- Noleggia o possiedi una GPU da 24 GB, abbina CUDA e PyTorch, esegui
lerobot-train --policy.type=act. - Attendi qualche ora, quindi esegui
lerobot-rolloutsulla macchina collegata al braccio.
# 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=cudaControllo totale: modifica configuration_act.py, aggiungi una telecamera, fork del trainer. Per la ricerca piuttosto che per la consegna di un compito, una piattaforma è una distrazione.
- Registra con il client desktop, o porta un ID repo di Hugging Face o un dataset locale.
- Apri la guida ACT su SO-100 e scegli modello e dataset. I valori predefiniti sono quelli di lerobot; chunkSize, nActionSteps, seed e logFreq sono modificabili.
- Il backend noleggia una GPU dimensionata in base alla VRAM e scrive i checkpoint nell'object storage.
/api/inference/podserve quindi la policy al client robot locale. Un watchdog inattivo distrugge il pod, quindi nulla viene fatturato silenziosamente.- Le stesse operazioni esistono nella CLI, nel server MCP e nella documentazione di training.
Non corregge i tuoi dati: un dataset con una telecamera spostata si addestra esattamente male qui, e il modulo non può rilevarlo. Né risolve il problema della latenza. Il ciclo di controllo è di 20-485 ms per passo d'azione, con tempi di andata e ritorno su internet pubblico in aggiunta, e ACT è il più penalizzato perché il suo passo è il più breve: 60 ms è un rallentamento del 12 percento sui 485 ms di Pi0.5 ma quattro volte il passo sui 20 ms di ACT. L'inferenza remota è adatta per operazioni lente di pick and place, non per movimenti reattivi veloci.

Cosa va effettivamente storto
Quasi nessuno dei problemi risiede nel comando di addestramento. Sono nelle cose che lo circondano, ordinate in base alla frequenza con cui si presentano per la prima volta.
| Sintomo | Causa comune | Pagina |
|---|---|---|
| lerobot-find-port shows nothing | Driver, cavo o permessi del nodo | braccio non rilevato |
| Camera missing at record time | Indice cambiato al riavvio, o due telecamere su un unico controller USB | telecamera non rilevata |
| Training rejects the dataset | ACT richiede v3.0, GR00T necessita di v2.1 | dataset rifiutato come v3 |
| CUDA out of memory | Dimensione del batch aumentata, o frame 1080p invece di 480p | memoria esaurita durante l'addestramento |
| Loss looks great, arm does nothing | I dati non contengono il compito, o una telecamera si è spostata | la perdita diminuisce, la policy non fa nulla |
| Jerky motion or a pause mid-episode | Sotto-addestrato, un blocco al confine del chunk, o una chiamata di inferenza scaduta | la policy si blocca a metà movimento |
Due righe meritano enfasi. ACT si addestra su LeRobot v3.0 mentre il loader di GR00T si blocca su di esso e richiede v2.1, quindi un dataset che addestra ACT può far fallire un'esecuzione di GR00T. E l'ultima riga presenta due soluzioni: gli autori di ACT rispondono al movimento a scatti con più addestramento, mentre con n_action_steps a 100 un vero e proprio blocco si verifica al confine di un chunk, una pausa visibile ogni 3.3 secondi a 30 fps. Altre due cose da sapere: un singolo giunto inattivo è solitamente un ID del servo che non è mai stato scritto, e una pinza che si avvicina ma non si chiude mai significa un intervallo di presa troppo limitato nelle dimostrazioni. Indice completo: le pagine delle modalità di errore.
Costo di un'esecuzione
| Livello | Modelli | Tempo di esecuzione | Prezzo per ora | Costo per esecuzione |
|---|---|---|---|---|
| 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 |
Questo è l'argomento per iniziare con ACT anche se in seguito si desidera un VLA. Un'esecuzione ACT fallita costa il prezzo di un caffè e ti dice entro poche ore se il tuo dataset contiene il compito. Un'esecuzione GR00T fallita costa quattro volte tanto per la stessa lezione. Passare a GR00T N1.7 o SmolVLA in seguito è un cambio di forma, non una ricostruzione. Contesto: modelli visione-linguaggio-azione, la guida completa SO-100, addestra la tua prima policy e apprendimento per imitazione. Nessun braccio? La pagina live trasmette un vero SO-100 da guidare senza registrarsi.
Addestra ACT sul tuo SO-100
La guida per questa esatta combinazione: impostazioni predefinite, livello GPU e costo di un'esecuzione. Scegli il dataset, il backend noleggia la scheda e scrive i checkpoint.
Apri la guida all'addestramentoEsiste un modello ACT pre-addestrato che posso invece ottimizzare?▾
No. ACT non ha un modello di base; esiste solo dopo averlo addestrato. Questo non è un difetto negli strumenti, è ciò che ACT è: il paper addestra una policy da zero per ogni compito. Per un checkpoint del fornitore, usa GR00T N1.7 o Pi0.5.
Di quanti episodi ho realmente bisogno?▾
50: ciò che ALOHA ha registrato per compito (100 per Thread Velcro, il più difficile) e il minimo di AY-Robots. lerobot consiglia circa 10 per posizione dell'oggetto, telecamere fisse, presa coerente. Cinquanta episodi puliti battono cento in cui la telecamera si è mossa.
Dovrei cambiare chunk_size da 100?▾
Di solito no. L'ablazione sale dall'1 percento a k = 1 al 44 percento a k = 100 e si attenua dopo, quindi 100 si trova vicino al massimo. Se il braccio si impegna troppo a lungo, abbassa invece n_action_steps: a 30 fps, 25 ri-interrogazioni ogni 0.8 secondi.
Quanto tempo richiede un'esecuzione di addestramento e posso fermarla in anticipo?▾
Da due a cinque ore su una scheda da 24 GB per 100000 passi. I checkpoint vengono salvati ogni 20000 passi e --resume=true riprende un'esecuzione, quindi fermarsi in anticipo è sicuro. Ma non al primo tratto piatto: la fluidità migliora dopo che la perdita si stabilizza.
La perdita è diminuita e il braccio fallisce ancora. E adesso?▾
Quasi sempre il dataset. Riproduci gli episodi registrati sul braccio: se la riproduzione non esegue il compito, i dati non lo contengono. Poi controlla se qualcosa si è mosso, specialmente una telecamera. ACT non ha priori, quindi una spinta sull'episodio 21 è 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