เมทริกซ์การฝึกของ AY-Robots ที่มีห้าแถวสำหรับนโยบายและสี่คอลัมน์สำหรับแขนหุ่นยนต์ โดยแต่ละเซลล์เชื่อมโยงไปยังคู่มือการฝึกโมเดลและแขนเฉพาะ
ACTSO-100lerobotการเรียนรู้แบบเลียนแบบการฝึกนโยบาย

วิธีฝึก ACT บน SO-100 ตั้งแต่เริ่มต้น

AY-Robots ResearchAugust 23, 202616 นาทีในการอ่าน

ฝึก 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, ตาราง IIIlerobot บน main
อัตราการเรียนรู้1e-5optimizer_lr = 1e-5
ขนาดแบตช์8batch_size = 8, in TrainPipelineConfig not ACTConfig
เลเยอร์ของตัวเข้ารหัส / ตัวถอดรหัส4 / 7n_encoder_layers = 4 / n_decoder_layers = 1
ขนาดชิ้นส่วน k100chunk_size = 100
มิติแฝงของ zไม่มี; รูปที่ 11 แสดงการฉายภาพ 32 ถึง 512latent_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: คุณยังคงการคาดการณ์ระยะยาวไว้และสังเกตการณ์บ่อยขึ้น

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
การลดส่วนที่ดำเนินการของ chunk โดยไม่ลดการคาดการณ์
กับดักของการรวมแบบ temporal ensembling

เมื่อตั้งค่า --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 M20 msRTX 4090 / 24 GB50LeRobot v3.0
[object Object]VLA ขนาดกะทัดรัด~450 M245 msRTX 4090 / 24 GB30LeRobot v3.0
[object Object]VLA พื้นฐาน, ส่วนหัวแบบ diffusion~3 B (~40 M trained)152 msA100 / H100 80 GB50LeRobot v2.0 or v2.1
[object Object]VLA พื้นฐาน, รุ่นก่อนหน้า~3 B165 msA100 / H100 80 GB50LeRobot v2.0 or v2.1
[object Object]Flow-matching VLA, ดู ~3 B, PaliGemma backbone485 msA100 / H100 80 GB50LeRobot v3.0
The AY-Robots policies page showing a comparison table of ACT, SmolVLA, GR00T N1.5, GR00T N1.7 and Pi0.5 with parameter counts, GPU requirements, inference latency and minimum episode counts
ตาราง /policies: ACT มีจำนวนพารามิเตอร์น้อยที่สุดและใช้เวลาต่อขั้นตอนสั้นที่สุด
การฝึก ACT จากศูนย์
ข้อดี
  • 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-100Feetech STS32157.4 V~110 ถึง 150 EURรองรับเต็มรูปแบบ, แขนอ้างอิง
SO-101Feetech STS32157.4 V~130 ถึง 170 EURรองรับเต็มรูปแบบ
Koch v1.1Dynamixel XL330 / XL430ราง 5 V และ 12 V~250 ถึง 350 EURเข้ากันได้
LeKiwiFeetech STS3215 (แขนกล)แขนกล 7.4 V, ฐาน 12 V~400 ถึง 500 EURเข้ากันได้
7.4 V ไม่ใช่ 12 V

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. 1
    ติดตั้ง lerobot พร้อมส่วนเสริมที่ถูกต้อง

    การบันทึกต้องใช้ core_scripts, การฝึกอบรม training, เซอร์โว 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
    ค้นหาพอร์ต USB ของแขนแต่ละข้าง

    เรียกใช้โดยเสียบแขนทั้งสองข้าง และถอดปลั๊กข้างหนึ่งเมื่อได้รับแจ้ง บน Linux คุณอาจต้องเปิดสิทธิ์โหนด

    bash
    lerobot-find-port
    # on Linux, if the port exists but is unreadable:
    sudo chmod 666 /dev/ttyACM0
  3. 3
    ตั้งค่า ID มอเตอร์และอัตราบอด

    บน SO-100 ขั้นตอนนี้จะเกิดขึ้นก่อนการประกอบ: ซึ่งแตกต่างจาก SO-101 คือขั้วต่อจะไม่สามารถเข้าถึงได้เมื่อประกอบเสร็จแล้ว สคริปต์จะเดินบัสทีละมอเตอร์จากกริปเปอร์ โดยเขียน ID ลงใน 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
    ปรับเทียบแขนทั้งสองข้าง

    ตั้งข้อต่อแต่ละข้อให้อยู่ตรงกลางช่วงการเคลื่อนที่ กด Enter จากนั้นกวาดแต่ละข้อต่อให้เคลื่อนที่เต็มช่วง การปรับเทียบ ช่วยให้ policy ที่ฝึกบนแขนข้างหนึ่งสามารถทำงานบนแขนอีกข้างหนึ่งได้ ใช้ 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
    ควบคุมระยะไกลหนึ่งครั้งโดยเปิดกล้อง

    กฎง่ายๆ ของ lerobot: คุณควรจะสามารถทำงานได้โดยดูจากภาพกล้องเท่านั้น หากคุณทำไม่ได้ ACT ก็ทำไม่ได้เช่นกัน วิธีนี้ช่วยตรวจจับชุดข้อมูลที่ไม่ดีได้มากกว่าการดีบักในภายหลัง

    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
    บันทึก 50 ตอน

    50 คือค่าต่ำสุดของ AY-Robots และเป็นจำนวนที่ ALOHA ใช้ต่องาน lerobot แนะนำ 10 ต่อตำแหน่งวัตถุ, กล้องคงที่, การจับที่สอดคล้องกัน n สิ้นสุดตอน, r บันทึกซ้ำ, q หยุดและเข้ารหัส

    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
หน้าบทช่วยสอนการบันทึกของ AY-Robots ที่อธิบายวิธีการจับภาพชุดข้อมูลรูปแบบ LeRobot จากเซสชันการควบคุมระยะไกล
บทช่วยสอนการบันทึก ไคลเอนต์เดสก์ท็อปเขียนเลย์เอาต์เดียวกับ lerobot-record
กับดักที่กินเวลาไปทั้งวัน: ชุดข้อมูลที่ไม่สอดคล้องกัน

ACT ไม่มีข้อมูลพื้นฐานที่จะใช้เป็นข้อมูลอ้างอิง ดังนั้นความไม่สอดคล้องกันทุกอย่างจะกลายเป็นถาวร สามสิ่งที่แพงที่สุด: กล้องถูกขยับระหว่างตอนที่ 20 และ 21, แสงที่เปลี่ยนไปเพราะคุณบันทึกครึ่งหนึ่งของชุดข้อมูลในช่วงบ่าย, การจับที่ทำสองวิธี แต่ละอย่างให้เส้นโค้งการสูญเสียที่ดูสมบูรณ์แบบและแขนที่เคลื่อนที่ไปยังตำแหน่งที่ไม่ถูกต้อง ดู การสูญเสียลดลงแต่ policy ไม่ทำงาน, policy ทำงานได้ในบางการตั้งค่าเท่านั้น และ การรวบรวมข้อมูลการฝึกอบรมคุณภาพสูง

ก่อนการฝึกอบรม ให้เล่นซ้ำอย่างน้อยห้าตอน จัดเก็บสตรีมกล้อง, สถานะข้อต่อ และการกระทำต่อ และการเล่นซ้ำจะส่งการกระทำเหล่านั้นกลับไปยังแขน หากการเล่นซ้ำไม่ทำงานตามที่กำหนด ข้อมูลนั้นก็ไม่มีอยู่ และการฝึกอบรมก็จะไม่สร้างมันขึ้นมา

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
กำลังเล่นซ้ำตอนที่ 0 หากล้มเหลว ให้หยุดและบันทึกใหม่

การฝึกนโยบาย ACT

นี่คือคำสั่งทั้งหมด ทุกอย่างที่เฉพาะเจาะจงกับ ACT ได้ถูกตั้งค่าเป็นค่าเริ่มต้นอยู่แล้ว ซึ่งเป็นเหตุผลที่หน้า ACT ของ lerobot แนะนำให้เริ่มต้นด้วยสิ่งเหล่านี้

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
คำสั่งการฝึกจากเอกสาร lerobot 0.6.x สำหรับชุดข้อมูล SO-100

--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ความคิดเห็น
ขนาดแบตช์88ลดค่านี้ก่อนหากพบข้อจำกัด VRAM
อัตราการเรียนรู้1e-51e-5เหมือนกับในเอกสาร ALOHA
จำนวนขั้นตอนสูงสุด100000100000ประมาณจุดที่ชุดข้อมูล 50 ตอนหยุดพัฒนา
การสะสมเกรเดียนต์11, does not applyเปลี่ยนขนาดแบตช์แทน
ซีด1000exposedจุดเริ่มต้น tyro ของ GR00T ไม่มีซีด; การรัน ACT เป็นแบบที่ทำซ้ำได้
chunk_size / n_action_steps100 / 100100 / 100, editableขอบเขตการคาดการณ์และการดำเนินการ ลดตัวที่สอง ไม่ใช่ตัวแรก
ความถี่ในการบันทึกเช็คพอยต์20000not exposedsaveSteps เป็นตัวปรับของ 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 คงที่แล้ว

bash
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.

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
การทดสอบแบบอัตโนมัติโดยไม่มีการบันทึก ใช้ --strategy.type=sentry เพื่อบันทึกตอนการประเมินผล
คำสั่งนี้เพิ่งถูกเปลี่ยนชื่อเมื่อไม่นานมานี้ ดังนั้นบทเรียนเก่าๆ อาจไม่ตรงกัน

การประเมินผลเคยรันผ่าน 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

  1. ติดตั้ง lerobot 0.6.x พร้อม core_scripts, training, feetech, ffmpeg
  2. ค้นหาพอร์ต, ตั้งค่า ID มอเตอร์, ปรับเทียบแขนทั้งสองข้าง, บันทึก 50 ตอน
  3. เล่นซ้ำบางตอนเพื่อยืนยันว่าข้อมูลมีงานที่ต้องการ
  4. เช่าหรือเป็นเจ้าของ GPU ขนาด 24 GB, จับคู่ CUDA และ PyTorch, รัน lerobot-train --policy.type=act
  5. รอสองสามชั่วโมง จากนั้นรัน lerobot-rollout บนเครื่องที่แขนหุ่นยนต์
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
สิ่งที่คุณจะได้รับจากเส้นทางนี้

การควบคุมทั้งหมด: แก้ไข configuration_act.py, เพิ่มกล้อง, fork ตัวเทรนเนอร์ สำหรับการวิจัยมากกว่าการส่งมอบงาน แพลตฟอร์มอาจเป็นสิ่งรบกวน

เมทริกซ์การฝึกอบรมของ AY-Robots ที่มีห้าแถวนโยบายและสี่คอลัมน์แขนหุ่นยนต์ โดยแต่ละเซลล์เชื่อมโยงไปยังคู่มือการฝึกอบรมเฉพาะสำหรับโมเดลและการรวมแขนนั้นๆ
เมทริกซ์บน /train แถว ACT เทียบกับคอลัมน์ SO-100 คือคู่มือของบทความนี้

สิ่งที่ผิดพลาดจริงๆ

ปัญหาแทบทั้งหมดไม่ได้อยู่ที่คำสั่งการฝึก แต่อยู่ที่สิ่งรอบข้าง โดยเรียงตามความถี่ที่มักจะเกิดปัญหาตั้งแต่ครั้งแรก

อาการสาเหตุทั่วไปหน้า
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 GBACT, SmolVLA2 to 5 hours0.30 to 0.60 USDประมาณ 1 ถึง 3 USD
A100 80 GB / H100GR00T N1.7, GR00T N1.5, Pi0.53 to 6 hours1.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 จะเป็นการเปลี่ยนแปลงถาวร

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started