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はゼロから始まります。基盤モデルではないため、ベースチェックポイントはありません。これは、約8000万パラメータのトランスフォーマーであり、特定のタスクに対して、ご自身のロボットアームで、ご自身の照明環境下で、スクラッチからトレーニングします。
そのため、30億パラメータのVLAが152~485ミリ秒を必要とするのに対し、ACTは20ミリ秒で制御ステップを実行し、実行あたりのコストも4~12米ドルではなく1~3米ドルです。このガイドでは、lerobotを使用してSO-100で手動で進める方法を説明します。具体的には、記録、act設定、chunk_sizeとn_action_stepsの制御、100000ステップのスケジュール、ロールアウトについてです。その後、AY-Robotsでの同じ作業についても、プラットフォームが役立たない点を含めて説明します。
知っておくべきこと
- •ACTはスクラッチからトレーニングします。ベースモデル、事前学習、言語入力はありません。1つのチェックポイント、1つのタスクです。
- •論文によると、約8000万パラメータで、11 GBのRTX 2080 Tiで約5時間、推論は0.01秒です。
- •lerobotのデフォルト設定:chunk_size 100、n_action_steps 100、batch 8、lr 1e-5、100000ステップ、seed 1000。
- •AY-Robotsでは、1ステップあたり20ミリ秒で、5つの中で最速です。最低50エピソード、LeRobot v3.0、24 GBカード、実行あたり1~3米ドルです。
- •既知のタスクでは優位ですが、言語条件付けを求めると性能が低下します。
2026年8月23日、lerobot 0.6.xに対して確認済み: mainブランチのpyproject.tomlは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は、Zhao、Kumar、Levine、FinnによるALOHA論文「低コストハードウェアによるきめ細かな両手操作の学習」に由来し、arXivに2023年4月23日に公開されました。このリグは50 Hzで記録し、4台のウェブカメラが480x640ピクセル、30 fpsでストリーミングします。カメラはグリッパーに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 (main) |
|---|---|---|
| 学習率 | 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のissue 25が引用されています。アクションヘッドがhs[0]を読み取るため、7つの層すべてが実行されますが、最初の出力のみが予測に到達します。このissueは2024年4月23日以降、未解決のままです。lerobotは、記載された数値ではなく、公開された結果を生み出した動作に合わせています。--policy.n_decoder_layersを増やすと、論文で評価されなかったモデルを訓練することになります。
アクションチャンキングがその核心です
通常の行動クローニングでは、1つの観測を1つの行動にマッピングするため、誤差が累積します。逸脱によってアームが分布から外れ、より悪い行動が生じ、30ステップ後にはグリッパーがオブジェクトの近くに全くない状態になります。アクションチャンキングは、k個の行動を一度に予測して実行し、実効的な予測期間をk分の1に短縮します。また、人間データに特有の厄介な問題も処理します。テレオペレーターは一時停止することがあり、単一ステップのマルコフ的なポリシーは、以前の状況に依存する一時停止をモデル化できません。
この論文では、kを断定するのではなく、アブレーション研究を行っています。時間的アンサンブルをオフにした場合、4つの設定で平均すると、成功率はk = 1で1%からk = 100で44%に上昇し、その後、ポリシーがオープンループ制御に近づくにつれて200および400で頭打ちになります。この曲線が、デフォルトが100である理由です。
- chunk_size: デコーダが1回のフォワードパスで予測する将来のアクションの数。デフォルトは100です。
- n_action_steps: 再度クエリを実行する前に、そのうちいくつを実行するか。デフォルトは100で、lerobotはチャンク全体をオープンループで実行します。
- lerobotは
n_action_steps <= chunk_sizeを検証し、逆の場合にはValueErrorを発生させます。
運用上重要なのは、chunk_sizeをフレームレートで割った値です。lerobotのSO-100の例が使用する30 fpsでは、100のチャンクは1つの観測から約3.3秒をコミットします。タスクがそのウィンドウ内で修正を必要とする場合、n_action_stepsを下げ、chunk_sizeは下げないでください。これにより、長い予測を維持しつつ、より頻繁に再観測できます。
# 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パーセントとされており、効果はあるものの控えめであり、推論回数をチャンク長で乗算します。1ステップあたり20 msであれば許容できますが、485 msでは許容できません。推論レイテンシを参照してください。
ACTが基盤モデルを上回る時
5つの学習可能なポリシーを並べて比較し、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 |

- 24 GBカード(A100ではない)で、5つの中で最速の1アクションステップあたり20ミリ秒。
- 3 Bクラスの4~12ドルに対し、1実行あたり1~3ドル。
- 接触の多い作業で高い精度を発揮:Slide ZiplocとSlot Batteryで88%と96%を達成。これは、以前の方法ではステージ1をクリアできなかったものです。
- 言語条件付けなし:タスク文字列は無視されるため、1つのチェックポイントは1つのタスクです。
- セマンティックな事前知識なし:学習したことはすべて、あなたの50エピソードから得られたものです。
- 汎化能力が狭い:カメラを動かすと、再トレーニングが必要になります。
- 静かに失敗する:損失は減少するが、アームは何もせず、ログにも何も表示されません。
- 速度の利点は、推論がサーボの隣にある場合にのみ役立ちます。
タスクとシーンが固定されており、動作が高速かつ正確である必要がある場合はACTを選択してください。1つのチェックポイントで複数の指示をカバーする必要がある場合は、を選択してください。2つのページで意思決定を直接比較できます:およびです。公開されているベンチマークについては、がすべての数値をそのソースにリンクしています。
始める前に必要なもの
フォロワーアーム1本、用のリーダーアーム1本、少なくとも1台のカメラ、24 GB GPU。ACTは画像と関節位置のみを読み取ります。2台のカメラが最適です。固定された前方視点で物体の位置を把握し、手首カメラでが何に触れようとしているかを確認します。これは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 (アーム) | 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と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とは異なり、一度組み立てるとコネクタにアクセスできなくなります。スクリプトはグリッパーから一度に1つのモーターずつバスを巡回し、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には頼るべき事前知識がないため、あらゆる不整合が永続的になります。最もコストのかかる3つの例:エピソード20と21の間でカメラがわずかに動いた、午後に半分を記録したために光が変わった、2通りの方法で行われた把持。それぞれが完璧に見える損失曲線と、間違った場所に行くアームをもたらします。損失は減少するがポリシーは何もしない、ポリシーが特定のセットアップでのみ機能する、高品質なトレーニングデータの収集を参照してください。
トレーニングの前に、少なくとも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までの5つのチェックポイントディレクトリと、最後のシンボリックリンクが残されます。これらすべてを保持してください。最適なポリシーは、多くの場合、最後のポリシーではありません。
| 設定 | 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, 編集可能 | 予測および実行のホライズン。最初の値ではなく、2番目の値を下げてください。 |
| チェックポイント頻度 | 20000 | 利用不可 | ここではsaveStepsがGR00Tの調整項目です。 |
バッチサイズ8で2台の640x480カメラを使用するACTは、24 GBに快適に収まります。速度のためにバッチサイズを上げたり、lerobotの記録例が示す1920x1080フレームを供給したりすると、収まらなくなります。1080pで2つのResNet-18バックボーンを使用すると、メモリプロファイルは大きく異なります。より大きなカードを借りる前に、--batch_sizeを4に下げてください。「学習中のメモリ不足」を参照してください。
期間:論文では11 GB RTX 2080 Tiで約5時間、lerobotのACTページでは10万ステップあたり数時間、AY-Robots 24 GBティアでは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 セレクター(base、sentry(自動アップロード付き記録)、highlight(キーストロークで保存されるリングバッファ)、dagger(ヒューマン・イン・ザ・ループ)、episodic)を使用する lerobot-rollout です。2026年8月23日現在、ACTのドキュメントページでは、lerobot-rollout を実行するブロックの直上に「lerobot-record コマンドを使用する」と記載されています。文ではなく、コマンドに従ってください。
最終モデルではなくチェックポイントを固定するには、--policy.pretrained_revision を追加します。そのためには、実行が --save_checkpoint_to_hub=true で開始されている必要があります。これはデフォルトでオフになっています。これがないと、lerobot は最終モデルのみをプッシュし、他には何もプッシュしません。これがあると、各チェックポイントはゼロパディングされたステップでタグ付けされるため、--policy.pretrained_revision=060000 で60000ステップのものを復元します。実機で100000ステップのものと比較することは、利用可能な最も安価な実験です。
同じチェックポイントへの2つの経路
上記は手動ルートであり、機能します。プラットフォームルートは、GPUやPython環境を所有しない代わりに制御を犠牲にします。
core_scripts、training、feetech、ffmpeg を使用して lerobot 0.6.x をインストールします。- ポートを見つけ、モーターIDを設定し、両腕をキャリブレーションし、50エピソードを記録します。
- いくつかのエピソードを再生して、データにタスクが含まれていることを確認します。
- 24 GB 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のリポジトリIDまたはローカルデータセットを持ち込みます。
- ACT on SO-100ガイドを開き、モデルとデータセットを選択します。デフォルトはlerobotのものですが、chunkSize、nActionSteps、seed、logFreqは編集可能です。
- バックエンドはVRAMサイズに応じたGPUをレンタルし、チェックポイントをオブジェクトストレージに書き込みます。
- その後、
/api/inference/podがポリシーをローカルのロボットクライアントに提供します。アイドル状態のウォッチドッグがポッドを破棄するため、サイレントに課金されることはありません。 - 同じ操作は、CLI、MCPサーバー、およびトレーニングドキュメントに存在します。
データは修正されません。カメラが移動したデータセットは、ここでも同様に悪く学習され、フォームではそれを検出できません。レイテンシーの問題も解消されません。制御ループはアクションステップあたり20〜485 msで、その上にパブリックインターネットのラウンドトリップが加わります。ACTはステップが最も短いため、最も影響を受けます。60 msはPi0.5の485 msに対して12パーセントの減速ですが、ACTの20 msに対しては4倍のステップです。リモート推論は、高速な反応動作ではなく、低速なピックアンドプレースに適しています。

実際に何が問題なのか
訓練コマンド自体に問題があることはほとんどありません。問題は、その周辺にあり、初めて遭遇する頻度順に並べられています。
| 症状 | よくある原因 | ページ |
|---|---|---|
| lerobot-find-port が何も表示しない | ドライバー、ケーブル、またはノードの権限 | アームが検出されない |
| 記録時にカメラが見つからない | 再起動時にインデックスが変更された、または1つのUSBコントローラーに2台のカメラ | カメラが検出されない |
| 訓練がデータセットを拒否する | ACTはv3.0を要求し、GR00Tはv2.1を必要とする | データセットがv3として拒否される |
| CUDAメモリ不足 | バッチサイズが大きすぎる、または480pの代わりに1080pフレーム | 訓練中にメモリ不足 |
| ロスは良好だが、アームが何も動作しない | データにタスクが不足している、またはカメラが移動した | ロスは低下するが、ポリシーが何も動作しない |
| ぎくしゃくした動き、またはエピソード途中の停止 | 訓練不足、チャンク境界での停止、またはタイムアウトした推論呼び出し | ポリシーが動作中にフリーズする |
2つの行は特に強調する価値があります。ACTはLeRobot v3.0で訓練されますが、GR00Tのローダーはそれを使用するとクラッシュし、v2.1を必要とします。そのため、ACTを訓練するデータセットはGR00Tの実行を失敗させる可能性があります。そして最後の行には2つの修正策があります。ACTの作者はぎくしゃくした動きに対してより多くの訓練で対応しますが、n_action_stepsが100の場合、実際の停止がチャンク境界で発生し、30 fpsで3.3秒ごとに目に見える一時停止が生じます。さらに2つ知っておくべきことがあります。単一の関節が動かない場合は通常、書き込まれていないサーボIDであり、近づくが閉じないグリッパーは、デモンストレーションにおけるグリッパーの可動範囲が小さすぎることを意味します。完全なインデックス:失敗モードのページ。
実行にかかる費用
| ティア | モデル | 実行時間 | 1時間あたりの料金 | 1回の実行あたりのコスト |
|---|---|---|---|---|
| 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の実行が失敗してもコーヒー1杯程度の費用で済み、数時間以内にデータセットにそのタスクが含まれているかどうかがわかります。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の場合、25回の再クエリは0.8秒ごとに行われます。
トレーニングの実行にはどのくらい時間がかかり、途中で停止できますか?▾
100000ステップの場合、24 GBカードで2〜5時間かかります。チェックポイントは20000ステップごとに保存され、--resume=trueで中断した実行を再開できるため、早期停止は安全です。ただし、最初の平坦な区間では停止しないでください。損失がプラトーに達した後で滑らかさが向上します。
損失は減少しましたが、アームはまだ失敗します。どうすればよいですか?▾
ほとんどの場合、データセットが原因です。記録されたエピソードをアームで再生してください。再生がタスクを実行しない場合、データにはそのタスクが含まれていません。次に、何か、特にカメラが動いていないか確認してください。ACTには事前知識がないため、エピソード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