
Entrena un Action Chunking Transformer desde cero en un SO-100 con lerobot: la configuración act, chunk_size y n_action_steps, el cronograma de 100000 pasos, inferencia de 20 ms.
ACT es la excepción entre las políticas SO-100. GR00T N1.7 y N1.5 parten de nvidia/GR00T-N1.7-3B y nvidia/GR00T-N1.5-3B, Pi0.5 de lerobot/pi05_base. ACT parte de cero: no hay un punto de control base, porque no es un modelo fundacional. Es un transformador de aproximadamente 80 millones de parámetros que se entrena desde cero en una tarea, en su brazo, bajo su iluminación.
Esa es también la razón por la que ejecuta un paso de control en 20 ms, mientras que un VLA de 3 mil millones de parámetros necesita de 152 a 485 ms, y cuesta de 1 a 3 USD por ejecución en lugar de 4 a 12. Esta guía sigue la ruta manual con lerobot en un SO-100: grabar, la configuración act, qué controlan chunk_size y n_action_steps, el programa de 100000 pasos, el despliegue. Luego el mismo trabajo en AY-Robots, incluyendo dónde la plataforma no ayuda.
Lo que necesita saber
- •ACT se entrena desde cero: sin modelo base, sin preentrenamiento, sin entrada de lenguaje. Un punto de control, una tarea.
- •El artículo: aproximadamente 80 M parámetros, alrededor de 5 horas en una RTX 2080 Ti de 11 GB, 0.01 s de inferencia.
- •Valores predeterminados de lerobot: chunk_size 100, n_action_steps 100, batch 8, lr 1e-5, 100000 pasos, seed 1000.
- •En AY-Robots: 20 ms por paso, el más rápido de los cinco. 50 episodios mínimo, LeRobot v3.0, una tarjeta de 24 GB, de 1 a 3 USD por ejecución.
- •Gana en una tarea que ha visto, y pierde en el momento en que se desea condicionamiento por lenguaje.
Verificado el 23 de agosto de 2026 con lerobot 0.6.x: pyproject.toml en main lee version = "0.6.2", la etiqueta más reciente v0.6.1, 3 de agosto de 2026. Un tutorial que comienza con python lerobot/scripts/train.py es anterior a los puntos de entrada de la consola lerobot-train, lerobot-record y lerobot-rollout.
¿Qué es ACT en realidad?
Action Chunking with Transformers proviene del artículo ALOHA, Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware, por Zhao, Kumar, Levine y Finn, arXiv, 23 de abril de 2023. El equipo graba a 50 Hz con cuatro cámaras web transmitiendo 480x640 a 30 fps: dos en las pinzas, una superior, una frontal. El resumen afirma seis habilidades con un éxito del 80 al 90 por ciento, entre ellas abrir un vaso de condimento translúcido e insertar una batería, a partir de 10 minutos de demostraciones.
El cuerpo es más útil al planificar una sesión de grabación: 50 demostraciones por tarea, excepto Enhebrar Velcro con 100, lo que representa de 10 a 20 minutos de datos y de 30 a 60 minutos de tiempo real una vez que se cuentan los reinicios. El éxito tampoco es uniforme: Enhebrar Velcro termina en 20 por ciento, Poner Zapato en 92, Abrir Vaso en 84, Preparar Cinta en 64.
| Hiperparámetro | Artículo ALOHA, Tabla III | lerobot en main |
|---|---|---|
| tasa de aprendizaje | 1e-5 | optimizer_lr = 1e-5 |
| tamaño de lote | 8 | batch_size = 8, in TrainPipelineConfig not ACTConfig |
| capas de codificador / decodificador | 4 / 7 | n_encoder_layers = 4 / n_decoder_layers = 1 |
| tamaño de fragmento k | 100 | chunk_size = 100 |
| dimensión latente de z | ausente; la Fig. 11 muestra una proyección de 32 a 512 | latent_dim = 32 |
| ensamblaje temporal | ausente; --temporal_agg en el código de referencia | temporal_ensemble_coeff = None |
El artículo enumera 7 capas de decodificador, lerobot envía 1, deliberadamente. El comentario en configuration_act.py indica que la implementación original tiene un error que significa que solo se utiliza la primera capa, citando el problema 25 en tonyzhaozh/act: el cabezal de acción lee hs[0], por lo que las siete capas se ejecutan pero solo la primera salida llega a la predicción. Ese problema está abierto y sin respuesta desde el 23 de abril de 2024. lerobot coincide con el comportamiento que produjo los resultados publicados, no con el número impreso. Aumente --policy.n_decoder_layers y entrenará un modelo que el artículo nunca evaluó.
El chunking de acciones es la idea principal
La clonación de comportamiento ordinaria mapea una observación a una acción, y los errores se acumulan: una desviación saca el brazo de la distribución, produciendo una acción peor, y treinta pasos después el efector final no está cerca del objeto. Chunking de acciones predice k acciones a la vez y las ejecuta, reduciendo el horizonte efectivo en un factor de k. También maneja una molestia específica de los datos humanos: los teleoperadores hacen pausas, y una política markoviana de un solo paso no puede modelar una pausa que dependa de lo que vino antes.
El artículo abla k en lugar de afirmarlo. Con el ensamble temporal desactivado, promediado en cuatro configuraciones, el éxito aumenta del 1 por ciento en k = 1 al 44 por ciento en k = 100, luego disminuye en 200 y 400 a medida que la política se acerca al control de lazo abierto. Esa curva es la razón por la cual el valor predeterminado es 100.
- chunk_size: cuántas acciones futuras predice el decodificador por pasada hacia adelante. Por defecto 100.
- n_action_steps: cuántas de ellas ejecutas antes de volver a consultar. Por defecto 100, por lo que lerobot ejecuta todo el chunk en bucle abierto.
- lerobot valida
n_action_steps <= chunk_sizey lanza unValueErrorsi lo configuras al revés.
Lo que importa operativamente es chunk_size dividido por la velocidad de fotogramas (frame rate). A los 30 fps que usan los ejemplos SO-100 de lerobot, un chunk de 100 acciones compromete aproximadamente 3.3 segundos desde una observación. Si la tarea necesita una corrección dentro de esa ventana, reduce n_action_steps, no chunk_size: mantienes la predicción larga y re-observas con más frecuencia.
# 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=cudaEstablece --policy.temporal_ensemble_coeff y lerobot requiere n_action_steps = 1, lanzando un NotImplementedError en caso contrario. El ensembling consulta la política en cada paso de tiempo y mezcla las predicciones superpuestas para ese paso de tiempo con pesos w_i = exp(-m * i), siendo w_0 el más antiguo. El artículo lo sitúa en un 3.3 por ciento para ACT: real pero modesto, y multiplica el recuento de inferencias por la longitud del chunk. Asequible a 20 ms por paso, no a 485 ms. Consulta latencia de inferencia.
Cuando ACT supera a un modelo fundacional
Las cinco políticas entrenables una al lado de la otra, con los números que AY-Robots mide y utiliza para dimensionar la GPU que alquila.
| Política | Familia | Parámetros | Por paso | Nivel de GPU | Episodios mínimos | Conjunto de datos |
|---|---|---|---|---|---|---|
| ACT | Transformador de fragmentación, desde cero | ~80 M | 20 ms | RTX 4090 / 24 GB | 50 | LeRobot v3.0 |
| SmolVLA | VLA compacto | ~450 M | 245 ms | RTX 4090 / 24 GB | 30 | LeRobot v3.0 |
| GR00T N1.7 | Fundación VLA, cabezal de difusión | ~3 B (~40 M trained) | 152 ms | A100 / H100 80 GB | 50 | LeRobot v2.0 or v2.1 |
| GR00T N1.5 | Fundación VLA, predecesor | ~3 B | 165 ms | A100 / H100 80 GB | 50 | LeRobot v2.0 or v2.1 |
| Pi0.5 | VLA de ajuste de flujo, ver ajuste de flujo | ~3 B, PaliGemma backbone | 485 ms | A100 / H100 80 GB | 50 | LeRobot v3.0 |

- 20 ms por paso de acción, el más rápido de los cinco, en una tarjeta de 24 GB, no una A100.
- De 1 a 3 USD por ejecución frente a 4 a 12 para la clase de 3 B.
- Preciso en trabajos con mucho contacto que ha visto: 88 y 96 por ciento en Slide Ziploc y Slot Battery, donde los métodos anteriores nunca superaron la primera etapa.
- Sin condicionamiento de lenguaje: la cadena de la tarea se ignora, por lo que un punto de control es una tarea.
- Sin conocimientos previos semánticos: todo lo que sabe proviene de tus 50 episodios.
- Generalización limitada: mueve una cámara y tendrás que volver a entrenar.
- Falla silenciosamente: la pérdida disminuye, el brazo no hace nada, los registros no dicen nada.
- La ventaja de velocidad solo ayuda si la inferencia está junto a los servos.
Elige ACT cuando la tarea y la escena son fijas y el movimiento debe ser rápido y preciso. Elige un cuando un punto de control debe cubrir varias instrucciones. Dos páginas comparan la decisión directamente: y . Para los benchmarks publicados, enlaza cada número a su fuente.
Lo que necesitas antes de empezar
Un brazo seguidor, un brazo líder para , al menos una cámara, una GPU de 24 GB. ACT solo lee imágenes y posiciones de articulaciones. Dos cámaras son lo ideal: una vista frontal fija para saber dónde están las cosas, una cámara de muñeca para lo que el está a punto de tocar, como en ALOHA.
| Brazo | Servos | Voltaje | Costo de piezas | Estado |
|---|---|---|---|---|
| SO-100 | Feetech STS3215 | 7.4 V | ~110 a 150 EUR | Soporte completo, brazo de referencia |
| SO-101 | Feetech STS3215 | 7.4 V | ~130 a 170 EUR | Soporte completo |
| Koch v1.1 | Dynamixel XL330 / XL430 | Rieles de 5 V y 12 V | ~250 a 350 EUR | Compatible |
| LeKiwi | Feetech STS3215 (brazo) | Brazo de 7.4 V, base de 12 V | ~400 a 500 EUR | Compatible |
Los SO-100 y SO-101 utilizan servos Feetech STS3215 en un riel de 7.4 V. Alimentarlos con 12 V los destruye, de forma lo suficientemente silenciosa como para que la gente culpe primero al software, y una fuente de alimentación Koch de 12 V encaja físicamente en una placa SO-100. Verifique la etiqueta. Síntomas: servo no responde, el brazo se sacude y luego cede. También SO-100 vs SO-101.
Del brazo desnudo al conjunto de datos grabado
El flujo a continuación es lerobot 0.6.x. Omítalo si tiene un brazo calibrado y un conjunto de datos. De lo contrario, la guía de inicio de SO-100, cubre el ensamblaje, el tutorial de grabación cubre la captura y la documentación del conjunto de datos el formato.
- 1Instalar lerobot con los extras correctos
La grabación necesita
core_scripts, el entrenamientotraining, los servos 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 - 2Encontrar el puerto USB de cada brazo
Ejecútalo con ambos brazos conectados, desconectando uno cuando se te solicite. En Linux, es posible que necesites abrir los permisos del nodo.
bashlerobot-find-port # on Linux, if the port exists but is unreadable: sudo chmod 666 /dev/ttyACM0 - 3Establecer los IDs de los motores y la velocidad de transmisión
En el SO-100 esto ocurre antes del montaje: a diferencia del SO-101, los conectores son inaccesibles una vez construido. El script recorre el bus un motor a la vez desde la pinza, escribiendo IDs en la EEPROM.
bashlerobot-setup-motors \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM0 lerobot-setup-motors \ --teleop.type=so100_leader \ --teleop.port=/dev/ttyACM1 - 4Calibrar ambos brazos
Ajusta cada articulación al centro de su rango, presiona Enter y luego barre cada una a través de su rango completo. La calibración permite que una política entrenada en un brazo se ejecute en otro. Reutiliza el mismo
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 - 5Teleoperar una vez con las cámaras encendidas
La regla general de lerobot: deberías poder realizar la tarea mirando solo las imágenes de la cámara. Si no puedes, ACT tampoco podrá. Esto detecta más conjuntos de datos defectuosos que la depuración posterior.
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 - 6Grabar 50 episodios
50 es el mínimo de AY-Robots y lo que ALOHA usó por tarea. lerobot aconseja 10 por ubicación de objeto, cámaras fijas, agarre consistente.
nfinaliza un episodio,rvuelve a grabar,qdetiene y 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 no tiene conocimientos previos a los que recurrir, por lo que cada inconsistencia se vuelve permanente. Las tres más costosas: una cámara movida entre el episodio 20 y 21, la luz que cambió porque grabaste la mitad del conjunto por la tarde, un agarre realizado de dos maneras. Cada una produce una curva de pérdida de aspecto perfecto y un brazo que va al lugar equivocado. Consulta la pérdida disminuye, la política no hace nada, la política solo funciona en una configuración y recopilación de datos de entrenamiento de alta calidad.
Antes de entrenar, reproduce al menos cinco episodios. El formato de conjunto de datos LeRobot almacena flujos de cámara, estados de articulaciones y acciones por episodio, y la reproducción devuelve esas acciones al brazo. Si la reproducción no realiza la tarea, los datos no la contienen y el entrenamiento no la inventará.
lerobot-replay \
--robot.type=so100_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_follower \
--dataset.repo_id=${HF_USER}/so100_cube \
--dataset.episode=0Entrenamiento de la política ACT
Este es el comando completo. Todo lo específico de ACT ya es un valor predeterminado, por lo que la página de ACT de lerobot recomienda empezar con ellos.
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 carga ACTConfig, que se adapta a la cantidad de motores y cámaras que registró su conjunto de datos, por lo que nunca declara la forma de la observación. --wandb.enable=true es opcional y vale la pena: la curva de pérdida es la única señal económica en una ejecución de 100000 pasos. La programación proviene de la configuración de entrenamiento de lerobot, no de ACTConfig: 100000 pasos, lote 8, semilla 1000, un punto de control cada 20000 pasos, registrando cada 200.
Una ejecución completa deja cinco directorios de puntos de control, del 020000 al 100000, más un último enlace simbólico. Guárdelos todos: la mejor política a menudo no es la última.
| Configuración | Valor predeterminado de lerobot | Formulario ACT de AY-Robots | Comentario |
|---|---|---|---|
| tamaño de lote | 8 | 8 | Redúzcalo primero si alcanza los límites de VRAM. |
| tasa de aprendizaje | 1e-5 | 1e-5 | Igual que el artículo de ALOHA. |
| pasos máximos | 100000 | 100000 | Aproximadamente donde un conjunto de 50 episodios deja de mejorar. |
| acumulación de gradiente | 1 | 1, no aplica | Cambie el tamaño del lote en su lugar. |
| semilla | 1000 | expuesto | El punto de entrada tyro de GR00T no tiene semilla; las ejecuciones de ACT son las reproducibles. |
| chunk_size / n_action_steps | 100 / 100 | 100 / 100, editable | Horizonte de predicción y ejecución. Reduzca el segundo, no el primero. |
| frecuencia de punto de control | 20000 | no expuesto | saveSteps es un parámetro de GR00T aquí. |
ACT con un tamaño de lote de 8 y dos cámaras de 640x480 cabe cómodamente en 24 GB. Deja de caber cuando la gente aumenta el tamaño del lote para acelerar, o le alimenta los fotogramas de 1920x1080 que muestra un ejemplo de grabación de lerobot. Dos backbones ResNet-18 a 1080p tienen un perfil de memoria muy diferente. Reduzca --batch_size a 4 antes de alquilar una tarjeta más grande. Consulte falta de memoria en el entrenamiento.
Duración: alrededor de 5 horas en una RTX 2080 Ti de 11 GB según el artículo, unas pocas horas para 100k pasos según la página ACT de lerobot, de 2 a 5 horas en el nivel de 24 GB de AY-Robots. No lo acortes. El README del repositorio de referencia indica que una política inestable o con pausas generalmente solo necesita más entrenamiento, porque el éxito y la fluidez siguen mejorando después de que la pérdida se estabiliza: para datos del mundo real, requiere al menos 5000 épocas, o de 3 a 4 veces la duración nuevamente después de la estabilización.
lerobot-train \
--config_path=outputs/train/act_so100_cube/checkpoints/last/pretrained_model/train_config.json \
--resume=trueEjecutando la política entrenada en el brazo
La implementación utiliza lerobot-rollout. Las claves de la cámara deben coincidir con las grabadas: una política entrenada en front y wrist no aceptará cam0 y cam1, y rename_map no ayuda, ya que necesita un punto de control preentrenado. La cadena de tarea puede omitirse; el propio ejemplo de lerobot la marca como opcional para 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 evaluación solía ejecutarse con lerobot-record --policy.path=.... En la versión 0.6.x es lerobot-rollout con un selector --strategy.type: base, sentry (grabación con auto-subida), highlight (búfer circular guardado por pulsación de tecla), dagger (humano en el bucle) y episodic. A fecha de 23 de agosto de 2026, la página de documentación de ACT todavía dice "usando el comando lerobot-record" directamente encima de un bloque que ejecuta lerobot-rollout. Sigue el comando, no la frase.
Para fijar un punto de control en lugar del modelo final, añade --policy.pretrained_revision. Eso requiere que la ejecución haya comenzado con --save_checkpoint_to_hub=true, desactivado por defecto: sin él, lerobot sube el modelo final y nada más. Con él, cada punto de control se etiqueta con su paso rellenado con ceros, por lo que --policy.pretrained_revision=060000 recupera el de 60000 pasos. Compararlo con el de 100000 en el brazo real es el experimento más barato disponible.
Dos rutas al mismo punto de control
Todo lo anterior es la ruta manual y funciona. La ruta de la plataforma sacrifica el control a cambio de no poseer una GPU o un entorno Python.
- Instala lerobot 0.6.x con
core_scripts,training,feetech, ffmpeg. - Encuentra puertos, configura IDs de motor, calibra ambos brazos, graba 50 episodios.
- Reproduce algunos episodios para confirmar que los datos contienen la tarea.
- Alquila o posee una GPU de 24 GB, empareja CUDA y PyTorch, ejecuta
lerobot-train --policy.type=act. - Espera unas horas, luego ejecuta
lerobot-rollouten la máquina junto al brazo.
# 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=cudaControl total: edita configuration_act.py, añade una cámara, bifurca el entrenador. Para investigación en lugar de entregar una tarea, una plataforma es una distracción.
- Graba con el cliente de escritorio, o trae un ID de repositorio de Hugging Face o un conjunto de datos local.
- Abre la guía ACT en SO-100 y elige modelo y conjunto de datos. Los valores predeterminados son los de lerobot; chunkSize, nActionSteps, seed y logFreq son editables.
- El backend alquila una GPU dimensionada por VRAM y escribe puntos de control en el almacenamiento de objetos.
/api/inference/podluego sirve la política al cliente robot local. Un watchdog inactivo destruye el pod, para que nada se facture silenciosamente.- Las mismas operaciones existen en la CLI, el servidor MCP y la documentación de entrenamiento.
No corrige tus datos: un conjunto de datos con una cámara movida se entrena igual de mal aquí, y el formulario no puede detectarlo. Tampoco elimina el problema de latencia. El bucle de control es de 20 a 485 ms por paso de acción, con viajes de ida y vuelta por internet público adicionales, y ACT es el más afectado porque su paso es el más corto: 60 ms es una ralentización del 12 por ciento en los 485 ms de Pi0.5, pero cuatro veces el paso en los 20 ms de ACT. La inferencia remota es adecuada para tareas lentas de 'pick and place', no para movimientos reactivos rápidos.

Qué sale mal en realidad
Casi ninguno de los problemas está en el comando de entrenamiento. Está en las cosas que lo rodean, ordenadas por la frecuencia con la que fallan la primera vez.
| Síntoma | Causa habitual | Página |
|---|---|---|
| lerobot-find-port no muestra nada | Permisos de controlador, cable o nodo | brazo no detectado |
| Cámara ausente al momento de la grabación | Índice cambiado al reiniciar, o dos cámaras en un solo controlador USB | cámara no detectada |
| El entrenamiento rechaza el conjunto de datos | ACT requiere v3.0, GR00T necesita v2.1 | conjunto de datos rechazado como v3 |
| CUDA sin memoria | Tamaño de lote aumentado, o fotogramas de 1080p en lugar de 480p | sin memoria en el entrenamiento |
| La pérdida parece buena, el brazo no hace nada | Los datos carecen de la tarea, o una cámara se movió | la pérdida disminuye, la política no hace nada |
| Movimiento brusco o una pausa a mitad del episodio | Subentrenado, un bloqueo en el límite de un fragmento, o una llamada de inferencia con tiempo de espera agotado | la política se congela a mitad del movimiento |
Dos filas merecen énfasis. ACT entrena con LeRobot v3.0 mientras que el cargador de GR00T falla con él y necesita v2.1, por lo que un conjunto de datos que entrena ACT puede hacer fallar una ejecución de GR00T. Y la última fila tiene dos soluciones: los autores de ACT responden al movimiento brusco con más entrenamiento, mientras que con n_action_steps en 100, un bloqueo genuino ocurre en el límite de un fragmento, una pausa visible cada 3.3 segundos a 30 fps. Dos cosas más a saber: una sola articulación muerta suele ser un ID de servo que nunca fue escrito, y un efector final que se acerca pero nunca se cierra significa un rango de efector final demasiado pequeño en las demostraciones. Índice completo: las páginas de modos de fallo.
¿Qué cuesta una ejecución?
| Nivel | Modelos | Tiempo de ejecución | Precio por hora | Costo por ejecución |
|---|---|---|---|---|
| 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 |
Este es el argumento para empezar con ACT incluso si más tarde quieres un VLA. Una ejecución fallida de ACT cuesta el precio de un café y te dice en horas si tu conjunto de datos contiene la tarea. Una ejecución fallida de GR00T cuesta cuatro veces eso por la misma lección. Pasar a GR00T N1.7 o SmolVLA después es un cambio de forma, no una reconstrucción. Antecedentes: modelos de visión-lenguaje-acción, la guía completa del SO-100, entrena tu primera política y aprendizaje por imitación. ¿No tienes brazo? La página en vivo transmite un SO-100 real para conducir sin registrarse.
Entrena ACT en tu SO-100
La guía para esta combinación exacta: valores predeterminados, nivel de GPU y lo que cuesta una ejecución. Elige el conjunto de datos, el backend alquila la tarjeta y escribe los puntos de control.
Abrir la guía de entrenamiento¿Hay un modelo ACT preentrenado que pueda ajustar en su lugar?▾
No. ACT no tiene un modelo base; solo existe después de que lo entrenas. Eso no es una deficiencia en las herramientas, es lo que es ACT: el artículo entrena una política desde cero por tarea. Para un punto de control de proveedor, usa GR00T N1.7 o Pi0.5.
¿Cuántos episodios necesito realmente?▾
50: lo que ALOHA registró por tarea (100 para Thread Velcro, la más difícil) y el mínimo de AY-Robots. lerobot aconseja unos 10 por ubicación de objeto, cámaras fijas, agarre consistente. Cincuenta episodios limpios superan a cien donde la cámara se movió.
¿Debería cambiar chunk_size de 100?▾
Normalmente no. La ablación sube del 1 por ciento en k = 1 al 44 por ciento en k = 100 y disminuye después, por lo que 100 se sitúa cerca de la cima. Si el brazo se compromete demasiado tiempo, reduce n_action_steps en su lugar: a 30 fps, 25 reconsultas cada 0.8 segundos.
¿Cuánto tiempo tarda una ejecución de entrenamiento y puedo detenerla antes?▾
De dos a cinco horas en una tarjeta de 24 GB para 100000 pasos. Los puntos de control se guardan cada 20000 pasos y --resume=true retoma una ejecución, por lo que detenerse antes es seguro. Solo no en el primer tramo plano: la suavidad mejora después de que la pérdida se estabiliza.
La pérdida disminuyó y el brazo sigue fallando. ¿Y ahora qué?▾
Casi siempre el conjunto de datos. Reproduce los episodios grabados en el brazo: si la reproducción no realiza la tarea, los datos no la contienen. Luego verifica si algo se movió, especialmente una cámara. ACT no tiene priors, por lo que un empujón en el episodio 21 es 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