
ฝึก Action Chunking Transformer ตั้งแต่เริ่มต้นบน SO-100 ด้วย lerobot: การตั้งค่า act config, chunk_size และ n_action_steps, กำหนดการ 100000 ขั้นตอน, การอนุมาน 20 มิลลิวินาที
ACT เป็นตัวที่แตกต่างจากนโยบาย SO-100 อื่นๆ GR00T N1.7 และ N1.5 เริ่มต้นจาก nvidia/GR00T-N1.7-3B และ nvidia/GR00T-N1.5-3B, Pi0.5 จาก lerobot/pi05_base. ACT เริ่มต้นจากศูนย์: ไม่มีจุดตรวจสอบพื้นฐาน เนื่องจากไม่ใช่โมเดลพื้นฐาน เป็นทรานส์ฟอร์เมอร์ที่มีพารามิเตอร์ประมาณ 80 ล้านตัวที่คุณฝึกฝนตั้งแต่เริ่มต้นสำหรับงานเดียว บนแขนหุ่นยนต์ของคุณ ภายใต้สภาพแสงของคุณ
นั่นคือเหตุผลที่มันทำงานขั้นตอนการควบคุมได้ใน 20 ms ในขณะที่ VLA ที่มีพารามิเตอร์ 3 พันล้านตัวต้องการ 152 ถึง 485 ms และมีค่าใช้จ่าย 1 ถึง 3 USD ต่อการรัน แทนที่จะเป็น 4 ถึง 12 คู่มือนี้จะแนะนำเส้นทางแบบแมนนวลด้วย lerobot บน SO-100: การบันทึก, การกำหนดค่า act, สิ่งที่ chunk_size และ n_action_steps ควบคุม, ตารางเวลา 100000 ขั้นตอน, การทดสอบ จากนั้นงานเดียวกันบน AY-Robots รวมถึงส่วนที่แพลตฟอร์มไม่ช่วย
สิ่งที่คุณต้องรู้
- •ACT ฝึกฝนตั้งแต่เริ่มต้น: ไม่มีโมเดลพื้นฐาน, ไม่มีการฝึกฝนล่วงหน้า, ไม่มีอินพุตภาษา หนึ่งจุดตรวจสอบ, หนึ่งงาน
- •เอกสาร: พารามิเตอร์ประมาณ 80 ล้านตัว, ใช้เวลาประมาณ 5 ชั่วโมงบน RTX 2080 Ti ขนาด 11 GB, ใช้เวลาอนุมาน 0.01 s
- •ค่าเริ่มต้นของ lerobot: chunk_size 100, n_action_steps 100, batch 8, lr 1e-5, 100000 steps, seed 1000
- •บน AY-Robots: 20 ms ต่อขั้นตอน, เร็วที่สุดในห้าตัว อย่างน้อย 50 ตอน, LeRobot v3.0, การ์ด 24 GB, 1 ถึง 3 USD ต่อการรัน
- •มันชนะในงานที่เคยเห็น และแพ้ทันทีที่คุณต้องการการปรับสภาพด้วยภาษา
ตรวจสอบเมื่อ 23 สิงหาคม 2026 เทียบกับ lerobot 0.6.x: pyproject.toml บน main อ่านค่า version = "0.6.2", แท็กล่าสุด v0.6.1, 3 สิงหาคม 2026. บทช่วยสอนที่เริ่มต้นด้วย python lerobot/scripts/train.py มีมาก่อนจุดเข้าใช้งานคอนโซล lerobot-train, lerobot-record และ lerobot-rollout.
ACT คืออะไรกันแน่
Action Chunking with Transformers มาจากเอกสาร ALOHA ที่ชื่อว่า Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware, โดย Zhao, Kumar, Levine และ Finn, arXiv, 23 เมษายน 2023. อุปกรณ์บันทึกข้อมูลที่ 50 Hz ด้วยเว็บแคมสี่ตัวที่สตรีมภาพขนาด 480x640 ที่ 30 fps: สองตัวที่ตัวจับ, หนึ่งตัวด้านบน, หนึ่งตัวด้านหน้า. บทคัดย่ออ้างว่ามีทักษะหกอย่างที่ประสบความสำเร็จ 80 ถึง 90 เปอร์เซ็นต์ ซึ่งรวมถึงการเปิดถ้วยเครื่องปรุงรสโปร่งแสงและการใส่แบตเตอรี่ โดยใช้เวลาสาธิต 10 นาที
ส่วนเนื้อหาของเอกสารมีประโยชน์มากขึ้นเมื่อวางแผนการบันทึก: การสาธิต 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 ระบุว่าการใช้งานดั้งเดิมมีข้อผิดพลาดที่ทำให้ใช้เพียงเลเยอร์แรกเท่านั้น โดยอ้างอิงถึง ปัญหาที่ 25 ใน tonyzhaozh/act: ส่วนหัวของการกระทำอ่านค่า hs[0] ดังนั้นเลเยอร์ทั้งเจ็ดจึงทำงาน แต่มีเพียงเอาต์พุตแรกเท่านั้นที่ไปถึงการคาดการณ์ ปัญหานั้นยังคงเปิดอยู่และไม่มีคำตอบตั้งแต่ 23 เมษายน 2024 lerobot ตรงกับพฤติกรรมที่สร้างผลลัพธ์ที่เผยแพร่ ไม่ใช่ตัวเลขที่พิมพ์ออกมา หากเพิ่ม --policy.n_decoder_layers คุณจะฝึกโมเดลที่เอกสารไม่เคยประเมิน
การแบ่งการกระทำเป็นส่วนๆ คือแนวคิดหลัก
การโคลนพฤติกรรมแบบธรรมดาจะจับคู่การสังเกตหนึ่งครั้งกับการกระทำหนึ่งครั้ง และข้อผิดพลาดจะสะสม: การเบี่ยงเบนทำให้แขนหลุดจากขอบเขตการกระจายตัว ทำให้เกิดการกระทำที่แย่ลง และสามสิบขั้นตอนต่อมา ตัวจับก็อยู่ห่างจากวัตถุมาก การแบ่งการกระทำเป็นส่วนๆ คาดการณ์การกระทำ k ครั้งพร้อมกันและดำเนินการ ทำให้ขอบเขตการทำงานที่มีประสิทธิภาพลดลงด้วยปัจจัย k นอกจากนี้ยังจัดการกับปัญหาเฉพาะของข้อมูลมนุษย์: ผู้ควบคุมระยะไกลหยุดชั่วคราว และ Markovian แบบขั้นตอนเดียว นโยบาย ไม่สามารถจำลองการหยุดชั่วคราวที่ขึ้นอยู่กับสิ่งที่เกิดขึ้นก่อนหน้านี้ได้
เอกสารนี้ทำการทดลองเพื่อหาค่า k แทนที่จะยืนยันค่าใดค่าหนึ่ง เมื่อปิดการรวมแบบชั่วคราว โดยเฉลี่ยจากการตั้งค่าสี่แบบ อัตราความสำเร็จเพิ่มขึ้นจาก 1 เปอร์เซ็นต์ที่ k = 1 เป็น 44 เปอร์เซ็นต์ที่ k = 100 จากนั้นลดลงที่ 200 และ 400 เมื่อนโยบายเข้าใกล้การควบคุมแบบวงเปิด เส้นโค้งนั้นคือเหตุผลที่ค่าเริ่มต้นคือ 100
- chunk_size: จำนวนการกระทำในอนาคตที่ตัวถอดรหัสคาดการณ์ต่อการส่งผ่านหนึ่งครั้ง ค่าเริ่มต้น 100.
- n_action_steps: จำนวนการกระทำที่คุณดำเนินการก่อนที่จะสอบถามอีกครั้ง ค่าเริ่มต้น 100 ดังนั้น lerobot จะรันทั้งส่วนแบบ open loop.
- lerobot ตรวจสอบว่า
n_action_steps <= chunk_sizeและจะส่งValueErrorหากคุณตั้งค่ากลับกัน
สิ่งที่สำคัญในการปฏิบัติงานคือ chunk_size หารด้วยอัตราเฟรม ที่ 30 fps ที่ตัวอย่าง SO-100 ของ lerobot ใช้, ส่วนข้อมูล 100 รายการจะใช้เวลาประมาณ 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 หากไม่เป็นไปตามนั้น การรวมแบบ Ensembling จะสอบถามนโยบายในทุกช่วงเวลาและผสมผสานการคาดการณ์ที่ทับซ้อนกันสำหรับช่วงเวลานั้นด้วยน้ำหนัก w_i = exp(-m * i) โดยที่ค่าที่เก่าที่สุดจะได้รับ w_0 เอกสารระบุว่าอยู่ที่ 3.3 เปอร์เซ็นต์สำหรับ ACT: ซึ่งเป็นค่าจริงแต่ไม่มากนัก และมันจะคูณจำนวนการอนุมานด้วยความยาวของ chunk สามารถทำได้ที่ 20 ms ต่อขั้นตอน แต่ไม่ใช่ที่ 485 ms ดู เวลาแฝงของการอนุมาน.
เมื่อ ACT เหนือกว่าโมเดลพื้นฐาน
นโยบายที่ฝึกฝนได้ทั้งห้าแบบเคียงข้างกัน พร้อมตัวเลขที่ AY-Robots วัดและใช้ในการกำหนดขนาด GPU ที่เช่า
| นโยบาย | ตระกูล | พารามิเตอร์ | ต่อขั้นตอน | ระดับ GPU | จำนวนตอนขั้นต่ำ | ชุดข้อมูล |
|---|---|---|---|---|---|---|
| [object Object] | Chunking transformer, สร้างใหม่ตั้งแต่ต้น | ~80 M | 20 ms | RTX 4090 / 24 GB | 50 | LeRobot v3.0 |
| [object Object] | VLA ขนาดกะทัดรัด | ~450 M | 245 ms | RTX 4090 / 24 GB | 30 | LeRobot v3.0 |
| [object Object] | VLA พื้นฐาน, ส่วนหัวแบบ diffusion | ~3 B (~40 M trained) | 152 ms | A100 / H100 80 GB | 50 | LeRobot v2.0 or v2.1 |
| [object Object] | VLA พื้นฐาน, รุ่นก่อนหน้า | ~3 B | 165 ms | A100 / H100 80 GB | 50 | LeRobot v2.0 or v2.1 |
| [object Object] | Flow-matching VLA, ดู | ~3 B, PaliGemma backbone | 485 ms | A100 / H100 80 GB | 50 | LeRobot v3.0 |

- 20 มิลลิวินาทีต่อขั้นตอนการกระทำ เร็วที่สุดในห้าแบบ บนการ์ด 24 GB ไม่ใช่ A100
- 1 ถึง 3 ดอลลาร์สหรัฐต่อการรัน เทียบกับ 4 ถึง 12 ดอลลาร์สหรัฐสำหรับคลาส 3 B
- แม่นยำในงานที่ต้องสัมผัสมากที่เคยเห็น: 88 และ 96 เปอร์เซ็นต์สำหรับ Slide Ziploc และ Slot Battery ซึ่งวิธีการก่อนหน้านี้ไม่เคยผ่านด่านแรก
- ไม่มีการปรับตามภาษา: สตริงงานจะถูกละเว้น ดังนั้นหนึ่งเช็คพอยต์จึงเท่ากับหนึ่งงาน
- ไม่มีความรู้เชิงความหมายมาก่อน: ทุกสิ่งที่เรียนรู้มาจาก 50 ตอนของคุณ
- การสรุปผลแคบ: ย้ายกล้องแล้วคุณต้องฝึกใหม่
- ล้มเหลวอย่างเงียบๆ: ค่า loss ลดลง แขนไม่ทำงาน บันทึกไม่มีอะไรบอก
- ข้อได้เปรียบด้านความเร็วจะช่วยได้ก็ต่อเมื่อการอนุมานอยู่ใกล้กับเซอร์โว
เลือก ACT เมื่องานและฉากถูกกำหนดตายตัว และการเคลื่อนไหวต้องรวดเร็วและแม่นยำ เลือก เมื่อหนึ่งเช็คพอยต์ต้องครอบคลุมหลายคำสั่ง สองหน้าเปรียบเทียบการตัดสินใจแบบตัวต่อตัว: และ สำหรับเกณฑ์มาตรฐานที่เผยแพร่ เชื่อมโยงทุกตัวเลขไปยังแหล่งที่มา
สิ่งที่คุณต้องมีก่อนเริ่มต้น
แขนผู้ตามหนึ่งข้าง แขนผู้นำหนึ่งข้างสำหรับ กล้องอย่างน้อยหนึ่งตัว GPU ขนาด 24 GB ACT อ่านเฉพาะภาพและตำแหน่งข้อต่อ กล้องสองตัวคือจุดที่เหมาะสมที่สุด: มุมมองด้านหน้าแบบคงที่สำหรับตำแหน่งของสิ่งต่างๆ กล้องข้อมือสำหรับสิ่งที่ กำลังจะสัมผัส เช่นเดียวกับใน ALOHA
| แขนกล | เซอร์โว | แรงดันไฟฟ้า | ค่าใช้จ่ายชิ้นส่วน | สถานะ |
|---|---|---|---|---|
| SO-100 | Feetech STS3215 | 7.4 V | ~110 ถึง 150 EUR | รองรับเต็มรูปแบบ, แขนอ้างอิง |
| SO-101 | Feetech STS3215 | 7.4 V | ~130 ถึง 170 EUR | รองรับเต็มรูปแบบ |
| Koch v1.1 | Dynamixel XL330 / XL430 | ราง 5 V และ 12 V | ~250 ถึง 350 EUR | เข้ากันได้ |
| LeKiwi | Feetech STS3215 (แขนกล) | แขนกล 7.4 V, ฐาน 12 V | ~400 ถึง 500 EUR | เข้ากันได้ |
SO-100 และ SO-101 ใช้เซอร์โว Feetech STS3215 บนราง 7.4 V การจ่ายไฟ 12 V ให้กับเซอร์โวเหล่านี้จะทำให้เสียหาย โดยมักจะเงียบพอที่ผู้คนจะโทษซอฟต์แวร์ก่อน และแหล่งจ่ายไฟ Koch 12 V ก็สามารถติดตั้งเข้ากับบอร์ด SO-100 ได้พอดี ตรวจสอบฉลาก อาการ: เซอร์โวไม่ตอบสนอง, แขนกระตุกแล้วอ่อนแรง นอกจากนี้ SO-100 เทียบกับ SO-101
จากแขนกลเปล่าสู่ชุดข้อมูลที่บันทึกไว้
ขั้นตอนด้านล่างนี้เป็นของ lerobot 0.6.x หากคุณมีแขนกลที่ปรับเทียบแล้วและชุดข้อมูล ให้ข้ามไปได้เลย มิฉะนั้น คู่มือเริ่มต้นใช้งาน SO-100 ครอบคลุมการประกอบ, ส่วน คำแนะนำการบันทึก ครอบคลุมการจับภาพ และ เอกสารชุดข้อมูล ครอบคลุมรูปแบบ
- 1ติดตั้ง lerobot พร้อมส่วนเสริมที่ถูกต้อง
การบันทึกต้องใช้
core_scripts, การฝึกอบรมtraining, เซอร์โว 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 - 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 จากนั้นกวาดแต่ละข้อต่อให้เคลื่อนที่เต็มช่วง การปรับเทียบ ช่วยให้ policy ที่ฝึกบนแขนข้างหนึ่งสามารถทำงานบนแขนอีกข้างหนึ่งได้ ใช้
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 - 6บันทึก 50 ตอน
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, แสงที่เปลี่ยนไปเพราะคุณบันทึกครึ่งหนึ่งของชุดข้อมูลในช่วงบ่าย, การจับที่ทำสองวิธี แต่ละอย่างให้เส้นโค้งการสูญเสียที่ดูสมบูรณ์แบบและแขนที่เคลื่อนที่ไปยังตำแหน่งที่ไม่ถูกต้อง ดู การสูญเสียลดลงแต่ policy ไม่ทำงาน, policy ทำงานได้ในบางการตั้งค่าเท่านั้น และ การรวบรวมข้อมูลการฝึกอบรมคุณภาพสูง
ก่อนการฝึกอบรม ให้เล่นซ้ำอย่างน้อยห้าตอน จัดเก็บสตรีมกล้อง, สถานะข้อต่อ และการกระทำต่อ และการเล่นซ้ำจะส่งการกระทำเหล่านั้นกลับไปยังแขน หากการเล่นซ้ำไม่ทำงานตามที่กำหนด ข้อมูลนั้นก็ไม่มีอยู่ และการฝึกอบรมก็จะไม่สร้างมันขึ้นมา
lerobot-replay \
--robot.type=so100_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_follower \
--dataset.repo_id=${HF_USER}/so100_cube \
--dataset.episode=0การฝึกนโยบาย ACT
นี่คือคำสั่งทั้งหมด ทุกอย่างที่เฉพาะเจาะจงกับ ACT ได้ถูกตั้งค่าเป็นค่าเริ่มต้นอยู่แล้ว ซึ่งเป็นเหตุผลที่หน้า ACT ของ lerobot แนะนำให้เริ่มต้นด้วยสิ่งเหล่านี้
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 ขั้นตอน กำหนดการมาจาก lerobot's train config ไม่ใช่ ACTConfig: 100000 ขั้นตอน, แบตช์ 8, ซีด 1000, เช็คพอยต์ ทุกๆ 20000 ขั้นตอน, บันทึกข้อมูลทุกๆ 200 ขั้นตอน
การรันเต็มรูปแบบจะเหลือไดเรกทอรีเช็คพอยต์ห้าชุด ตั้งแต่ 020000 ถึง 100000 พร้อมด้วย symlink สุดท้าย เก็บไว้ทั้งหมด: นโยบายที่ดีที่สุดมักจะไม่ใช่ตัวสุดท้าย
| การตั้งค่า | ค่าเริ่มต้นของ lerobot | ฟอร์ม AY-Robots ACT | ความคิดเห็น |
|---|---|---|---|
| ขนาดแบตช์ | 8 | 8 | ลดค่านี้ก่อนหากพบข้อจำกัด VRAM |
| อัตราการเรียนรู้ | 1e-5 | 1e-5 | เหมือนกับในเอกสาร ALOHA |
| จำนวนขั้นตอนสูงสุด | 100000 | 100000 | ประมาณจุดที่ชุดข้อมูล 50 ตอนหยุดพัฒนา |
| การสะสมเกรเดียนต์ | 1 | 1, does not apply | เปลี่ยนขนาดแบตช์แทน |
| ซีด | 1000 | exposed | จุดเริ่มต้น tyro ของ GR00T ไม่มีซีด; การรัน ACT เป็นแบบที่ทำซ้ำได้ |
| chunk_size / n_action_steps | 100 / 100 | 100 / 100, editable | ขอบเขตการคาดการณ์และการดำเนินการ ลดตัวที่สอง ไม่ใช่ตัวแรก |
| ความถี่ในการบันทึกเช็คพอยต์ | 20000 | not exposed | saveSteps เป็นตัวปรับของ GR00T ในที่นี้ |
ACT ที่ขนาดแบตช์ 8 พร้อมกล้อง 640x480 สองตัว สามารถทำงานได้อย่างสบายบน 24 GB มันจะหยุดทำงานเมื่อผู้คนเพิ่มขนาดแบตช์เพื่อความเร็ว หรือป้อนเฟรม 1920x1080 ที่ตัวอย่างการบันทึกของ lerobot แสดงให้เห็น ResNet-18 backbones สองตัวที่ 1080p มีโปรไฟล์หน่วยความจำที่แตกต่างกันมาก ลด --batch_size เป็น 4 ก่อนที่จะเช่าการ์ดที่ใหญ่ขึ้น ดู หน่วยความจำไม่พอในการฝึกอบรม
ระยะเวลา: ประมาณ 5 ชั่วโมงบน RTX 2080 Ti 11 GB ตามที่ระบุในเอกสาร, สองสามชั่วโมงสำหรับ 100k สเต็ปตามหน้า ACT ของ lerobot, 2 ถึง 5 ชั่วโมงบน AY-Robots 24 GB tier. อย่าตัดให้สั้นลง. README ของ reference repo ระบุว่านโยบายที่กระตุกหรือหยุดชะงักมักต้องการเพียงแค่ การฝึกเพิ่มขึ้น, เนื่องจากความสำเร็จและความราบรื่นยังคงดีขึ้นหลังจากที่ loss คงที่: สำหรับข้อมูลจริง มันต้องการอย่างน้อย 5000 epochs หรือ 3 ถึง 4 เท่าของความยาวอีกครั้งหลังจากที่ loss คงที่แล้ว
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 ไม่ช่วยอะไร เนื่องจากมันต้องการ pretrained checkpoint. สามารถละเว้น task string ได้; ตัวอย่างของ 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 จะเป็น lerobot-rollout พร้อมตัวเลือก --strategy.type ได้แก่: base, sentry (บันทึกพร้อมอัปโหลดอัตโนมัติ), highlight (บัฟเฟอร์วงแหวนที่บันทึกด้วยการกดแป้นพิมพ์), dagger (มนุษย์ร่วมควบคุม) และ episodic ณ วันที่ 23 สิงหาคม 2026 หน้าเอกสาร ACT ยังคงระบุว่า "using the lerobot-record command" อยู่เหนือบล็อกที่รัน lerobot-rollout ให้ทำตามคำสั่ง ไม่ใช่ประโยค
หากต้องการปักหมุดจุดตรวจสอบแทนโมเดลสุดท้าย ให้เพิ่ม --policy.pretrained_revision. ซึ่งต้องให้การรันเริ่มต้นด้วย --save_checkpoint_to_hub=true, ซึ่งปิดใช้งานโดยค่าเริ่มต้น: หากไม่มี lerobot จะอัปโหลดเฉพาะโมเดลสุดท้ายเท่านั้น หากมี จุดตรวจสอบแต่ละจุดจะถูกแท็กด้วยขั้นตอนที่เติมศูนย์ ดังนั้น --policy.pretrained_revision=060000 จะกู้คืนจุดตรวจสอบที่ขั้นตอน 60000 การเปรียบเทียบกับ 100000 บนแขนหุ่นยนต์จริงเป็นการทดลองที่ประหยัดที่สุด
สองเส้นทางสู่จุดตรวจสอบเดียวกัน
ทั้งหมดที่กล่าวมาข้างต้นคือเส้นทางแบบแมนนวลและใช้งานได้ดี เส้นทางแพลตฟอร์มแลกเปลี่ยนการควบคุมกับการไม่ต้องเป็นเจ้าของ GPU หรือสภาพแวดล้อม Python
- ติดตั้ง lerobot 0.6.x พร้อม
core_scripts,training,feetech, ffmpeg - ค้นหาพอร์ต, ตั้งค่า ID มอเตอร์, ปรับเทียบแขนทั้งสองข้าง, บันทึก 50 ตอน
- เล่นซ้ำบางตอนเพื่อยืนยันว่าข้อมูลมีงานที่ต้องการ
- เช่าหรือเป็นเจ้าของ GPU ขนาด 24 GB, จับคู่ 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, เพิ่มกล้อง, fork ตัวเทรนเนอร์ สำหรับการวิจัยมากกว่าการส่งมอบงาน แพลตฟอร์มอาจเป็นสิ่งรบกวน
- บันทึกด้วย ไคลเอนต์เดสก์ท็อป หรือนำ Hugging Face repo id หรือชุดข้อมูลในเครื่องมาใช้
- เปิด คู่มือ ACT บน SO-100 และเลือกโมเดลและชุดข้อมูล ค่าเริ่มต้นคือของ lerobot; chunkSize, nActionSteps, seed และ logFreq สามารถแก้ไขได้
- แบ็กเอนด์จะเช่า GPU ที่มีขนาดตาม VRAM และเขียนเช็คพอยต์ไปยังที่เก็บอ็อบเจกต์
- จากนั้น
/api/inference/podจะให้บริการนโยบายแก่ไคลเอนต์หุ่นยนต์ในเครื่อง ตัวเฝ้าระวังที่ไม่ได้ใช้งานจะทำลายพ็อด ดังนั้นจึงไม่มีการเรียกเก็บเงินโดยไม่แจ้งให้ทราบ - การดำเนินการเดียวกันนี้มีอยู่ใน CLI, เซิร์ฟเวอร์ MCP และ เอกสารการฝึกอบรม
มันไม่ได้แก้ไขข้อมูลของคุณ: ชุดข้อมูลที่มีกล้องเคลื่อนที่ยังคงฝึกได้ไม่ดีเท่าเดิมที่นี่ และฟอร์มไม่สามารถตรวจจับได้ และมันก็ไม่ได้แก้ปัญหาความหน่วงด้วย วงจรควบคุมอยู่ที่ 20 ถึง 485 ms ต่อขั้นตอนการดำเนินการ โดยมีการเดินทางไปกลับผ่านอินเทอร์เน็ตสาธารณะเพิ่มเติม และ ACT ได้รับผลกระทบมากที่สุดเพราะขั้นตอนของมันสั้นที่สุด: 60 ms คือการชะลอตัว 12 เปอร์เซ็นต์เมื่อเทียบกับ 485 ms ของ Pi0.5 แต่เป็นสี่เท่าของขั้นตอน 20 ms ของ ACT การอนุมานระยะไกลเหมาะสำหรับงานหยิบและวางที่ช้า ไม่ใช่การเคลื่อนไหวตอบสนองที่รวดเร็ว

สิ่งที่ผิดพลาดจริงๆ
ปัญหาแทบทั้งหมดไม่ได้อยู่ที่คำสั่งการฝึก แต่อยู่ที่สิ่งรอบข้าง โดยเรียงตามความถี่ที่มักจะเกิดปัญหาตั้งแต่ครั้งแรก
| อาการ | สาเหตุทั่วไป | หน้า |
|---|---|---|
| lerobot-find-port ไม่แสดงผล | ไดรเวอร์, สายเคเบิล หรือสิทธิ์ของโหนด | ไม่พบแขนกล |
| ไม่พบกล้องขณะบันทึก | ดัชนีเปลี่ยนไปหลังรีบูต หรือมีกล้องสองตัวบนคอนโทรลเลอร์ USB เดียวกัน | ไม่พบกล้อง |
| การฝึกปฏิเสธชุดข้อมูล | ACT ต้องการ v3.0, GR00T ต้องการ v2.1 | ชุดข้อมูลถูกปฏิเสธเนื่องจากเป็น v3 |
| หน่วยความจำ CUDA ไม่พอ | ขนาดแบทช์เพิ่มขึ้น หรือใช้เฟรม 1080p แทน 480p | หน่วยความจำไม่พอในการฝึก |
| ค่า Loss ดูดี แต่แขนกลไม่ทำงาน | ข้อมูลขาดงานที่กำหนด หรือกล้องเคลื่อนที่ | ค่า Loss ลดลง แต่ Policy ไม่ทำงาน |
| การเคลื่อนไหวติดขัด หรือหยุดชะงักกลางตอน | ฝึกไม่เพียงพอ, การหยุดชะงักที่ขอบเขตของส่วนข้อมูล, หรือการเรียก Inference หมดเวลา | Policy หยุดชะงักกลางการเคลื่อนไหว |
มีสองแถวที่ควรเน้นย้ำ ACT ฝึกบน LeRobot v3.0 ในขณะที่ตัวโหลดของ GR00T จะขัดข้องเมื่อใช้เวอร์ชันนี้และต้องการ v2.1 ดังนั้นชุดข้อมูลที่ใช้ฝึก ACT อาจทำให้การรันของ GR00T ล้มเหลวได้ และแถวสุดท้ายมีสองวิธีแก้ไข: ผู้เขียน ACT แนะนำให้แก้ไขการเคลื่อนไหวที่ติดขัดด้วยการฝึกเพิ่มเติม ในขณะที่ n_action_steps เป็น 100 การหยุดชะงักจริงจะเกิดขึ้นที่ขอบเขตของส่วนข้อมูล ซึ่งเป็นการหยุดชั่วคราวที่เห็นได้ชัดทุก 3.3 วินาทีที่ 30 fps อีกสองสิ่งที่ควรรู้: ข้อต่อที่ตายไปหนึ่งข้อโดยปกติแล้วคือ รหัสเซอร์โวที่ไม่เคยถูกเขียน, และ กริปเปอร์ที่เข้าใกล้แต่ไม่เคยปิด หมายถึงช่วงการทำงานของกริปเปอร์น้อยเกินไปในการสาธิต ดัชนีทั้งหมด: หน้าโหมดความล้มเหลว.
ค่าใช้จ่ายในการรัน
| ระดับ | โมเดล | เวลาทำงาน | ราคาต่อชั่วโมง | ค่าใช้จ่ายต่อการรัน |
|---|---|---|---|---|
| RTX 4090 / 24 GB | ACT, SmolVLA | 2 to 5 hours | 0.30 to 0.60 USD | ประมาณ 1 ถึง 3 USD |
| A100 80 GB / H100 | GR00T N1.7, GR00T N1.5, Pi0.5 | 3 to 6 hours | 1.20 to 2.00 USD | ประมาณ 4 ถึง 12 USD |
นี่คือเหตุผลที่ควรเริ่มต้นด้วย ACT แม้ว่าคุณจะต้องการ VLA ในภายหลัง การรัน ACT ที่ล้มเหลวมีค่าใช้จ่ายเท่ากับกาแฟหนึ่งแก้ว และจะบอกคุณภายในไม่กี่ชั่วโมงว่าชุดข้อมูลของคุณมีงานนั้นหรือไม่ การรัน GR00T ที่ล้มเหลวมีค่าใช้จ่ายเป็นสี่เท่าสำหรับบทเรียนเดียวกัน การย้ายไปใช้ GR00T N1.7 หรือ SmolVLA หลังจากนั้นเป็นการเปลี่ยนรูปแบบ ไม่ใช่การสร้างใหม่ ข้อมูลพื้นฐาน: โมเดลการมองเห็น-ภาษา-การกระทำ, คู่มือ SO-100 ฉบับสมบูรณ์, ฝึกนโยบายแรกของคุณ และ การเรียนรู้แบบเลียนแบบ. ไม่มีแขนหุ่นยนต์? หน้าถ่ายทอดสด สตรีม SO-100 จริงให้ขับเคลื่อนได้โดยไม่ต้องลงทะเบียน
ฝึก ACT บน SO-100 ของคุณ
คู่มือสำหรับชุดค่าผสมนี้โดยเฉพาะ: ค่าเริ่มต้น, ระดับ GPU และค่าใช้จ่ายในการรัน เลือกชุดข้อมูล, แบ็กเอนด์จะเช่าการ์ดและเขียนเช็คพอยต์
เปิดคู่มือการฝึกมีโมเดล ACT ที่ได้รับการฝึกมาล่วงหน้าให้ฉันสามารถปรับแต่งได้หรือไม่?▾
ไม่มี ACT ไม่มีโมเดลพื้นฐาน มันจะเกิดขึ้นหลังจากที่คุณฝึกมันเท่านั้น นี่ไม่ใช่ช่องว่างในเครื่องมือ แต่มันคือสิ่งที่ ACT เป็น: เอกสารนี้ฝึกนโยบายตั้งแต่เริ่มต้นสำหรับแต่ละงาน สำหรับเช็คพอยต์ของผู้จำหน่าย ให้ใช้ GR00T N1.7 หรือ Pi0.5
ฉันต้องการจำนวนตอนเท่าไรกันแน่?▾
50: สิ่งที่ ALOHA บันทึกไว้ต่องาน (100 สำหรับ Thread Velcro ซึ่งเป็นงานที่ยากที่สุด) และค่าต่ำสุดของ AY-Robots lerobot แนะนำประมาณ 10 ต่อตำแหน่งวัตถุ โดยกล้องต้องอยู่กับที่และการจับต้องสอดคล้องกัน ห้าสิบตอนที่สะอาดดีกว่าร้อยตอนที่กล้องเคลื่อนที่
ฉันควรเปลี่ยน chunk_size จาก 100 หรือไม่?▾
โดยปกติแล้วไม่ การตัดทอนจะเพิ่มขึ้นจาก 1 เปอร์เซ็นต์ที่ k = 1 เป็น 44 เปอร์เซ็นต์ที่ k = 100 และลดลงหลังจากนั้น ดังนั้น 100 จึงอยู่ใกล้จุดสูงสุด หากแขนหุ่นยนต์ทำงานนานเกินไป ให้ลด n_action_steps แทน: ที่ 30 fps, 25 การสอบถามซ้ำทุก 0.8 วินาที
การฝึกใช้เวลานานเท่าไร และฉันสามารถหยุดก่อนกำหนดได้หรือไม่?▾
สองถึงห้าชั่วโมงบนการ์ด 24 GB สำหรับ 100000 ขั้นตอน เช็คพอยต์จะถูกบันทึกทุก 20000 ขั้นตอน และ --resume=true จะดำเนินการต่อจากการรันเดิม ดังนั้นการหยุดก่อนกำหนดจึงปลอดภัย แต่อย่าหยุดที่ช่วงราบแรก: ความราบรื่นจะดีขึ้นหลังจากที่ค่า loss คงที่
ค่า Loss ลดลง แต่แขนหุ่นยนต์ยังคงล้มเหลว จะทำอย่างไรดี?▾
เกือบตลอดเวลาเป็นที่ชุดข้อมูล ลองเล่นตอนที่บันทึกไว้ที่แขนหุ่นยนต์อีกครั้ง: หากการเล่นซ้ำไม่สามารถทำงานได้ แสดงว่าข้อมูลไม่มีงานนั้นอยู่ จากนั้นตรวจสอบว่ามีอะไรเคลื่อนที่หรือไม่ โดยเฉพาะกล้อง 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