La matrice d'entraînement AY-Robots avec cinq lignes de politiques et quatre colonnes de bras robotiques, chaque cellule renvoyant à un guide d'entraînement spécifique pour un modèle et un bras.
ACTSO-100lerobotapprentissage par imitationentraînement de politique

Comment entraîner ACT sur le SO-100 à partir de zéro

AY-Robots ResearchAugust 23, 202616 min de lecture

Entraînez un Action Chunking Transformer à partir de zéro sur un SO-100 avec lerobot : la configuration act, chunk_size et n_action_steps, le programme d'entraînement de 100000 étapes, 20 ms d'inférence.

ACT fait figure d'exception parmi les politiques SO-100. GR00T N1.7 et N1.5 partent de nvidia/GR00T-N1.7-3B et nvidia/GR00T-N1.5-3B, Pi0.5 de lerobot/pi05_base. ACT part de zéro : il n'y a pas de point de contrôle de base, car ce n'est pas un modèle de fondation. C'est un transformeur d'environ 80 millions de paramètres que vous entraînez à partir de zéro sur une seule tâche, sur votre bras, sous votre éclairage.

C'est aussi pourquoi il exécute une étape de contrôle en 20 ms là où un VLA de 3 milliards de paramètres nécessite 152 à 485 ms, et coûte 1 à 3 USD par exécution au lieu de 4 à 12. Ce guide décrit la voie manuelle avec lerobot sur un SO-100 : l'enregistrement, la configuration act, ce que chunk_size et n_action_steps contrôlent, le programme de 100000 étapes, le déploiement. Ensuite, le même travail sur AY-Robots, y compris là où la plateforme n'aide pas.

Ce qu'il faut savoir

  • ACT s'entraîne à partir de zéro : pas de modèle de base, pas de pré-entraînement, pas d'entrée linguistique. Un point de contrôle, une tâche.
  • L'article : environ 80 M de paramètres, environ 5 heures sur une RTX 2080 Ti de 11 Go, inférence en 0,01 s.
  • Paramètres par défaut de lerobot : chunk_size 100, n_action_steps 100, batch 8, lr 1e-5, 100000 steps, seed 1000.
  • Sur AY-Robots : 20 ms par étape, le plus rapide des cinq. 50 épisodes minimum, LeRobot v3.0, une carte de 24 Go, 1 à 3 USD par exécution.
  • Il gagne sur une tâche qu'il a vue, et perd dès que vous voulez un conditionnement linguistique.
Quelles versions cela décrit

Vérifié le 23 août 2026 par rapport à lerobot 0.6.x: pyproject.toml sur main indique version = "0.6.2", le plus récent tag v0.6.1, 3 août 2026. Un tutoriel commençant par python lerobot/scripts/train.py est antérieur aux points d'entrée de la console lerobot-train, lerobot-record et lerobot-rollout.

Ce qu'est réellement ACT

Action Chunking with Transformers est issu de l'article ALOHA, Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware, par Zhao, Kumar, Levine et Finn, arXiv, 23 avril 2023. Le dispositif enregistre à 50 Hz avec quatre webcams diffusant en 480x640 à 30 fps : deux sur les pinces, une en haut, une à l'avant. L'abstract revendique six compétences avec 80 à 90 pour cent de succès, parmi lesquelles l'ouverture d'un gobelet à condiments translucide et l'insertion d'une batterie, à partir de 10 minutes de démonstrations.

Le corps de l'article est plus utile lors de la planification d'une session d'enregistrement : 50 démonstrations par tâche, sauf pour Thread Velcro à 100, ce qui représente 10 à 20 minutes de données et 30 à 60 minutes de temps réel une fois les réinitialisations comptées. Le succès n'est pas uniforme non plus : Thread Velcro se termine à 20 pour cent, Put On Shoe à 92, Cup Open 84, Prep Tape 64.

HyperparamètreArticle ALOHA, Tableau IIIlerobot sur main
taux d'apprentissage1e-5optimizer_lr = 1e-5
taille du lot8batch_size = 8, in TrainPipelineConfig not ACTConfig
couches encodeur / décodeur4 / 7n_encoder_layers = 4 / n_decoder_layers = 1
taille de chunk k100chunk_size = 100
dimension latente de zabsent ; la Fig. 11 montre une projection de 32 à 512latent_dim = 32
agrégation temporelleabsent ; --temporal_agg dans le code de référencetemporal_ensemble_coeff = None
La ligne des couches de décodeur n'est pas une faute de frappe

L'article mentionne 7 couches de décodeur, lerobot en livre 1, délibérément. Le commentaire dans configuration_act.py indique que l'implémentation originale contient un bug signifiant que seule la première couche est utilisée, citant l'issue 25 dans tonyzhaozh/act : la tête d'action lit hs[0], donc les sept couches s'exécutent mais seule la première sortie atteint la prédiction. Cette issue est ouverte et sans réponse depuis le 23 avril 2024. lerobot correspond au comportement qui a produit les résultats publiés, et non au nombre imprimé. Augmentez --policy.n_decoder_layers et vous entraînerez un modèle que l'article n'a jamais évalué.

Le découpage d'actions est le concept central

Le clonage comportemental ordinaire mappe une observation à une action, et les erreurs s'accumulent : une déviation met le bras hors distribution, produisant une action pire, et trente étapes plus tard, la pince n'est nulle part près de l'objet. Découpage d'actions prédit k actions à la fois et les exécute, réduisant l'horizon effectif d'un facteur k. Cela gère également un inconvénient spécifique aux données humaines : les téléopérateurs font des pauses, et une politique markovienne à une seule étape ne peut pas modéliser une pause qui dépend de ce qui a précédé.

L'article ablate k plutôt que de l'affirmer. Avec l'ensemble temporel désactivé, en moyenne sur quatre configurations, le succès passe de 1 pour cent à k = 1 à 44 pour cent à k = 100, puis diminue à 200 et 400 à mesure que la politique approche du contrôle en boucle ouverte. Cette courbe explique pourquoi la valeur par défaut est 100.

  • chunk_size : nombre d'actions futures que le décodeur prédit par passe avant. Par défaut 100.
  • n_action_steps : nombre d'actions que vous exécutez avant de réinterroger. Par défaut 100, donc lerobot exécute l'intégralité du chunk en boucle ouverte.
  • lerobot valide n_action_steps <= chunk_size et lève une ValueError si l'ordre est inversé.

Ce qui importe opérationnellement est le chunk_size divisé par la fréquence d'images. Aux 30 ips utilisés par les exemples SO-100 de lerobot, un chunk de 100 actions représente environ 3,3 secondes à partir d'une observation. Si la tâche nécessite une correction dans cette fenêtre, diminuez n_action_steps, pas chunk_size : vous conservez la prédiction longue et ré-observez plus souvent.

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
Raccourcir la partie exécutée du chunk sans raccourcir la prédiction.
Le piège de l'ensemblage temporel

Définissez --policy.temporal_ensemble_coeff et lerobot exigera n_action_steps = 1, levant une NotImplementedError sinon. L'ensemblage interroge la politique à chaque pas de temps et fusionne les prédictions qui se chevauchent pour ce pas de temps avec des poids w_i = exp(-m * i), le plus ancien obtenant w_0. L'article l'estime à 3,3 % pour ACT : réel mais modeste, et cela multiplie le nombre d'inférences par la longueur du chunk. Abordable à 20 ms par étape, pas à 485 ms. Voir la latence d'inférence.

Quand ACT surpasse un modèle de fondation

Les cinq politiques entraînables côte à côte, avec les chiffres qu'AY-Robots mesure et utilise pour dimensionner le GPU qu'il loue.

PolitiqueFamilleParamètresPar étapeNiveau GPUÉpisodes min.Jeu de données
ACTTransformateur de découpage, à partir de zéro~80 M20 msRTX 4090 / 24 GB50LeRobot v3.0
SmolVLAVLA compact~450 M245 msRTX 4090 / 24 GB30LeRobot v3.0
GR00T N1.7Fondation VLA, tête de diffusion~3 B (~40 M entraînés)152 msA100 / H100 80 GB50LeRobot v2.0 or v2.1
GR00T N1.5Fondation VLA, prédécesseur~3 B165 msA100 / H100 80 GB50LeRobot v2.0 or v2.1
Pi0.5VLA par appariement de flux, voir appariement de flux~3 B, PaliGemma backbone485 msA100 / H100 80 GB50LeRobot v3.0
La page des politiques d'AY-Robots montrant un tableau comparatif d'ACT, SmolVLA, GR00T N1.5, GR00T N1.7 et Pi0.5 avec le nombre de paramètres, les exigences GPU, la latence d'inférence et le nombre minimum d'épisodes
Le tableau /policies : ACT a le plus petit nombre de paramètres et le temps d'étape le plus court.
Entraîner ACT à partir de zéro
Avantages
  • 20 ms par étape d'action, le plus rapide des cinq, sur une carte de 24 Go et non une A100.
  • 1 à 3 USD par exécution contre 4 à 12 pour la classe 3 B.
  • Précis sur les tâches à fort contact qu'il a vues : 88 et 96 pour cent sur Slide Ziploc et Slot Battery, où les méthodes antérieures n'ont jamais dépassé la première étape.
Compromis
  • Pas de conditionnement linguistique : la chaîne de tâche est ignorée, donc un point de contrôle correspond à une tâche.
  • Pas de priors sémantiques : tout ce qu'il sait provient de vos 50 épisodes.
  • Généralisation étroite : déplacez une caméra et vous devez réentraîner.
  • Il échoue silencieusement : la perte diminue, le bras ne fait rien, les journaux ne disent rien.
  • L'avantage de la vitesse n'est utile que si l'inférence est située à côté des servomoteurs.

Choisissez ACT lorsque la tâche et la scène sont fixes et que le mouvement doit être rapide et précis. Choisissez un lorsqu'un point de contrôle doit couvrir plusieurs instructions. Deux pages comparent directement la décision : et . Pour les benchmarks publiés, lie chaque chiffre à sa source.

Ce dont vous avez besoin avant de commencer

Un bras suiveur, un bras leader pour la , au moins une caméra, un GPU de 24 Go. ACT ne lit que les images et les positions des articulations. Deux caméras constituent le point idéal : une vue frontale fixe pour savoir où se trouvent les objets, une caméra de poignet pour ce que l' est sur le point de toucher, comme sur ALOHA.

BrasServosTensionCoût des piècesStatut
SO-100Feetech STS32157.4 V~110 to 150 EURSupport complet, bras de référence
SO-101Feetech STS32157.4 V~130 to 170 EURSupport complet
Koch v1.1Dynamixel XL330 / XL4305 V and 12 V rails~250 to 350 EURCompatible
LeKiwiFeetech STS3215 (arm)7.4 V arm, 12 V base~400 to 500 EURCompatible
7.4 V, pas 12 V

Les SO-100 et SO-101 utilisent des servos Feetech STS3215 sur un rail 7.4 V. Les alimenter en 12 V les détruit, assez discrètement pour que les gens blâment d'abord le logiciel, et une alimentation Koch 12 V s'adapte physiquement à une carte SO-100. Vérifiez l'étiquette. Symptômes : servo ne répond pas, le bras tressaute puis s'affaisse. Voir aussi SO-100 vs SO-101.

Du bras nu au jeu de données enregistré

Le flux ci-dessous est lerobot 0.6.x. Passez cette étape si vous avez un bras calibré et un jeu de données. Sinon, le guide de démarrage du SO-100 couvre l'assemblage, le tutoriel d'enregistrement couvre la capture et la documentation des jeux de données le format.

  1. 1
    Installer lerobot avec les bons extras

    L'enregistrement nécessite core_scripts, l'entraînement training, les servomoteurs 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
    Trouver le port USB de chaque bras

    Exécutez-le avec les deux bras branchés, en débranchant l'un d'eux lorsque vous y êtes invité. Sous Linux, vous devrez peut-être ouvrir les permissions du nœud.

    bash
    lerobot-find-port
    # on Linux, if the port exists but is unreadable:
    sudo chmod 666 /dev/ttyACM0
  3. 3
    Définir les identifiants des moteurs et le débit en bauds

    Sur le SO-100, cela se fait avant l'assemblage : contrairement au SO-101, les connecteurs sont inaccessibles une fois construit. Le script parcourt le bus un moteur à la fois à partir de la pince, écrivant les identifiants dans l'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
    Calibrer les deux bras

    Réglez chaque articulation au milieu de sa plage, appuyez sur Entrée, puis balayez chacune sur toute sa plage. La calibration permet à une politique entraînée sur un bras de fonctionner sur un autre. Réutilisez le même 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
    Téléopérer une fois avec les caméras allumées

    La règle empirique de lerobot : vous devriez être capable d'effectuer la tâche en regardant uniquement les images de la caméra. Si vous ne le pouvez pas, ACT non plus. Cela permet de détecter plus de mauvais jeux de données que le débogage ultérieur.

    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
    Enregistrer 50 épisodes

    50 est le minimum d'AY-Robots et ce qu'ALOHA utilisait par tâche. lerobot conseille 10 par emplacement d'objet, caméras fixes, préhension cohérente. n termine un épisode, r réenregistre, q arrête et encode.

    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
The AY-Robots recording tutorial page explaining how to capture a LeRobot-format dataset from a teleoperation session
Le tutoriel d'enregistrement. Le client de bureau écrit la même disposition que lerobot-record.
Le piège qui fait perdre une journée : un jeu de données incohérent

ACT n'a pas de connaissances préalables sur lesquelles s'appuyer, donc chaque incohérence devient permanente. Les trois plus coûteuses : une caméra légèrement déplacée entre l'épisode 20 et 21, une lumière qui a changé parce que vous avez enregistré la moitié de l'ensemble l'après-midi, une préhension effectuée de deux manières différentes. Chacune donne une courbe de perte d'apparence parfaite et un bras qui va au mauvais endroit. Voir la perte diminue, la politique ne fait rien, la politique ne fonctionne que dans une seule configuration et collecter des données d'entraînement de haute qualité.

Avant l'entraînement, rejouez au moins cinq épisodes. Le format de jeu de données LeRobot stocke les flux de caméra, les états des articulations et les actions par épisode, et la relecture renvoie ces actions au bras. Si la relecture n'effectue pas la tâche, les données ne la contiennent pas et l'entraînement ne l'inventera pas.

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
Relecture de l'épisode 0. En cas d'échec, arrêtez et réenregistrez.

Entraînement de la politique ACT

Ceci est la commande complète. Tout ce qui est spécifique à ACT est déjà une valeur par défaut, c'est pourquoi la page ACT de lerobot recommande de commencer avec celles-ci.

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
La commande d'entraînement des documents lerobot 0.6.x, sur un jeu de données SO-100.

--policy.type=act charge ACTConfig, qui s'adapte au nombre de moteurs et de caméras enregistrés par votre jeu de données, de sorte que vous n'avez jamais à déclarer la forme de l'observation. --wandb.enable=true est facultatif et en vaut la peine : la courbe de perte est le seul signal peu coûteux dans une exécution de 100000 étapes. Le calendrier provient de la configuration d'entraînement de lerobot, et non d'ACTConfig : 100000 étapes, lot de 8, graine 1000, un point de contrôle toutes les 20000 étapes, journalisation toutes les 200.

Une exécution complète laisse cinq répertoires de points de contrôle, de 020000 à 100000, plus un lien symbolique last. Gardez-les tous : la meilleure politique n'est souvent pas la dernière.

ParamètreValeur par défaut lerobotFormulaire ACT AY-RobotsCommentaire
taille de lot88Diminuez-la en premier si vous atteignez les limites de VRAM.
taux d'apprentissage1e-51e-5Identique à celui du papier ALOHA.
nombre maximal d'étapes100000100000Environ là où un ensemble de 50 épisodes cesse de s'améliorer.
accumulation de gradient11, ne s'applique pasModifiez plutôt la taille du lot.
graine1000exposéeLe point d'entrée tyro de GR00T n'a pas de graine ; les exécutions ACT sont les reproductibles.
taille de chunk / nombre d'étapes d'action100 / 100100 / 100, modifiableHorizon de prédiction et d'exécution. Diminuez le second, pas le premier.
fréquence des points de contrôle20000non exposéesaveSteps est un paramètre GR00T ici.
La mémoire insuffisante est un problème de taille de lot, pas de carte

ACT avec une taille de lot de 8 et deux caméras 640x480 tient confortablement sur 24 Go. Il cesse de tenir lorsque les gens augmentent la taille du lot pour la vitesse, ou lui fournissent les images 1920x1080 qu'un exemple d'enregistrement lerobot montre. Deux backbones ResNet-18 à 1080p ont un profil de mémoire très différent. Diminuez --batch_size à 4 avant de louer une carte plus grande. Voir mémoire insuffisante lors de l'entraînement.

Durée : environ 5 heures sur une RTX 2080 Ti de 11 Go dans l'article, quelques heures pour 100k étapes selon la page ACT de lerobot, 2 à 5 heures sur le niveau 24 Go d'AY-Robots. Ne l'interrompez pas prématurément. Le README du dépôt de référence indique qu'une politique saccadée ou en pause nécessite généralement plus d'entraînement, car le succès et la fluidité continuent de s'améliorer après que la perte se stabilise : pour les données réelles, il faut au moins 5000 époques, soit 3 à 4 fois la durée après le plateau.

bash
lerobot-train \
  --config_path=outputs/train/act_so100_cube/checkpoints/last/pretrained_model/train_config.json \
  --resume=true
Reprise d'une exécution interrompue à partir de son dernier point de contrôle.

Exécution de la politique entraînée sur le bras

Le déploiement utilise lerobot-rollout. Les clés de caméra doivent correspondre à celles enregistrées : une politique entraînée sur front et wrist n'acceptera pas cam0 et cam1, et rename_map n'est d'aucune aide, car il nécessite un point de contrôle pré-entraîné. La chaîne de tâche peut être omise ; l'exemple de lerobot la marque comme facultative pour 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
Déploiement autonome sans enregistrement. Utilisez --strategy.type=sentry pour enregistrer les épisodes d'évaluation.
Cette commande a été renommée récemment, les anciens tutoriels peuvent donc être en désaccord

L'évaluation s'effectuait auparavant via lerobot-record --policy.path=.... Dans la version 0.6.x, il s'agit de lerobot-rollout avec un sélecteur --strategy.type : base, sentry (enregistrement avec téléchargement automatique), highlight (tampon circulaire sauvegardé par frappe), dagger (humain dans la boucle) et episodic. Au 23 août 2026, la page de documentation ACT indique toujours "using the lerobot-record command" juste au-dessus d'un bloc qui exécute lerobot-rollout. Suivez la commande, pas la phrase.

Pour épingler un point de contrôle plutôt que le modèle final, ajoutez --policy.pretrained_revision. Cela nécessite que l'exécution ait commencé avec --save_checkpoint_to_hub=true, désactivé par défaut : sans cela, lerobot pousse le modèle final et rien d'autre. Avec cela, chaque point de contrôle est étiqueté avec son étape complétée par des zéros, donc --policy.pretrained_revision=060000 récupère celui de l'étape 60000. Le comparer à 100000 sur le bras réel est l'expérience la moins chère disponible.

Deux chemins vers le même point de contrôle

Tout ce qui précède est la voie manuelle et cela fonctionne. La voie de la plateforme échange le contrôle contre l'absence de GPU ou d'environnement Python.

  1. Installez lerobot 0.6.x avec core_scripts, training, feetech, ffmpeg.
  2. Trouvez les ports, définissez les identifiants des moteurs, calibrez les deux bras, enregistrez 50 épisodes.
  3. Rejouez quelques épisodes pour confirmer que les données contiennent la tâche.
  4. Louez ou possédez un GPU de 24 Go, faites correspondre CUDA et PyTorch, exécutez lerobot-train --policy.type=act.
  5. Attendez quelques heures, puis exécutez lerobot-rollout sur la machine au niveau du bras.
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
Ce que cette approche vous offre

Contrôle total : modifiez configuration_act.py, ajoutez une caméra, forkez l'entraîneur. Pour la recherche plutôt que pour la livraison d'une tâche, une plateforme est une distraction.

La matrice d'entraînement AY-Robots avec cinq lignes de politiques et quatre colonnes de bras robotiques, où chaque cellule renvoie au guide d'entraînement spécifique pour cette combinaison de modèle et de bras
La matrice sur /train. La ligne ACT par rapport à la colonne SO-100 est le guide de cet article.

Ce qui ne va pas réellement

Presque aucune des difficultés ne réside dans la commande d'entraînement. Elles se trouvent dans les éléments qui l'entourent, classés par la fréquence à laquelle ils posent problème la première fois.

SymptômeCause habituellePage
lerobot-find-port ne montre rienPilote, câble ou permissions de nœudbras non détecté
Caméra manquante au moment de l'enregistrementIndex modifié au redémarrage, ou deux caméras sur un seul contrôleur USBcaméra non détectée
L'entraînement rejette le jeu de donnéesACT veut v3.0, GR00T a besoin de v2.1jeu de données rejeté comme v3
CUDA manque de mémoireTaille de lot augmentée, ou images 1080p au lieu de 480pmanque de mémoire à l'entraînement
La perte semble bonne, le bras ne fait rienLes données ne contiennent pas la tâche, ou une caméra a bougéla perte diminue, la politique ne fait rien
Mouvement saccadé ou pause en milieu d'épisodeSous-entraîné, un blocage à la limite d'un segment, ou un appel d'inférence expiréla politique se fige en plein mouvement

Deux lignes méritent d'être soulignées. ACT s'entraîne sur LeRobot v3.0 tandis que le chargeur de GR00T plante avec et nécessite v2.1, donc un jeu de données qui entraîne ACT peut faire échouer une exécution de GR00T. Et la dernière ligne propose deux solutions : les auteurs d'ACT répondent aux mouvements saccadés par plus d'entraînement, tandis qu'avec n_action_steps à 100, un véritable blocage se produit à la limite d'un segment, une pause visible toutes les 3.3 seconds à 30 fps. Deux autres choses à savoir : une seule articulation morte est généralement un ID de servo qui n'a jamais été écrit, et une pince qui s'approche mais ne se ferme jamais signifie une plage de pince trop faible dans les démonstrations. Index complet : les pages des modes de défaillance.

Ce que coûte une exécution

NiveauModèlesDurée d'exécutionPrix par heureCoût par exécution
RTX 4090 / 24 GBACT, SmolVLA2 à 5 heures0.30 to 0.60 USDenviron 1 à 3 USD
A100 80 GB / H100GR00T N1.7, GR00T N1.5, Pi0.53 à 6 heures1.20 to 2.00 USDenviron 4 à 12 USD

C'est l'argument pour commencer avec ACT même si vous souhaitez un VLA plus tard. Une exécution ACT échouée coûte le prix d'un café et vous indique en quelques heures si votre ensemble de données contient la tâche. Une exécution GR00T échouée coûte quatre fois plus cher pour la même leçon. Passer à GR00T N1.7 ou SmolVLA par la suite est un changement de forme, pas une reconstruction. Contexte : modèles vision-langage-action, le guide complet du SO-100, entraîner votre première politique et apprentissage par imitation. Pas de bras ? La page en direct diffuse un vrai SO-100 à piloter sans inscription.

Entraîner ACT sur votre SO-100

Le guide pour cette combinaison exacte : les valeurs par défaut, le niveau de GPU et le coût d'une exécution. Choisissez l'ensemble de données, le backend loue la carte et écrit les points de contrôle.

Ouvrir le guide d'entraînement
Existe-t-il un modèle ACT pré-entraîné que je peux affiner à la place ?

Non. ACT n'a pas de modèle de base ; il n'existe qu'après que vous l'ayez entraîné. Ce n'est pas une lacune dans les outils, c'est ce qu'est ACT : l'article entraîne une politique à partir de zéro pour chaque tâche. Pour un point de contrôle fournisseur, utilisez GR00T N1.7 ou Pi0.5.

De combien d'épisodes ai-je réellement besoin ?

50 : ce qu'ALOHA a enregistré par tâche (100 pour Thread Velcro, la plus difficile) et le minimum d'AY-Robots. lerobot conseille environ 10 par emplacement d'objet, caméras fixes, prise cohérente. Cinquante épisodes propres valent mieux que cent où la caméra a bougé.

Dois-je modifier chunk_size de 100 ?

Généralement non. L'ablation passe de 1 percent à k = 1 à 44 percent à k = 100 et diminue ensuite, donc 100 se situe près du sommet. Si le bras s'engage trop longtemps, réduisez plutôt n_action_steps : à 30 fps, 25 requêtes toutes les 0.8 seconds.

Combien de temps dure une exécution d'entraînement, et puis-je l'arrêter plus tôt ?

Deux à cinq heures sur une carte de 24 GB pour 100000 steps. Les points de contrôle sont enregistrés toutes les 20000 steps et --resume=true reprend une exécution, donc l'arrêt anticipé est sûr. Mais pas au premier palier : la fluidité s'améliore après que la perte se stabilise.

La perte a diminué et le bras échoue toujours. Que faire maintenant ?

Presque toujours l'ensemble de données. Rejouez les épisodes enregistrés au niveau du bras : si la relecture n'effectue pas la tâche, les données ne la contiennent pas. Vérifiez ensuite si quelque chose a bougé, en particulier une caméra. ACT n'a pas de priors, donc un petit mouvement à l'épisode 21 est permanent.

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started