La matrice di addestramento AY-Robots con cinque righe di policy e quattro colonne di bracci robotici, ogni cella collegata a una guida di addestramento specifica per modello e braccio
ACTSO-100lerobotapprendimento per imitazioneaddestramento di policy

Come Addestrare ACT su SO-100 da Zero

AY-Robots ResearchAugust 23, 202616 min di lettura

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.
Quali versioni descrive

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.

IperparametroPaper ALOHA, Tabella IIIlerobot su main
tasso di apprendimento1e-5optimizer_lr = 1e-5
dimensione del batch8batch_size = 8, in TrainPipelineConfig not ACTConfig
strati encoder / decoder4 / 7n_encoder_layers = 4 / n_decoder_layers = 1
dimensione del chunk k100chunk_size = 100
dimensione latente di zassente; Fig. 11 mostra una proiezione da 32 a 512latent_dim = 32
ensembling temporaleassente; --temporal_agg nel codice di riferimentotemporal_ensemble_coeff = None
La riga del layer del decodificatore non è un errore di battitura

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_size e solleva un ValueError se 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.

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
Accorciare la parte eseguita del chunk senza accorciare la previsione.
La trappola dell'ensembling temporale

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

PolicyFamigliaParametriPer passoLivello GPUEpisodi minimiDataset
[object Object]Transformer a chunking, da zero~80 M20 msRTX 4090 / 24 GB50LeRobot v3.0
[object Object]VLA compatto~450 M245 msRTX 4090 / 24 GB30LeRobot v3.0
[object Object]Base VLA, testa di diffusione~3 B (~40 M trained)152 msA100 / H100 80 GB50LeRobot v2.0 or v2.1
[object Object]Base VLA, predecessore~3 B165 msA100 / H100 80 GB50LeRobot v2.0 or v2.1
[object Object]VLA con flow-matching, vedi ~3 B, PaliGemma backbone485 msA100 / H100 80 GB50LeRobot v3.0
La pagina delle policy di AY-Robots che mostra una tabella comparativa di ACT, SmolVLA, GR00T N1.5, GR00T N1.7 e Pi0.5 con il conteggio dei parametri, i requisiti della GPU, la latenza di inferenza e il numero minimo di episodi
La tabella /policies: ACT ha il minor numero di parametri e il tempo per passo più breve.
Addestramento di ACT da zero
Vantaggi
  • 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.
Compromessi
  • 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.

BraccioServiTensioneCosto dei componentiStato
SO-100Feetech STS32157.4 V~110 to 150 EURSupporto completo, braccio di riferimento
SO-101Feetech STS32157.4 V~130 to 170 EURSupporto completo
Koch v1.1Dynamixel XL330 / XL4305 V and 12 V rails~250 to 350 EURCompatibile
LeKiwiFeetech STS3215 (arm)7.4 V arm, 12 V base~400 to 500 EURCompatibile
7.4 V, non 12 V

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.

  1. 1
    Installa lerobot con gli extra corretti

    La registrazione richiede core_scripts, l'addestramento training, i servi Feetech 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
    Trova 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.

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

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

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

    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
    Registra 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. n termina un episodio, r registra di nuovo, q si ferma e codifica.

    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
La pagina del tutorial di registrazione di AY-Robots che spiega come acquisire un dataset in formato LeRobot da una sessione di teleoperazione
Il tutorial di registrazione. Il client desktop scrive lo stesso layout di lerobot-record.
La trappola che ti fa perdere una giornata: un dataset inconsistente

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

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
Riproduzione dell'episodio 0. Se fallisce, fermarsi e registrare di nuovo.

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

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
Il comando di addestramento dalla documentazione di lerobot 0.6.x, su un dataset SO-100.

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

ImpostazioneDefault lerobotForm ACT AY-RobotsCommento
dimensione del batch88Abbassalo per primo se raggiungi i limiti della VRAM.
tasso di apprendimento1e-51e-5Come nel paper ALOHA.
passi massimi100000100000Circa dove un set di 50 episodi smette di migliorare.
accumulo del gradiente11, non applicabileCambia invece la dimensione del batch.
seed1000espostoIl punto di ingresso tyro di GR00T non ha un seed; le esecuzioni ACT sono quelle riproducibili.
chunk_size / n_action_steps100 / 100100 / 100, modificabileOrizzonte di previsione ed esecuzione. Abbassa il secondo, non il primo.
frequenza checkpoint20000non espostosaveSteps è una manopola GR00T qui.
La memoria insufficiente è un problema di dimensione del batch, non di scheda

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.

bash
lerobot-train \
  --config_path=outputs/train/act_so100_cube/checkpoints/last/pretrained_model/train_config.json \
  --resume=true
Riprendere un'esecuzione interrotta dal suo ultimo checkpoint.

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

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
Rollout autonomo senza registrazione. Usa --strategy.type=sentry per registrare gli episodi di valutazione.
Questo comando è stato rinominato di recente, quindi i vecchi tutorial non sono allineati

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

  1. Installa lerobot 0.6.x con core_scripts, training, feetech, ffmpeg.
  2. Trova le porte, imposta gli ID dei motori, calibra entrambi i bracci, registra 50 episodi.
  3. Riproduci alcuni episodi per confermare che i dati contengano il compito.
  4. Noleggia o possiedi una GPU da 24 GB, abbina CUDA e PyTorch, esegui lerobot-train --policy.type=act.
  5. Attendi qualche ora, quindi esegui lerobot-rollout sulla macchina collegata al braccio.
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
Cosa ti offre questo percorso

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

La matrice di training di AY-Robots con cinque righe di policy e quattro colonne di bracci robotici, dove ogni cella si collega alla guida di training specifica per quella combinazione di modello e braccio
La matrice su /train. La riga ACT contro la colonna SO-100 è la guida di questo articolo.

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.

SintomoCausa comunePagina
lerobot-find-port shows nothingDriver, cavo o permessi del nodobraccio non rilevato
Camera missing at record timeIndice cambiato al riavvio, o due telecamere su un unico controller USBtelecamera non rilevata
Training rejects the datasetACT richiede v3.0, GR00T necessita di v2.1dataset rifiutato come v3
CUDA out of memoryDimensione del batch aumentata, o frame 1080p invece di 480pmemoria esaurita durante l'addestramento
Loss looks great, arm does nothingI dati non contengono il compito, o una telecamera si è spostatala perdita diminuisce, la policy non fa nulla
Jerky motion or a pause mid-episodeSotto-addestrato, un blocco al confine del chunk, o una chiamata di inferenza scadutala 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

LivelloModelliTempo di esecuzionePrezzo per oraCosto per esecuzione
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

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'addestramento
Esiste 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.

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started