หน้าโมเดล SmolVLA บน AY-Robots ที่แสดงจำนวนพารามิเตอร์, ระดับ GPU, ความหน่วงของการอนุมานต่อขั้นตอนการกระทำ และจำนวนตอนขั้นต่ำ
SmolVLALeRobotการฝึก VLAการปรับแต่งSO-100

วิธีฝึก SmolVLA บน GPU ขนาด 24 GB (lerobot 0.6.1)

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

SmolVLA เป็น VLA ที่มีพารามิเตอร์ 450 ล้านตัว ซึ่งสามารถปรับแต่งได้บนการ์ดขนาด 24 GB เพียงใบเดียว คำสั่ง lerobot 0.6.1 จริง, ค่าเริ่มต้นที่แท้จริง, ข้อผิดพลาดที่ทำให้เสียเวลาไปหนึ่งวัน และค่าใช้จ่ายในการรันแต่ละครั้ง

SmolVLA ในหน้าจอเดียว

  • พารามิเตอร์ 450 M โดยประมาณ 100 M เป็นผู้เชี่ยวชาญด้านการจับคู่การไหลของแอคชั่น lerobot ฝึกเฉพาะผู้เชี่ยวชาญนั้นและรักษาสถานะ VLM ให้คงที่ ซึ่งเป็นเหตุผลที่ทำให้สามารถทำงานบนการ์ดเดียวได้
  • คู่มือการคำนวณของ LeRobot ระบุว่ากลุ่ม smolvla ใช้ VRAM สูงสุดประมาณ 10 ถึง 16 GB ที่ batch 8 ด้วย AdamW ดังนั้นจึงต้องใช้ 24 GB
  • จุดเริ่มต้นคือ lerobot-train บล็อกโพสต์ SmolVLA เดือนมิถุนายน 2025 ยังคงแสดง python lerobot/scripts/train.py ซึ่งเป็นพาธที่ไม่มีอยู่อีกต่อไป ทุกอย่างด้านล่างนี้คือ lerobot 0.6.1
  • ตารางเวลาโคไซน์ถูกตั้งค่าไว้ล่วงหน้าให้ลดลงตลอด 30000 ขั้นตอน lerobot 0.6.1 จะปรับขนาดนั้นลงสำหรับการรันที่สั้นลงและบันทึกไว้ แต่ไม่เคยปรับขึ้น: การรัน 100000 ขั้นตอนมาตรฐานจะสิ้นสุดที่ค่าต่ำสุด 2.5e-6 เป็นเวลา 70000 ขั้นตอน
  • สามสิบตอนคือขั้นต่ำของ AY-Robots บนแพลตฟอร์ม 24 GB ที่มีค่าใช้จ่าย 1 ถึง 3 USD ต่อการรัน เทียบกับ 4 ถึง 12 สำหรับโมเดล 80 GB

คนส่วนใหญ่ที่ต้องการ โมเดลภาษาการมองเห็นและการกระทำ บนแขนหุ่นยนต์จริงมักจะติดขัดที่ข้อจำกัดด้านฮาร์ดแวร์ GR00T N1.7 และ Pi0.5 มีพารามิเตอร์ประมาณสามพันล้านตัวแต่ละตัวและต้องการ A100 80 GB หรือ H100 หากคุณมีเพียงพีซีสำหรับเล่นเกมที่มี RTX 4090 นั่นคือจุดสิ้นสุดของเส้นทาง SmolVLA เป็นข้อยกเว้น: พารามิเตอร์ 450 M ภายใน LeRobot สร้างขึ้นเพื่อปรับแต่งบนการ์ดผู้บริโภคเพียงใบเดียวและให้บริการจาก CPU

เส้นทางแบบแมนนวลก่อน: ติดตั้ง lerobot, ดึง lerobot/smolvla_base เช็คพอยต์, รันคำสั่งจริง, อ่านผลลัพธ์ขณะที่มันทำงาน จากนั้นเป็นเส้นทางแพลตฟอร์ม และจุดที่มันไม่ช่วยอะไร

SmolVLA คืออะไร ในตัวเลขที่คุณสามารถตรวจสอบได้

SmolVLA เป็น การจับคู่โฟลว์ นโยบายที่ถูกนำมาใช้กับโมเดลภาษาภาพขนาดเล็ก แกนหลักคือ SmolVLM2-500M-Video-Instruct; เอกสารวิจัยนี้ใช้เพียง 16 เลเยอร์แรกของโมเดลภาษาของมัน จำกัดแต่ละเฟรมกล้องไว้ที่ 64 โทเค็นภาพด้วยการสลับพิกเซลแทนการเรียงภาพ และสลับการใส่ cross attention กับ self attention layer ทุกๆ บล็อกที่สอง ต้นทุนการอนุมานเป็นข้อจำกัดในการออกแบบ ไม่ใช่สิ่งที่คิดขึ้นมาทีหลัง

คุณสมบัติค่าที่มา
พารามิเตอร์ทั้งหมดabout 450 Mpaper
ผู้เชี่ยวชาญด้านการกระทำabout 100 M, flow matchingpaper
แกนหลัก VLMHuggingFaceTB/SmolVLM2-500M-Video-Instructvlm_model_name
เลเยอร์ VLM ที่ใช้first 16 of the language modelnum_vlm_layers = 16
โทเค็นภาพต่อเฟรม64, pixel shuffle, no tilingpaper
การฝึกอบรมล่วงหน้า481 community datasets, 22.9 K episodes, 10.6 M frames; 200000 steps at global batch 256 on 4 GPUspaper

ผลการทดสอบเป็นเหตุผลที่ผู้คนสนใจโมเดลขนาด 450 M บน LIBERO มีค่าเฉลี่ย 87.3 เปอร์เซ็นต์ เทียบกับ 76.5 สำหรับ OpenVLA ที่ 7 B และ 86.0 สำหรับ Pi0 ที่ได้รับการฝึกอบรมด้านหุ่นยนต์ล่วงหน้า ที่ 3.3 B; บน Meta-World, 57.3 เทียบกับ 47.9 บนฮาร์ดแวร์ SO-100 จริง การฝึกอบรมแบบหลายงานให้ผล 75 เปอร์เซ็นต์ในการหยิบและวาง, 90 ในการซ้อน, 70 ในการจัดเรียง, โดยเฉลี่ย 78.3, ในขณะที่ ACT ที่ได้รับการฝึกอบรมต่อภารกิจมีค่าเฉลี่ย 48.3 แถวเดียวกันนี้ปรากฏอยู่ข้าง VLA ที่เผยแพร่ทั้งหมดใน รายการ SmolVLA ในอารีน่า และ การเปรียบเทียบ ACT กับ SmolVLA.

คำกล่าวอ้างเรื่องขนาดในเวอร์ชันที่ซื่อสัตย์

SmolVLA ไม่ได้ดีกว่าโมเดล 3 B ในทุกด้าน ตาราง SO-101 ของเอกสารวิจัยเองเป็นตัวบ่งชี้: ความสำเร็จ 90 เปอร์เซ็นต์ในการกระจายตัว, 50 เปอร์เซ็นต์นอกการกระจายตัว, บนแพลตฟอร์มที่ไม่เคยได้รับการฝึกอบรมล่วงหน้ามาก่อน สิ่งที่มันอ้างและสนับสนุนคือ เมื่อเทียบกับ Pi0 มันฝึกอบรมได้เร็วกว่าประมาณ 40 เปอร์เซ็นต์ โดยใช้หน่วยความจำน้อยลง 6 เท่า

ทำไมการ์ด 24 GB จึงเป็นการเริ่มต้นที่เหมาะสม

LeRobot มีคู่มือการกำหนดขนาดการประมวลผล ซึ่งเป็นหน้าที่มีประโยชน์ที่สุดใน repo สำหรับเรื่องนี้ โดยจะจัดกลุ่มนโยบายตามขนาดแบ็คโบน และให้ซอง VRAM หนึ่งซองต่อกลุ่ม ซึ่งวัดที่ขนาดแบตช์ 8 ด้วย AdamW ซึ่งเป็นค่าเริ่มต้นของ lerobot สถานะของ Optimizer เพียงอย่างเดียวเพิ่มขึ้น 30 ถึง 100 เปอร์เซ็นต์เมื่อเทียบกับการส่งผ่านไปข้างหน้าและย้อนกลับเปล่าๆ ดังนั้นตัวเลขเหล่านี้จึงไม่ใช่แค่ตัวเลขน้ำหนักเท่านั้น

กลุ่มนโยบายVRAM สูงสุด (แบตช์ 8, AdamW)GPU เริ่มต้น
BC แบบเบาact, vqbet, tdmpcabout 2 to 6 GBRTX 3060, L4
Diffusiondiffusion, multi_task_ditabout 8 to 14 GBRTX 4070+, L4
VLA ขนาดเล็กsmolvlaabout 10 to 16 GBRTX 4080+, L4, A10G
VLA ขนาดใหญ่pi0, pi0_fast, pi05, xvla, wall_xabout 24 to 40 GBA100 40 GB+
หลายโมดอลgroot, eo1about 24 to 40 GBA100 40 GB+

สิบถึงสิบหกกิกะไบต์ที่แบตช์ 8 คือข้อโต้แย้ง: การ์ด 24 GB สามารถรองรับได้พร้อมกับ dataloader AY-Robots วาง SmolVLA บน RTX 4090 หรือการ์ด 24 GB ใดๆ โดยมีขั้นต่ำ 30 ตอน, LeRobot v3.0 ข้อมูล, 245 มิลลิวินาทีต่อขั้นตอนการกระทำ หากเช่า จะอยู่ที่ 2 ถึง 5 ชั่วโมงในราคา 0.30 ถึง 0.60 USD ต่อชั่วโมง ประมาณ 1 ถึง 3 USD ต่อการ ปรับแต่ง รัน เทียบกับ 4 ถึง 12 USD บน GR00T และ Pi0.5 ระดับ 80 GB ที่ต้องการ (ราคา) การรัน SmolVLA ที่ล้มเหลวคือค่ากาแฟ; การรัน GR00T ที่ล้มเหลวคือค่าอาหารกลางวัน

ตารางค่าใช้จ่าย AY-Robots: การ์ดต่อ policy, เวลาทำงาน, ราคาต่อการทำงาน, จำนวนตอนที่ต้องการ
SmolVLA และ ACT อยู่ในแถว 24 GB ส่วนโมเดล 3 B สามตัวอยู่ในแถว 80 GB
เริ่มต้นด้วย SmolVLA แทนที่จะเป็นโมเดล 3 B
สิ่งที่คุณจะได้รับ
  • เข้ากันได้กับฮาร์ดแวร์ที่คุณอาจมีอยู่แล้ว: ประมาณ 10 ถึง 16 GB ที่ batch 8
  • การรันที่เสียเปล่ามีค่าใช้จ่ายเป็นชั่วโมงและเงินเพียงหลักหน่วยดอลลาร์ ดังนั้นคุณจึงสามารถผิดพลาดเกี่ยวกับชุดข้อมูลได้
  • ได้รับการฝึกฝนล่วงหน้าบนชุดข้อมูลชุมชนที่แชร์ภายใต้แท็ก lerobot พร้อมผลลัพธ์ SO-100 และ SO-101 จริง
  • มันอยู่ใน lerobot เอง: ไม่มี repo ของผู้ขาย และ smolvla_base ไม่ได้ถูกจำกัด
สิ่งที่คุณต้องแลก
  • 450 M ก็ยังคงเป็น 450 M: ความสำเร็จนอกเหนือจากการกระจายตัวลดลงจาก 90 เหลือ 50 เปอร์เซ็นต์ในตาราง SO-101 ของเอกสาร
  • มันต้องการข้อมูล LeRobot v3.0; การบันทึก v2.1 จะต้องถูกแปลง (ชุดข้อมูลถูกปฏิเสธ v3)
  • 245 มิลลิวินาทีต่อขั้นตอนการกระทำเป็นตัวควบคุมการหยิบและวางที่มีความสามารถ ไม่ใช่ตัวควบคุมแบบตอบสนองทันที
  • ตัวอย่างในเอกสารรัน batch 64 บน A100; บน 24 GB คุณจะต้องแลก batch กับเวลาจริงที่ใช้ไป

ขั้นตอนที่ 0: ชุดข้อมูลเป็นตัวกำหนดการทำงาน ไม่ใช่แฟล็ก

ไม่มีอะไรด้านล่างนี้สำคัญเลยหากการบันทึกไม่ดี หน้า LeRobot SmolVLA ระบุไว้อย่างชัดเจนว่า: ชุดข้อมูลอ้างอิงมี 50 ตอนใน 5 ตำแหน่งลูกบาศก์, 10 ตอนต่อตำแหน่ง, และงานเดียวกันที่ 25 ตอนทำงานได้ไม่ดี การทำซ้ำต่อความหลากหลายช่วยให้เกิดการสรุปผลได้ แต่จำนวนตอนดิบไม่ช่วย คุณไม่เคยบันทึกเลยใช่ไหม? เริ่มต้นที่ บันทึกชุดข้อมูลแรกของคุณ ด้วย ไคลเอนต์เดสก์ท็อป, ซึ่งเขียนรูปแบบ LeRobot จากเซสชัน การควบคุมระยะไกล หรือยืมจาก ไดเรกทอรีชุดข้อมูล.

  • อย่างน้อย 30 ตอนสำหรับ AY-Robots, ประมาณ 50 ตอนสำหรับสูตรอ้างอิงของ LeRobot
  • ความหลากหลายทุกรูปแบบที่คุณคาดว่าจะพบในการใช้งานจริง ทำซ้ำหลายครั้ง
  • สตริงงานเดียว สะกดเหมือนกันทั้งตอนบันทึกและตอนใช้งานจริง โมเดลจะถูกปรับเงื่อนไขตามข้อความนั้น
  • กล้องที่ติดตั้งอยู่กับที่ การเคลื่อนย้ายกล้องระหว่างการบันทึกและการใช้งานจริงเป็นสาเหตุที่พบบ่อยที่สุดที่ทำให้กราฟการสูญเสียที่สะอาดส่งผลให้แขนหุ่นยนต์ไม่เคลื่อนไหว
  • ความหลากหลายที่กันไว้ซึ่งคุณไม่เคยฝึกฝน เพื่อให้คุณมีสิ่งที่จะใช้ทดสอบได้อย่างเที่ยงตรง
กับดักชุดข้อมูลที่ทำให้เสียเวลาไปหนึ่งวัน

SmolVLA, Pi0.5 และ ACT ต้องการ LeRobot v3.0. GR00T N1.7 และ N1.5 ต้องการ v2.0 หรือ v2.1 และตัวโหลดของพวกมันจะขัดข้องเมื่อใช้ v3.0. บันทึกเพียงครั้งเดียว วางแผนที่จะเปรียบเทียบโมเดลในภายหลัง และคุณจะต้องแปลงข้อมูลไม่ทางใดก็ทางหนึ่ง: ชุดข้อมูลถูกปฏิเสธ v3.

bash
# v2.1 -> v3.0: aggregates per-episode files into shards and writes the episode offsets
python -m lerobot.scripts.convert_dataset_v21_to_v30 --repo-id=${HF_USER}/so100_pick_place
ตัวแปลงมาพร้อมกับ lerobot จึงไม่จำเป็นต้องติดตั้งอะไรเพิ่มเติม ไม่มีตัวแปลงในทิศทางตรงกันข้ามในแพ็คเกจนี้

อ่านเพิ่มเติมได้ที่ วิธีรวบรวมข้อมูลการฝึกอบรม VLA คุณภาพสูงสำหรับการควบคุมหุ่นยนต์. ฉบับย่อ: การบันทึก 30 ถึง 50 ตอนที่สะอาดของงานเดียวที่มีความหลากหลายอย่างตั้งใจนั้นดีกว่าการบันทึก 200 ตอนที่หละหลวมของสามงาน โดยมีส่วนต่างที่ไม่มีไฮเปอร์พารามิเตอร์ใดสามารถปิดได้

ติดตั้ง lerobot 0.6.1

bash
# LeRobot needs Python 3.12 or newer as of 0.6.x
conda create -y -n lerobot python=3.12
conda activate lerobot

# TorchCodec decodes the dataset videos and wants ffmpeg
conda install ffmpeg -c conda-forge

# Base package is deliberately thin; extras pull the rest
pip install 'lerobot[smolvla,training,core_scripts]'

# Sanity check: prints the lerobot version, the GPU torch sees, and the console scripts you got
lerobot-info
เส้นทาง PyPI หากต้องการแก้ไขเทรนเนอร์ ให้โคลน repo และใช้ pip install -e ".[smolvla,training]" แทน

การติดตั้ง lerobot พื้นฐานนั้นมีขนาดเล็กและจำกัดการพึ่งพาที่หนักหน่วงไว้เบื้องหลังส่วนเสริม (extras): smolvla เพิ่ม transformers, num2words และ accelerate, training เพิ่มชุดข้อมูลและ wandb, core_scripts เพิ่มการพึ่งพาด้านฮาร์ดแวร์และการแสดงผล บน Linux เส้นทางการติดตั้งยังเป็นตัวกำหนด CUDA wheel ของคุณ: ค่าเริ่มต้นของ PyPI คือ cu130 wheel ที่มี driver floor 580.65 ดังนั้นหากใช้ไดรเวอร์ที่เก่ากว่า ให้ติดตั้ง torch จาก cu128 index ก่อน จากนั้นจึงติดตั้ง lerobot.

policy.path และ policy.type ไม่ใช่แฟล็กเดียวกัน

--policy.path=lerobot/smolvla_base loads the pretrained 450 M checkpoint and fine-tunes it. --policy.type=smolvla builds a fresh SmolVLA, and the config default load_vlm_weights = False means it does not even pull the SmolVLM2 backbone weights unless you ask. Get it wrong and the run trains happily, costs the same, and learns nothing transferable.

การรันเทรนนิ่ง ทีละคำสั่ง

  1. 1
    ยืนยันตัวตนกับ Hub

    Base checkpoint มาจาก Hub และชุดข้อมูลของคุณก็น่าจะมาจากที่นั่นด้วย

    bash
    hf auth login
  2. 2
    อ่านตัวเลือกต่างๆ หนึ่งครั้ง

    ทุกฟิลด์ของการกำหนดค่า pipeline และ policy เป็น flag ลองอ่านคร่าวๆ ก่อนที่จะลงลึกในโค้ดต้นฉบับ

    bash
    lerobot-train --help
  3. 3
    เริ่มการ fine-tune

    ตัวอย่างในเอกสารรัน batch 64 บน A100 ตัวเดียว; คำแนะนำการคำนวณสำหรับ A100 40 GB ใช้ batch 16 และ 8 คือค่าเทียบเท่าสำหรับ 24 GB ไม่มี flag scheduler ที่นี่โดยตั้งใจ ดูด้านล่าง

    bash
    lerobot-train \
      --policy.path=lerobot/smolvla_base \
      --dataset.repo_id=${HF_USER}/so100_pick_place \
      --batch_size=8 \
      --steps=20000 \
      --save_freq=2000 \
      --log_freq=200 \
      --seed=1000 \
      --output_dir=outputs/train/smolvla_pick_place \
      --job_name=smolvla_pick_place \
      --policy.device=cuda \
      --wandb.enable=true
  4. 4
    อ่านบรรทัด log ไม่ใช่แค่ค่า loss

    ทุกๆ --log_freq steps lerobot จะพิมพ์ loss, grdn, lr, updt_s, data_s, smp/s และบน CUDA จะพิมพ์ mem_gb. mem_gb บอกว่า batch พอดีหรือไม่, lr บอกว่า schedule กำลังลดลงหรือไม่, และ data_s ที่เข้าใกล้ updt_s หมายความว่า dataloader เป็นคอขวด ไม่ใช่ GPU

    bash
    # if data_s creeps toward updt_s
    lerobot-train ... --num_workers=8
  5. 5
    รวบรวม checkpoint ที่สามารถเปรียบเทียบได้

    save_freq มีค่าเริ่มต้นเป็น 20000 ดังนั้นการรัน 20000 steps จะเหลือ checkpoint เพียงอันเดียวและไม่มีอะไรให้เปรียบเทียบ ตั้งค่าเป็น 2000 การ push ไปยัง Hub ต้องใช้ --policy.repo_id

    bash
    --save_freq=2000 \
    --policy.repo_id=${HF_USER}/smolvla_pick_place \
    --save_checkpoint_to_hub=true
  6. 6
    ดำเนินการต่อหากเครื่องหยุดทำงาน

    ชี้ --config_path ไปที่ train_config.json ที่อยู่ถัดจาก checkpoint lerobot จะปฏิเสธที่จะเริ่มใน output_dir ที่มีอยู่แล้ว เว้นแต่คุณจะทำการ resume ดังนั้นคุณจึงไม่สามารถเขียนทับการรันโดยไม่ตั้งใจได้

    bash
    lerobot-train \
      --config_path=<path to the saved train_config.json> \
      --resume=true

Flag ที่ส่งผลต่อผลลัพธ์จริงๆ

Flagหน้าที่บน 24 GB
--batch_sizeจำนวนตัวอย่างต่อ step, สัมพันธ์เชิงเส้นกับ VRAM โดยประมาณ4 to 8
--stepsจำนวน optimizer steps ทั้งหมด20000 first pass
--policy.scheduler_decay_stepsความยาวการลดลงแบบ Cosine, ตั้งค่าไว้ล่วงหน้า 30000มีผลเฉพาะเมื่อเกิน 30000
--policy.use_ampMixed precision; SmolVLA ไม่มีฟิลด์ dtypetrue เมื่อหน่วยความจำจำกัด
--num_workersจำนวน Dataloader processes, ค่าเริ่มต้น 4เพิ่มจนกว่า data_s จะไม่เพิ่มขึ้น
--dataset.eval_splitสัดส่วนของ episodes ที่ถูกกันไว้ต่อ task0.1, with --eval_steps
--policy.freeze_vision_encoderคง vision tower ให้ตรึงอยู่กับที่true on 24 GB
--policy.train_expert_onlyเฉพาะ expert ขนาด ~100 M เท่านั้นที่ได้รับ gradientstrue first
ตารางเวลา: สิ่งที่ 0.6.1 จัดการได้ และสิ่งที่จัดการไม่ได้

SmolVLA กำหนดตารางเวลาแบบโคไซน์ไว้ล่วงหน้า: scheduler_warmup_steps = 1000, scheduler_decay_steps = 30000, scheduler_decay_lr = 2.5e-6. คำแนะนำเก่าระบุว่าการรัน 20000 สเต็ปจะหยุดชะงักกลางการลดลง ในเวอร์ชัน 0.6.1 ไม่เป็นเช่นนั้น: CosineDecayWithWarmupSchedulerConfig.build() ถูกส่งค่า --steps และต่ำกว่า num_decay_steps มันจะปรับขนาดทั้งสองอย่างใหม่ โดยวอร์มอัพจาก 1000 เป็น 666 และลดลงจาก 30000 เป็น 20000 พร้อมพิมพ์ Auto-scaling LR scheduler เมื่อดำเนินการ มันไม่เคยปรับขนาดขึ้น: การลดลงจะถูกจำกัดด้วย min(current_step, decay_steps) ดังนั้นค่าเริ่มต้น --steps=100000 จะคงที่ตั้งแต่สเต็ปที่ 30000 จนถึงสิ้นสุด ซึ่งคิดเป็น 70 เปอร์เซ็นต์ของการรัน เฉพาะด้านที่ยาวนั้นเท่านั้นที่ยังคงต้องการ --policy.scheduler_decay_steps คอลัมน์ lr คือที่ที่คุณตรวจสอบ

ค่าเริ่มต้นที่คุณได้รับหากคุณไม่เปลี่ยนแปลงอะไรเลย

การกำหนดค่า นโยบาย ใน lerobot มีค่าที่ตั้งไว้ล่วงหน้าสำหรับ optimizer และ scheduler ของตัวเอง และเว้นแต่คุณจะตั้งค่า use_policy_training_preset=false ค่าที่ตั้งไว้ล่วงหน้าเหล่านั้นจะมีผล คำถามครึ่งหนึ่งที่ผู้คนถามเกี่ยวกับการฝึก SmolVLA ได้รับคำตอบจากค่าเริ่มต้นที่พวกเขาไม่รู้ว่ามีอยู่

การตั้งค่าค่าเริ่มต้นใน lerobot 0.6.1กำหนดใน
ขนาดชิ้นส่วน / จำนวนขั้นตอนการดำเนินการ50 / 50SmolVLAConfig
จำนวนขั้นตอน (การลดสัญญาณรบกวนแบบ flow matching)10SmolVLAConfig
อัตราการเรียนรู้ของ optimizer1e-4SmolVLAConfig
จำนวนขั้นตอนการวอร์มอัพของ scheduler1000SmolVLAConfig
จำนวนขั้นตอนการลดค่าของ scheduler30000SmolVLAConfig
อัตราการเรียนรู้ที่ลดลงของ scheduler2.5e-6SmolVLAConfig
ตรึง vision encodertrueSmolVLAConfig
ฝึกเฉพาะผู้เชี่ยวชาญtrueSmolVLAConfig
ขนาดแบทช์ / จำนวนขั้นตอน8 / 100000TrainPipelineConfig
seed / ความถี่ในการบันทึก / จำนวน worker1000 / 20000 / 4TrainPipelineConfig

สองบรรทัดที่ทำให้คนประหลาดใจคือ freeze_vision_encoder และ train_expert_only ซึ่งทั้งคู่เป็นจริง โดยค่าเริ่มต้น คุณจะฝึกพารามิเตอร์ประมาณ 100 M ไม่ใช่ 450 M ซึ่งเป็นเหตุผลว่าทำไมจึงสามารถทำงานได้บน 24 GB การรันอ้างอิงของ LeRobot เองบนคลัสเตอร์ H100 สี่ GPU จะเปลี่ยนทั้งสองค่าเป็น false; บนการ์ด 24 GB หนึ่งใบ สิ่งนี้จะเปลี่ยนการรันที่ทำงานได้ให้กลายเป็น .

ปุ่มปรับหน่วยความจำที่ไม่มีอยู่จริง

คำแนะนำของคู่มือเมื่อคุณมีข้อจำกัดด้านหน่วยความจำคือให้ลดขนาดแบตช์ (batch size) และใช้ gradient accumulation เพื่อกู้คืนแบตช์ที่มีประสิทธิภาพ (effective batch) ไม่มี gradient accumulation ใน lerobot 0.6.1: `TrainPipelineConfig` ไม่มีฟิลด์ดังกล่าวและสตริงนี้ไม่ปรากฏที่ใดในแพ็คเกจที่เผยแพร่ แบบฟอร์ม AY-Robots แสดงค่า gradient accumulation เป็น 8 สำหรับ SmolVLA และไม่ได้นำไปใช้เช่นกัน ตัวเลือกของคุณบน 24 GB คือ `--batch_size`, ค่าเริ่มต้น freeze สองค่า, และ `--policy.use_amp`.

การรันใช้เวลานานเท่าใด และจำนวนขั้นตอนที่เพียงพอ

LeRobot เผยแพร่จุดอ้างอิงเวลาจริง (wall-clock anchors) สำหรับห้าอีพ็อก (epochs) บนชุดข้อมูลประมาณ 50 ตอน (episode dataset) ซึ่งมีประมาณ 45000 เฟรมที่ 30 fps เอกสารระบุว่าเป็นตัวเลขประมาณการ แต่ตัวเลขเหล่านี้คือความแตกต่างระหว่างการคาดหวังหนึ่งชั่วโมงกับหนึ่งวัน

การตั้งค่านโยบายแบทช์เวลาจริง
L4 / A10G (24 GB) เดี่ยวsmolvla4ประมาณ 3 ถึง 6 ชม.
A100 40 GB เดี่ยวsmolvla16ประมาณ 1 ถึง 2 ชม.
H100 80 GB จำนวน 4 ตัว พร้อม acceleratesmolvla32ประมาณ 1 ถึง 2 ชม.
RTX 4090 / RTX 3090 (24 GB) เดี่ยวact8ประมาณ 30 ถึง 60 นาที
คำนวณจำนวนอีพ็อกก่อนเลือก --steps

กฎคือ 5 ถึง 10 อีพ็อกสำหรับชุดข้อมูล ไม่ใช่จำนวนสเต็ปที่กำหนด: steps_per_epoch = ceil(total_frames / (num_gpus x batch_size)) สำหรับชุดข้อมูลอ้างอิงที่เอกสารชี้ไปที่ lerobot/svla_so100_pickplace เมตาดาต้ารายงาน 50 ตอนและ 19631 เฟรม: แบทช์ 8 ให้ประมาณ 2454 สเต็ปต่ออีพ็อก ดังนั้น 20000 สเต็ปจึงประมาณ 8 อีพ็อก หากลดแบทช์ลงครึ่งหนึ่ง งบประมาณเท่าเดิมจะซื้อได้ครึ่งหนึ่งของอีพ็อก ดังนั้นให้ทำซ้ำขั้นตอนนี้ทุกครั้งที่คุณแก้ไข --batch_size

เรียกใช้นโยบายที่ปรับแต่งแล้วบนแขนกล

bash
lerobot-rollout \
  --strategy.type=base \
  --robot.type=so100_follower \
  --robot.port=/dev/ttyACM0 \
  --robot.id=my_follower_arm \
  --robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}}" \
  --task="Grasp the cube and put it in the box." \
  --policy.path=${HF_USER}/smolvla_pick_place
สตริงงานจะต้องตรงกับที่คุณบันทึกไว้ โมเดลถูกกำหนดเงื่อนไขด้วยข้อความนั้น ดังนั้นการถอดความจึงเป็นคำสั่งที่แตกต่างกัน

ค่า 245 มิลลิวินาทีต่อขั้นตอนการกระทำนั้นเข้าใจผิดได้ง่าย: นโยบายจะปล่อย chunk_size = 50 การกระทำต่อการส่งผ่านไปข้างหน้าหนึ่งครั้ง และดำเนินการ n_action_steps = 50 ของการกระทำเหล่านั้น ดังนั้นความถี่ที่คุณต้องจ่ายค่าใช้จ่ายนั้นจึงถูกกำหนดโดยตัวปรับเหล่านี้ ไม่ใช่โดยความถี่ที่เซอร์โวได้รับคำสั่ง นี่คือสิ่งที่ การแบ่งกลุ่มการกระทำ มอบให้ และเป็นเหตุผลว่าทำไมโมเดล 245 มิลลิวินาทีจึงสามารถขับเคลื่อนแขนกล 30 Hz ได้ สิ่งที่เหลืออยู่คือ ความหน่วงของการอนุมาน เมื่อสิ้นสุดกลุ่มข้อมูล

การวัดผล (SmolVLA, SO-100 จริง)แบบซิงโครนัสแบบอะซิงโครนัส
เวลาดำเนินการเสร็จสิ้น, หยิบและวาง, 10 ครั้ง13.75 s9.70 s
รอบการหยิบและวางในกรอบเวลาที่กำหนด919
อัตราความสำเร็จเฉลี่ยจากสามงาน78.3 %73.3 %

แถวที่สามนั้นเป็นสิ่งที่บทความส่วนใหญ่ข้ามไป การอนุมานแบบอะซิงโครนัสเร็วกว่าประมาณ 30 เปอร์เซ็นต์ และเพิ่มปริมาณงานเป็นสองเท่าในกรอบเวลาที่กำหนด และเอกสารระบุว่าอัตราความสำเร็จเทียบเท่ากัน ซึ่งโดยเฉลี่ยแล้วก็เป็นเช่นนั้น ภายใต้การทำงานนี้ การจัดเรียงลดลงจาก 70 เป็น 50 เปอร์เซ็นต์ ในขณะที่การหยิบและวางเพิ่มขึ้น 5. lerobot 0.6.1 มีตัวเลือกอีกตัวในไบนารีเดียวกัน: --inference.type=rtc จะเปลี่ยนการทำงานไปสู่การแบ่งกลุ่มแบบเรียลไทม์ ซึ่งบล็อกการใช้งานของสคริปต์เองแนะนำสำหรับ VLA ที่ทำงานช้า เช่น Pi0, Pi0.5 และ SmolVLA

การอนุมานต้องอยู่ใกล้กับเซอร์โว

ลูปควบคุมใช้เวลา 20 ถึง 485 มิลลิวินาทีต่อขั้นตอนการกระทำ ขึ้นอยู่กับโมเดล และการเดินทางไปกลับผ่านอินเทอร์เน็ตสาธารณะจะเปลี่ยนนโยบายที่ทำงานได้ให้กลายเป็นนโยบายที่ลังเล การอนุมานระยะไกลสามารถใช้ได้กับการหยิบและวางที่ช้า ไม่ใช่การเคลื่อนไหวตอบสนองที่รวดเร็ว: หากงานต้องการการแก้ไขอย่างรวดเร็ว GPU ควรอยู่ใน LAN เดียวกันกับแขนกล

7.4 V ไม่ใช่ 12 V

แม้จะไม่เกี่ยวข้องกับการฝึกอบรมโดยตรง แต่ปัญหานี้ทำให้โปรเจกต์ SO-100 ล้มเหลวมากกว่าไฮเปอร์พารามิเตอร์ใดๆ เซอร์โว Feetech STS3215 ใน SO-100 และ SO-101 ทำงานที่ 7.4 V; 12 V จะทำให้เสียหาย LeKiwi ผสมผสานแขนกล 7.4 V เข้ากับฐาน 12 V ซึ่งเป็นสาเหตุที่ทำให้แจ็คผิดประเภทเสียบเข้ากับซ็อกเก็ตผิดช่อง

สองเส้นทางสู่เช็คพอยต์เดียวกัน

คุณเป็นเจ้าของเครื่องจักร สภาพแวดล้อม และการดีบัก การพึ่งพาคลาวด์เพียงอย่างเดียวคือการดาวน์โหลดเช็คพอยต์พื้นฐานจาก Hub นี่คือเส้นทางที่เหมาะสมหากคุณต้องการแก้ไขนโยบาย หากข้อมูลไม่สามารถออกจากเครือข่ายของคุณได้ หรือหากการ์ดไม่ได้ใช้งาน

  • คุณควบคุม CUDA wheel, ไดรเวอร์, การบิลด์ ffmpeg และ dataloader
  • คุณสามารถแก้ไข configuration_smolvla.py และฝึกอบรมใหม่ได้ในบ่ายวันเดียวกัน
  • คุณจ่ายค่าไฟฟ้าและเวลา ไม่ใช่ต่อการรัน และดีบัก TorchCodec ด้วยตัวเอง
bash
pip install 'lerobot[smolvla,training,core_scripts]'
hf auth login

lerobot-train \
  --policy.path=lerobot/smolvla_base \
  --dataset.repo_id=${HF_USER}/so100_pick_place \
  --batch_size=8 --steps=20000 \
  --save_freq=2000 --seed=1000 \
  --output_dir=outputs/train/smolvla_pick_place \
  --job_name=smolvla_pick_place \
  --policy.device=cuda --wandb.enable=true
เส้นทางแบบแมนนวลทั้งหมดในบล็อกเดียว, lerobot 0.6.1

เมื่อ SmolVLA ไม่ใช่ทางเลือกที่ถูกต้อง

การทดสอบว่า SmolVLA เป็นการรันครั้งแรกที่ถูกต้องหรือไม่นั้น ไม่ได้อยู่ที่ว่ามันทำงานได้หรือไม่ แต่อยู่ที่ว่าความล้มเหลวนั้นบอกอะไรคุณบ้าง หากทำได้ถึง 60 หรือ 70 เปอร์เซ็นต์ โมเดลที่ใหญ่ขึ้นก็เป็นการลงทุนที่สมเหตุสมผลในลำดับถัดไป: ข้อมูลมีสัญญาณ หากทำได้ถึง 10 เปอร์เซ็นต์ โมเดลขนาด 3 B ก็มีแนวโน้มที่จะทำได้ 10 เปอร์เซ็นต์เช่นกัน ซึ่งคุณเพิ่งเรียนรู้ด้วยเงินสามดอลลาร์แทนที่จะเป็นสิบสองดอลลาร์

เมทริกซ์การฝึกอบรมของ AY-Robots: ห้านโยบายเป็นแถว, แขนหุ่นยนต์สี่ข้างเป็นคอลัมน์
แต่ละเซลล์เป็นคู่มือของตัวเอง SmolVLA มีหนึ่งเซลล์สำหรับแขนหุ่นยนต์ทั้งสี่ข้าง

สิ่งที่ควรอ่านก่อนที่จะลงทุนเพิ่ม: Pi0.5 เทียบกับ SmolVLA เพื่อความจุที่มากขึ้นบนแนวคิดเดียวกัน และ GR00T N1.7 เทียบกับ SmolVLA สำหรับเส้นทาง NVIDIA ทั้งคู่เป็นระดับ 80 GB ที่ราคา 4 ถึง 12 USD ต่อการรันหนึ่งครั้ง อีกทางหนึ่งคือ ACT เป็นพื้นฐานที่ถูกกว่า: พารามิเตอร์ 80 M, 20 ms ต่อขั้นตอนการกระทำ, ไม่มีการปรับสภาพภาษา โมเดลทั้งห้าอยู่บน หน้าพอลลิซี; อารีน่า มี 85 โมเดลและผลการทดสอบ 332 รายการ

การเปรียบเทียบนโยบายของ AY-Robots: พารามิเตอร์, ระดับ GPU, ความหน่วง, จำนวนตอนขั้นต่ำ
ตัวเลขสี่ตัวที่กำหนดการรัน

รายการตรวจสอบก่อนที่คุณจะขยายขนาดสิ่งใดๆ

  1. `lr` ถึงค่าต่ำสุด 2.5e-6 แล้วหรือยัง? หากต่ำกว่า 30000 สเต็ป lerobot จะปรับขนาดการลดลงและแจ้งให้ทราบเมื่อเริ่มต้น; หากสูงกว่านั้น ให้ตั้งค่า `--policy.scheduler_decay_steps` ด้วยตนเอง
  2. มีจุดตรวจสอบมากกว่าหนึ่งจุด และมีตอนที่ถูกแยกไว้ด้วย `--dataset.eval_split` เพื่อให้ค่าความสูญเสียในการประเมินผลมีความหมาย
  3. นโยบายมีการเคลื่อนไหวเลยหรือไม่? การที่ค่าความสูญเสียลดลงแต่แขนไม่เคลื่อนไหวมีสาเหตุเฉพาะ: ค่าความสูญเสียลดลง แต่นโยบายไม่ทำงาน
  4. มันรอดจากการเปลี่ยนฉากหรือไม่? ถ้าไม่: นโยบายทำงานได้ในสถานการณ์เดียวเท่านั้น
  5. คุณได้จดค่า seed ไว้หรือไม่? lerobot มีค่าเริ่มต้นเป็น 1000 เพื่อให้การรันสองครั้งที่ไม่ได้แก้ไขยังคงเปรียบเทียบกันได้
  6. หลังจากนั้นเท่านั้น: เพิ่มตอน, เพิ่มความหลากหลาย, หรือใช้โมเดลที่ใหญ่ขึ้น ตามลำดับนี้

สำหรับเหตุผลที่โมเดลเหล่านี้มีอยู่และสิ่งที่พวกมันทำกับข้อมูลภาษา, คือข้อมูลพื้นฐาน; จะดำเนินการประกอบผ่าน ไปจนถึงการรัน ครั้งแรก สำหรับจุดตรวจสอบที่เสร็จสมบูรณ์, ; หากแขนไม่ปรากฏขึ้น, .

ฝึก SmolVLA บนแขนกลของคุณเอง

เลือกรุ่นและแขนกล แล้วคู่มือจะให้ค่าเริ่มต้นที่แน่นอน รูปแบบชุดข้อมูล และค่าใช้จ่ายในการรัน SmolVLA อยู่ในระดับ 24 GB โดยมีค่าใช้จ่าย 1 ถึง 3 USD ต่อการรัน

เปิดคู่มือการฝึก
ฉันสามารถ fine-tune SmolVLA บน RTX 4090 ได้จริงหรือ?

ใช่ คู่มือการคำนวณของ LeRobot ระบุว่า SmolVLA ใช้ VRAM สูงสุดประมาณ 10 ถึง 16 GB ที่ batch 8 พร้อม AdamW และระบุว่าการ์ดผู้บริโภคขนาด 24 GB เหมาะสมสำหรับมัน ตัวอย่าง batch 64 ในเอกสารจับคู่กับ A100 เพียงตัวเดียว หน่วยความจำจะเพิ่มขึ้นตามสัดส่วนของ batch ดังนั้นให้ใช้ 4 หรือ 8 และตรวจสอบ mem_gb

ฉันต้องการจำนวนตอน (episodes) เท่าไหร่กันแน่?

AY-Robots กำหนดขั้นต่ำไว้ที่ 30 เอกสารของ LeRobot แนะนำประมาณ 50 และรายงานว่า 25 ตอนของงานเดียวกันทำงานได้ไม่ดี โครงสร้างสำคัญกว่าจำนวน: ชุดอ้างอิงคือตำแหน่งลูกบาศก์ 5 ตำแหน่ง โดยมี 10 ตอนในแต่ละตำแหน่ง และการทำซ้ำนั้นคือสิ่งที่ทำให้เกิดการสรุปผล

เอกสารระบุ batch 64 แพลตฟอร์มส่ง batch 2 อันไหนถูกต้อง?

ทั้งสองแบบ สำหรับฮาร์ดแวร์ที่แตกต่างกัน ตัวอย่างในเอกสารใช้ batch 64 และระบุเวลาประมาณ 4 ชั่วโมงสำหรับ 20000 steps บน A100 ตัวเดียว; จุดอ้างอิง A100 40 GB ของคู่มือการคำนวณคือ batch 16 Batch 2 คือสิ่งที่ AY-Robots ส่งบนระดับ 24 GB ในเครื่อง 4 ถึง 8 คือค่ากลาง และการคำนวณ epoch จะเปลี่ยนไปตามนั้น

SmolVLA หรือ ACT สำหรับการรันครั้งแรกบน SO-100?

ACT หากงานเป็นการเคลื่อนไหวซ้ำๆ เพียงครั้งเดียวและคุณต้องการลูปที่เร็วที่สุด: 20 ms ต่อ action step, 80 M พารามิเตอร์, ไม่มีการปรับสภาพภาษา SmolVLA หากคุณต้องการการปรับสภาพภาษา, สตริงงานหลายรายการใน checkpoint เดียว และฐานที่ได้รับการฝึกฝนล่วงหน้า ทั้งสองอยู่ในระดับ 24 GB ดังนั้นทางเลือกขึ้นอยู่กับงาน ไม่ใช่เรื่องงบประมาณ

ฉันต้องตั้งค่า --policy.scheduler_decay_steps หรือไม่?

เฉพาะเมื่อ --steps สูงกว่า 30000 SmolVLA กำหนดค่า cosine decay ไว้ที่ 30000 steps และ lerobot 0.6.1 จะปรับขนาดลงเองสำหรับการรันที่สั้นลง โดยจะบันทึก "Auto-scaling LR scheduler" เมื่อดำเนินการ มันไม่เคยปรับขนาดขึ้น ดังนั้น --steps=100000 ที่เป็นค่าเริ่มต้นจะเหลือ 70000 steps สุดท้ายที่ค่าต่ำสุด 2.5e-6

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started