lerobot을 사용하여 SO-100에서 Action Chunking Transformer를 처음부터 훈련합니다: act config, chunk_size 및 n_action_steps, 100000 스텝 스케줄, 20 ms 추론.
ACT는 SO-100 정책 중 특이한 경우입니다. GR00T N1.7 및 N1.5는 nvidia/GR00T-N1.7-3B 및 nvidia/GR00T-N1.5-3B에서 시작하며, Pi0.5는 lerobot/pi05_base에서 시작합니다. ACT는 아무것도 없는 상태에서 시작합니다. 기반 모델이 아니기 때문에 기본 체크포인트가 없습니다. 이는 약 8천만 개의 매개변수를 가진 트랜스포머로, 특정 작업에 대해 사용자의 로봇 팔과 조명 환경에서 처음부터 훈련시킵니다.
이것이 바로 30억 개의 매개변수를 가진 VLA가 152~485ms를 필요로 하는 제어 단계를 20ms 만에 실행하고, 실행당 4~12 USD 대신 1~3 USD가 드는 이유입니다. 이 가이드는 lerobot를 사용하여 SO-100에서 수동 경로를 안내합니다: 기록, act 구성, chunk_size 및 n_action_steps가 제어하는 것, 100000단계 스케줄, 롤아웃. 그 다음 AY-Robots에서 동일한 작업을 수행하며, 플랫폼이 도움이 되지 않는 부분도 포함합니다.
알아야 할 사항
- •ACT는 처음부터 훈련합니다: 기본 모델, 사전 훈련, 언어 입력이 없습니다. 하나의 체크포인트, 하나의 작업.
- •논문: 약 8천만 개의 매개변수, 11GB RTX 2080 Ti에서 약 5시간, 0.01초 추론.
- •lerobot 기본값: chunk_size 100, n_action_steps 100, batch 8, lr 1e-5, 100000 steps, seed 1000.
- •AY-Robots에서: 단계당 20ms, 다섯 가지 중 가장 빠릅니다. 최소 50 에피소드, LeRobot v3.0, 24GB 카드, 실행당 1~3 USD.
- •이 모델은 학습한 작업에서는 성공하지만, 언어 조건화를 원하면 실패합니다.
2026년 8월 23일 lerobot 0.6.x에 대해 확인됨: pyproject.toml의 main은 version = "0.6.2"로 읽히며, 최신 태그 v0.6.1은 2026년 8월 3일자입니다. python lerobot/scripts/train.py로 시작하는 튜토리얼은 콘솔 진입점인 lerobot-train, lerobot-record, lerobot-rollout보다 이전입니다.
ACT는 실제로 무엇인가
Action Chunking with Transformers는 ALOHA 논문, 저비용 하드웨어로 미세한 양손 조작 학습, Zhao, Kumar, Levine, Finn 공저, arXiv, 2023년 4월 23일에서 유래했습니다. 이 장비는 50Hz로 기록하며, 4개의 웹캠이 480x640 해상도로 30fps 스트리밍합니다. 웹캠은 그리퍼에 2개, 상단에 1개, 전면에 1개 설치되어 있습니다. 초록에서는 10분간의 시연을 통해 반투명 양념 컵 열기, 배터리 끼우기 등 6가지 기술에서 80~90%의 성공률을 주장합니다.
녹화 세션을 계획할 때 본문이 더 유용합니다. 각 작업당 50개의 시연이 필요하며, Thread Velcro는 100개입니다. 이는 10~20분의 데이터와 리셋 시간을 포함하면 30~60분의 실제 소요 시간입니다. 성공률도 균일하지 않습니다. Thread Velcro는 20%, Put On Shoe는 92%, Cup Open은 84%, Prep Tape는 64%입니다.
| 하이퍼파라미터 | ALOHA 논문, 표 III | lerobot (메인) |
|---|---|---|
| 학습률 | 1e-5 | optimizer_lr = 1e-5 |
| 배치 크기 | 8 | batch_size = 8, in TrainPipelineConfig not ACTConfig |
| 인코더 / 디코더 레이어 | 4 / 7 | n_encoder_layers = 4 / n_decoder_layers = 1 |
| 청크 크기 k | 100 | chunk_size = 100 |
| z의 잠재 차원 | 없음; 그림 11은 32에서 512로의 투영을 보여줌 | latent_dim = 32 |
| 시간적 앙상블 | 없음; 참조 코드의 --temporal_agg | temporal_ensemble_coeff = None |
해당 논문에는 7개의 디코더 레이어가 나열되어 있지만, lerobot은 의도적으로 1개만 제공합니다. configuration_act.py의 주석에는 원래 구현에 버그가 있어 첫 번째 레이어만 사용된다고 명시되어 있으며, tonyzhaozh/act의 25번 이슈를 인용합니다. 액션 헤드가 hs[0]을 읽기 때문에 7개의 레이어가 모두 실행되지만 첫 번째 출력만 예측에 도달합니다. 해당 이슈는 2024년 4월 23일부터 열려 있고 답변이 없습니다. lerobot은 인쇄된 숫자가 아닌, 발표된 결과를 생성한 동작과 일치합니다. --policy.n_decoder_layers를 높이면 논문에서 평가되지 않은 모델을 훈련하게 됩니다.
액션 청킹이 핵심 아이디어입니다
일반적인 행동 복제는 하나의 관측을 하나의 행동에 매핑하며, 오류가 누적됩니다. 편차가 팔을 분포에서 벗어나게 하여 더 나쁜 행동을 유발하고, 30단계 후에는 그리퍼가 객체 근처에도 가지 못하게 됩니다. 액션 청킹은 한 번에 k개의 행동을 예측하고 실행하여 유효한 예측 범위를 k배만큼 줄입니다. 또한 인간 데이터에 특정한 골칫거리도 처리합니다. 원격 조작자는 일시 정지하며, 단일 단계 마르코프 정책은 이전에 발생한 일에 따라 달라지는 일시 정지를 모델링할 수 없습니다.
해당 논문은 k를 단정하기보다는 제거합니다. 시간적 앙상블을 끈 상태에서 네 가지 설정에 걸쳐 평균을 냈을 때, 성공률은 k = 1일 때 1퍼센트에서 k = 100일 때 44퍼센트로 상승한 다음, 정책이 개방 루프 제어에 가까워지면서 200과 400에서 점차 감소합니다. 이 곡선이 기본값이 100인 이유입니다.
- chunk_size: 디코더가 한 번의 순방향 패스에서 예측하는 미래 액션의 수. 기본값 100.
- n_action_steps: 다시 쿼리하기 전에 실행하는 액션의 수. 기본값 100이므로 lerobot은 전체 청크를 개방 루프로 실행합니다.
- lerobot은
n_action_steps <= chunk_size를 검증하며, 반대로 설정하면ValueError를 발생시킵니다.
운영상 중요한 것은 chunk_size를 프레임 속도로 나눈 값입니다. lerobot의 SO-100 예시에서 사용하는 30 fps에서는 100개의 청크가 하나의 관측에서 약 3.3초를 커밋합니다. 작업이 해당 창 내에서 수정이 필요한 경우, chunk_size가 아니라 n_action_steps를 낮추십시오. 이렇게 하면 긴 예측을 유지하고 더 자주 재관측할 수 있습니다.
# 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--policy.temporal_ensemble_coeff를 설정하면 lerobot은 n_action_steps = 1을 요구하며, 그렇지 않으면 NotImplementedError를 발생시킵니다. 앙상블은 매 타임스텝마다 정책을 쿼리하고, 해당 타임스텝에 대한 중첩된 예측을 w_i = exp(-m * i) 가중치로 혼합하며, 가장 오래된 예측이 w_0를 얻습니다. 논문에서는 ACT의 경우 3.3%로 명시하고 있습니다. 이는 실제 효과가 있지만 미미하며, 추론 횟수를 청크 길이만큼 곱합니다. 스텝당 20 ms에서는 감당할 수 있지만, 485 ms에서는 그렇지 않습니다. 추론 지연 시간을 참조하십시오.
ACT가 기초 모델을 능가할 때
다섯 가지 훈련 가능한 정책을 나란히 비교하며, AY-Robots가 임대하는 GPU의 크기를 결정하기 위해 측정하고 사용하는 수치와 함께.
| 정책 | 계열 | 매개변수 | 단계당 | GPU 등급 | 최소 에피소드 | 데이터셋 |
|---|---|---|---|---|---|---|
| ACT | 청킹 트랜스포머, 처음부터 | ~80 M | 20 ms | RTX 4090 / 24 GB | 50 | LeRobot v3.0 |
| SmolVLA | 소형 VLA | ~450 M | 245 ms | RTX 4090 / 24 GB | 30 | LeRobot v3.0 |
| GR00T N1.7 | VLA 기반, 확산 헤드 | ~3 B (~40 M trained) | 152 ms | A100 / H100 80 GB | 50 | LeRobot v2.0 or v2.1 |
| GR00T N1.5 | VLA 기반, 선행 모델 | ~3 B | 165 ms | A100 / H100 80 GB | 50 | LeRobot v2.0 or v2.1 |
| Pi0.5 | 플로우 매칭 VLA, 다음 참조: 플로우 매칭 | ~3 B, PaliGemma backbone | 485 ms | A100 / H100 80 GB | 50 | LeRobot v3.0 |

- A100이 아닌 24GB 카드에서 5가지 방법 중 가장 빠른 액션 단계당 20ms.
- 3B 클래스의 4~12 USD에 비해 실행당 1~3 USD.
- 접촉이 많은 작업에서 정밀함: Slide Ziploc 및 Slot Battery에서 88% 및 96%를 달성했으며, 이전 방법은 1단계도 통과하지 못했습니다.
- 언어 조건화 없음: 작업 문자열이 무시되므로 하나의 체크포인트는 하나의 작업입니다.
- 의미론적 사전 지식 없음: ACT가 아는 모든 것은 50개의 에피소드에서 비롯됩니다.
- 좁은 일반화: 카메라를 움직이면 재훈련해야 합니다.
- 조용히 실패합니다: 손실은 감소하지만, 팔은 아무것도 하지 않고, 로그에는 아무것도 표시되지 않습니다.
- 추론이 서보 옆에 있을 때만 속도 이점이 도움이 됩니다.
작업과 장면이 고정되어 있고 움직임이 빠르고 정밀해야 할 때 ACT를 선택하십시오. 하나의 체크포인트가 여러 지침을 포괄해야 할 때 을 선택하십시오. 두 페이지에서 이 결정을 직접 다룹니다: 및 . 공개된 벤치마크의 경우, 은 모든 숫자를 출처에 연결합니다.
시작하기 전에 필요한 것
하나의 팔로워 암, 을 위한 하나의 리더 암, 최소 하나의 카메라, 24GB GPU. ACT는 이미지와 조인트 위치만 읽습니다. 두 대의 카메라가 최적입니다: 사물의 위치를 위한 고정된 전면 뷰, 가 무엇을 만지려 하는지를 위한 손목 카메라(ALOHA와 같이).
| 암 | 서보 | 전압 | 부품 비용 | 상태 |
|---|---|---|---|---|
| SO-100 | Feetech STS3215 | 7.4 V | ~110 to 150 EUR | 완전 지원, 레퍼런스 암 |
| SO-101 | Feetech STS3215 | 7.4 V | ~130 to 170 EUR | 완전 지원 |
| Koch v1.1 | Dynamixel XL330 / XL430 | 5 V and 12 V rails | ~250 to 350 EUR | 호환 가능 |
| LeKiwi | Feetech STS3215 (arm) | 7.4 V arm, 12 V base | ~400 to 500 EUR | 호환 가능 |
SO-100 및 SO-101은 7.4 V 레일에서 Feetech STS3215 서보를 구동합니다. 12 V를 공급하면 서보가 손상되는데, 너무 조용히 손상되어 사람들이 먼저 소프트웨어 탓을 하고, Koch 12 V 전원 공급 장치가 SO-100 보드에 물리적으로 맞습니다. 라벨을 확인하세요. 증상: 서보 응답 없음, 암이 경련하다가 처짐. 또한 SO-100 vs SO-101.
맨 암에서 기록된 데이터셋까지
아래 흐름은 lerobot 0.6.x입니다. 보정된 암과 데이터셋이 있다면 건너뛰세요. 그렇지 않으면 SO-100 시작 가이드에서 조립을 다루고, 기록 워크스루에서 캡처를 다루며, 데이터셋 문서에서 형식을 다룹니다.
- 1적절한 추가 기능으로 lerobot 설치
녹화에는
core_scripts, 훈련에는training, Feetech 서보에는feetech가 필요합니다. 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 - 2각 암의 USB 포트 찾기
두 암을 모두 연결한 상태에서 실행하고, 메시지가 표시되면 하나를 분리합니다. Linux에서는 노드 권한을 열어야 할 수도 있습니다.
bashlerobot-find-port # on Linux, if the port exists but is unreadable: sudo chmod 666 /dev/ttyACM0 - 3모터 ID 및 보드레이트 설정
SO-100에서는 조립 전에 이 작업이 수행됩니다. SO-101과 달리 일단 조립되면 커넥터에 접근할 수 없습니다. 스크립트는 그리퍼부터 한 번에 하나의 모터씩 버스를 따라 이동하며 ID를 EEPROM에 기록합니다.
bashlerobot-setup-motors \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM0 lerobot-setup-motors \ --teleop.type=so100_leader \ --teleop.port=/dev/ttyACM1 - 4두 암 모두 보정
모든 조인트를 범위의 중간으로 설정하고 Enter를 누른 다음, 각 조인트를 전체 범위로 스윕합니다. 보정을 통해 한 암에서 훈련된 정책을 다른 암에서 실행할 수 있습니다. 동일한
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 - 5카메라를 켠 상태에서 한 번 원격 조작
lerobot의 경험 법칙: 카메라 이미지만 보고 작업을 수행할 수 있어야 합니다. 할 수 없다면 ACT도 할 수 없습니다. 이는 나중에 디버깅하는 것보다 더 많은 불량 데이터셋을 잡아냅니다.
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 - 650개 에피소드 기록
50은 AY-Robots의 최소값이며 ALOHA가 작업당 사용한 값입니다. lerobot은 객체 위치당 10개, 카메라 고정, 일관된 그립을 권장합니다.
n은 에피소드를 종료하고,r은 다시 기록하며,q는 중지하고 인코딩합니다.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는 의존할 사전 지식이 없으므로 모든 불일치가 영구적이 됩니다. 가장 비용이 많이 드는 세 가지: 에피소드 20과 21 사이에 카메라가 살짝 움직인 경우, 오후에 절반을 녹화하여 조명이 바뀐 경우, 두 가지 방식으로 수행된 그립. 각각은 완벽해 보이는 손실 곡선과 잘못된 위치로 가는 암을 제공합니다. 손실은 감소하지만 정책은 아무것도 하지 않음, 정책이 한 가지 설정에서만 작동함 및 고품질 훈련 데이터 수집을 참조하십시오.
훈련 전에 최소 5개 에피소드를 재생하십시오. 은 카메라 스트림, 조인트 상태 및 액션을 당 저장하며, 재생은 해당 액션을 암으로 다시 푸시합니다. 재생이 작업을 수행하지 않으면 데이터에 해당 내용이 포함되어 있지 않으며 훈련도 이를 만들어내지 못할 것입니다.
lerobot-replay \
--robot.type=so100_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_follower \
--dataset.repo_id=${HF_USER}/so100_cube \
--dataset.episode=0ACT 정책 훈련
이것이 전체 명령어입니다. ACT 관련 모든 것은 이미 기본값으로 설정되어 있으며, 이것이 lerobot ACT 페이지에서 이들을 시작점으로 삼으라고 하는 이유입니다.
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는 데이터셋에 기록된 모터 및 카메라 수에 맞춰 조정되는 ACTConfig를 로드하므로, 관측 형태를 선언할 필요가 없습니다. --wandb.enable=true는 선택 사항이지만 가치가 있습니다. 손실 곡선은 100000 스텝 실행에서 유일하게 저렴한 신호입니다. 스케줄은 ACTConfig가 아닌 lerobot의 훈련 설정에서 가져옵니다. 100000 스텝, 배치 8, 시드 1000, 20000 스텝마다 체크포인트, 200 스텝마다 로깅입니다.
전체 실행은 020000부터 100000까지 다섯 개의 체크포인트 디렉토리와 last 심볼릭 링크를 남깁니다. 이들을 모두 보관하십시오. 최적의 정책은 종종 마지막 정책이 아닐 수 있습니다.
| 설정 | lerobot 기본값 | AY-Robots ACT 양식 | 설명 |
|---|---|---|---|
| 배치 크기 | 8 | 8 | VRAM 한계에 도달하면 먼저 낮추십시오. |
| 학습률 | 1e-5 | 1e-5 | ALOHA 논문과 동일합니다. |
| 최대 스텝 | 100000 | 100000 | 대략 50 에피소드 세트가 더 이상 개선되지 않는 지점입니다. |
| 그라디언트 누적 | 1 | 1, 해당 없음 | 대신 배치 크기를 변경하십시오. |
| 시드 | 1000 | 노출됨 | GR00T의 tyro 진입점에는 시드가 없습니다. ACT 실행은 재현 가능한 실행입니다. |
| chunk_size / n_action_steps | 100 / 100 | 100 / 100, 편집 가능 | 예측 및 실행 범위. 첫 번째가 아닌 두 번째를 낮추십시오. |
| 체크포인트 빈도 | 20000 | 노출되지 않음 | 여기서 saveSteps는 GR00T의 조절 장치입니다. |
두 개의 640x480 카메라를 사용하는 배치 크기 8의 ACT는 24GB에서 편안하게 작동합니다. 사람들이 속도를 위해 배치 크기를 늘리거나, lerobot 녹화 예시에서 보여주는 1920x1080 프레임을 공급하면 더 이상 작동하지 않습니다. 1080p에서 두 개의 ResNet-18 백본은 매우 다른 메모리 프로필을 가집니다. 더 큰 카드를 대여하기 전에 --batch_size를 4로 낮추십시오. 훈련 중 메모리 부족을 참조하십시오.
기간: 논문에서는 11GB RTX 2080 Ti에서 약 5시간, lerobot의 ACT 페이지에서는 10만 스텝당 몇 시간, AY-Robots 24GB 티어에서는 2~5시간이 소요됩니다. 시간을 단축하지 마십시오. 참조 저장소의 README에 따르면, 불안정하거나 멈추는 정책은 일반적으로 더 많은 학습, 왜냐하면 손실이 안정화된 후에도 성공률과 부드러움은 계속 향상되기 때문입니다. 실제 데이터의 경우 최소 5000 에포크, 또는 안정화된 후에도 3~4배 더 긴 학습 기간이 필요합니다.
lerobot-train \
--config_path=outputs/train/act_so100_cube/checkpoints/last/pretrained_model/train_config.json \
--resume=true학습된 정책을 로봇 팔에서 실행하기
배포는 lerobot-rollout을 사용합니다. 카메라 키는 기록된 것과 일치해야 합니다. front 및 wrist에서 학습된 정책은 cam0 및 cam1을 허용하지 않으며, rename_map은 사전 학습된 체크포인트가 필요하므로 도움이 되지 않습니다. 작업 문자열은 생략할 수 있습니다. lerobot 자체 예제에서는 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=60평가는 이전에는 lerobot-record --policy.path=...를 통해 실행되었습니다. 0.6.x 버전에서는 --strategy.type 선택자를 사용하는 lerobot-rollout입니다: base, sentry (자동 업로드와 함께 기록), highlight (키 입력으로 저장되는 링 버퍼), dagger (사람이 개입하는 루프), 그리고 episodic. 2026년 8월 23일 현재 ACT 문서 페이지에는 lerobot-rollout를 실행하는 블록 바로 위에 여전히 "lerobot-record 명령 사용"이라고 명시되어 있습니다. 문장이 아닌 명령을 따르십시오.
최종 모델 대신 체크포인트를 고정하려면 다음을 추가하세요: --policy.pretrained_revision. 이를 위해서는 실행이 다음으로 시작되어야 합니다: --save_checkpoint_to_hub=true, 기본적으로 비활성화되어 있습니다. 이 옵션이 없으면 lerobot은 최종 모델만 푸시하고 다른 것은 푸시하지 않습니다. 이 옵션을 사용하면 각 체크포인트는 0으로 채워진 스텝으로 태그가 지정되므로 --policy.pretrained_revision=060000은 60000 스텝 체크포인트를 복구합니다. 실제 로봇 팔에서 100000 스텝과 비교하는 것이 가장 저렴하게 수행할 수 있는 실험입니다.
동일한 체크포인트에 도달하는 두 가지 경로
위의 모든 내용은 수동 경로이며 작동합니다. 플랫폼 경로는 GPU나 Python 환경을 소유하지 않는 대신 제어권을 포기합니다.
core_scripts,training,feetech, ffmpeg와 함께 lerobot 0.6.x를 설치합니다.- 포트를 찾고, 모터 ID를 설정하고, 양쪽 팔을 보정하고, 50개의 에피소드를 기록합니다.
- 몇 개의 에피소드를 재생하여 데이터에 작업이 포함되어 있는지 확인합니다.
- 24GB GPU를 대여하거나 소유하고, CUDA 및 PyTorch를 일치시킨 다음,
lerobot-train --policy.type=act를 실행합니다. - 몇 시간 기다린 다음, 로봇 팔이 있는 기기에서
lerobot-rollout을 실행합니다.
# 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완전한 제어: configuration_act.py를 편집하고, 카메라를 추가하고, 트레이너를 포크합니다. 작업을 배포하기보다는 연구를 위해 플랫폼은 방해가 될 수 있습니다.
- 데스크톱 클라이언트로 기록하거나, Hugging Face repo ID 또는 로컬 데이터셋을 가져옵니다.
- SO-100 가이드의 ACT를 열고 모델과 데이터셋을 선택합니다. 기본값은 lerobot의 것이며, chunkSize, nActionSteps, seed 및 logFreq는 편집 가능합니다.
- 백엔드는 VRAM 크기에 맞춰 GPU를 대여하고 체크포인트를 객체 스토리지에 기록합니다.
/api/inference/pod는 정책을 로컬 로봇 클라이언트에 제공합니다. 유휴 감시자가 pod를 파괴하므로, 아무것도 자동으로 청구되지 않습니다.- 동일한 작업은 CLI, MCP 서버 및 훈련 문서에 존재합니다.
데이터를 수정하지 않습니다. 카메라가 이동된 데이터셋은 여기서도 똑같이 나쁘게 훈련되며, 폼은 이를 감지할 수 없습니다. 또한 지연 시간 문제도 해결하지 않습니다. 제어 루프는 액션 단계당 20ms에서 485ms이며, 공용 인터넷 왕복 시간이 추가됩니다. ACT는 단계가 가장 짧기 때문에 가장 큰 영향을 받습니다. 60ms는 Pi0.5의 485ms에 비해 12%의 속도 저하이지만, ACT의 20ms 단계에 비하면 4배입니다. 원격 추론은 느린 픽앤플레이스에 적합하며, 빠른 반응성 움직임에는 적합하지 않습니다.

실제로 무엇이 잘못되는가
훈련 명령어 자체에는 거의 어려움이 없습니다. 문제는 그 주변의 것들에 있으며, 처음 시도할 때 문제가 발생하는 빈도에 따라 정렬됩니다.
| 증상 | 일반적인 원인 | 페이지 |
|---|---|---|
| lerobot-find-port가 아무것도 표시하지 않음 | 드라이버, 케이블 또는 노드 권한 | 팔이 감지되지 않음 |
| 녹화 시 카메라 없음 | 재부팅 시 인덱스 변경 또는 하나의 USB 컨트롤러에 두 대의 카메라 | 카메라가 감지되지 않음 |
| 훈련이 데이터셋을 거부함 | ACT는 v3.0을 원하고, GR00T는 v2.1이 필요함 | 데이터셋이 v3으로 거부됨 |
| CUDA 메모리 부족 | 배치 크기가 증가했거나 480p 대신 1080p 프레임 | 훈련 중 메모리 부족 |
| 손실은 좋지만, 팔이 아무것도 하지 않음 | 데이터에 작업이 없거나 카메라가 움직였음 | 손실은 감소하지만 정책이 아무것도 하지 않음 |
| 불규칙한 움직임 또는 에피소드 중간의 일시 정지 | 훈련 부족, 청크 경계 정지 또는 시간 초과된 추론 호출 | 정책이 움직임 중간에 멈춤 |
두 가지 항목은 강조할 가치가 있습니다. ACT는 LeRobot v3.0에서 훈련되지만, GR00T의 로더는 이 버전에서 충돌하여 v2.1이 필요하므로, ACT를 훈련하는 데이터셋이 GR00T 실행을 실패하게 할 수 있습니다. 그리고 마지막 항목에는 두 가지 해결책이 있습니다. ACT 개발자들은 불규칙한 움직임에 대해 더 많은 훈련으로 해결한다고 답했지만, n_action_steps 100으로 설정하면 실제 정지는 청크 경계에서 발생하며, 30fps에서 3.3초마다 눈에 띄는 일시 정지가 나타납니다. 추가로 알아야 할 두 가지: 단일 관절이 작동하지 않는 경우는 대개 한 번도 기록되지 않은 서보 ID, 그리고 접근하지만 닫히지 않는 그리퍼는 데모에서 그리퍼 범위가 너무 작다는 것을 의미합니다. 전체 색인: 실패 모드 페이지.
실행 비용
| 티어 | 모델 | 실행 시간 | 시간당 가격 | 실행당 비용 |
|---|---|---|---|---|
| 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 |
나중에 VLA를 원하더라도 ACT로 시작해야 하는 이유입니다. 실패한 ACT 실행은 커피 한 잔 값으로 몇 시간 내에 데이터셋에 해당 작업이 포함되어 있는지 알려줍니다. 실패한 GR00T 실행은 동일한 교훈을 얻는 데 4배의 비용이 듭니다. 다음으로 이동하는 것은 GR00T N1.7 또는 SmolVLA 이후에는 재구축이 아닌 형태 변경입니다. 배경: 비전-언어-액션 모델, SO-100 완전 가이드, 첫 번째 정책 훈련하기 및 모방 학습. 로봇 팔이 없나요? 라이브 페이지에 접속하면 가입 없이 실제 SO-100을 조종할 수 있습니다.
SO-100에서 ACT 훈련하기
이 조합에 대한 가이드: 기본 설정, GPU 티어 및 실행 비용. 데이터셋을 선택하면 백엔드가 카드를 대여하고 체크포인트를 작성합니다.
훈련 가이드 열기대신 미세 조정할 수 있는 사전 훈련된 ACT 모델이 있나요?▾
아니요. ACT는 기본 모델이 없습니다. 훈련 후에만 존재합니다. 이는 도구의 부족이 아니라 ACT의 본질입니다. 해당 논문은 작업별로 정책을 처음부터 훈련합니다. 공급업체 체크포인트를 사용하려면 GR00T N1.7 또는 Pi0.5를 사용하세요.
에피소드가 실제로 몇 개나 필요한가요?▾
50개: ALOHA가 작업당 기록한 수(가장 어려운 Thread Velcro의 경우 100개)이자 AY-Robots의 최소값입니다. lerobot은 객체 위치당 약 10개를 권장하며, 카메라는 고정되고 그립은 일관되어야 합니다. 카메라가 움직인 100개의 에피소드보다 50개의 깨끗한 에피소드가 더 좋습니다.
chunk_size를 100에서 변경해야 하나요?▾
보통은 아닙니다. 어블레이션은 k = 1에서 1%에서 k = 100에서 44%로 증가한 후 감소하므로 100이 상단에 가깝습니다. 로봇 팔이 너무 오래 커밋하는 경우, 대신 n_action_steps를 낮추세요. 30 fps에서 0.8초마다 25번 재질의합니다.
훈련 실행은 얼마나 걸리며, 일찍 중단할 수 있나요?▾
100000 steps에 대해 24 GB 카드에서 2~5시간이 소요됩니다. 체크포인트는 20000 steps마다 저장되며 --resume=true는 중단된 실행을 다시 시작하므로 일찍 중단해도 안전합니다. 다만 첫 번째 평탄한 구간에서는 중단하지 마세요. 손실이 안정화된 후 부드러움이 향상됩니다.
손실은 줄었지만 로봇 팔이 여전히 실패합니다. 어떻게 해야 하나요?▾
거의 항상 데이터셋 문제입니다. 로봇 팔에서 기록된 에피소드를 재생해 보세요. 재생이 작업을 수행하지 못하면 데이터에 해당 작업이 포함되어 있지 않은 것입니다. 그런 다음 움직인 것이 있는지, 특히 카메라가 움직였는지 확인하세요. ACT는 사전 지식이 없으므로 episode 21에서 약간의 움직임도 영구적입니다.
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