ماتریس آموزش AY-Robots با پنج ردیف سیاست و چهار ستون بازوی ربات، که هر سلول به یک مدل و راهنمای آموزش بازوی خاص پیوند دارد.
ACTSO-100lerobotیادگیری تقلیدیآموزش سیاست

چگونه ACT را روی SO-100 از ابتدا آموزش دهیم

AY-Robots ResearchAugust 23, 202616 دقیقه مطالعه

یک Action Chunking Transformer را از ابتدا روی SO-100 با lerobot آموزش دهید: پیکربندی act، 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 از هیچ شروع می‌کند: هیچ نقطه بازرسی پایه‌ای وجود ندارد، زیرا یک مدل بنیادی نیست. این یک ترانسفورمر تقریباً ۸۰ میلیون پارامتری است که شما آن را از ابتدا برای یک وظیفه، روی بازوی خود، تحت نورپردازی خود آموزش می‌دهید.

به همین دلیل است که یک گام کنترلی را در 20 ms اجرا می‌کند، در حالی که یک VLA با 3 میلیارد پارامتر به 152 تا 485 ms نیاز دارد و به جای 4 تا 12 USD، 1 تا 3 USD در هر اجرا هزینه دارد. این راهنما مسیر دستی را با لربات روی یک SO-100: ضبط، پیکربندی act، آنچه chunk_size و n_action_steps کنترل می‌کنند، برنامه 100000 گامی، و رول‌اوت. سپس همین کار روی AY-Robots، از جمله مواردی که پلتفرم کمکی نمی‌کند.

آنچه باید بدانید

  • ACT از ابتدا آموزش می‌بیند: بدون مدل پایه، بدون پیش‌آموزش، بدون ورودی زبان. یک نقطه بازرسی، یک وظیفه.
  • مقاله: حدود 80 M پارامتر، حدود 5 hours روی یک 11 GB RTX 2080 Ti، 0.01 s استنتاج.
  • پیش‌فرض‌های لربات: chunk_size 100, n_action_steps 100, batch 8, lr 1e-5, 100000 steps, seed 1000.
  • روی AY-Robots: 20 ms در هر گام، سریع‌ترین در میان پنج مورد. حداقل 50 episodes، LeRobot v3.0، یک کارت 24 GB، 1 تا 3 USD در هر اجرا.
  • در وظایفی که دیده است برنده می‌شود و به محض اینکه شرطی‌سازی زبانی بخواهید، بازنده می‌شود.
این توضیحات مربوط به کدام نسخه‌ها است

در تاریخ 23 August 2026 در برابر لربات 0.6.x بررسی شد: pyproject.toml در main می‌خواند version = "0.6.2"، جدیدترین تگ v0.6.1، 3 August 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، توسط ژائو، کومار، لوین و فین، arXiv، ۲۳ آوریل ۲۰۲۳. این سیستم با چهار وب‌کم که با سرعت ۳۰ فریم بر ثانیه و رزولوشن ۴۸۰x۶۴۰ استریم می‌کنند، با فرکانس ۵۰ هرتز ضبط می‌کند: دو وب‌کم روی گریپرها، یکی بالا، یکی جلو. چکیده مقاله ادعا می‌کند که شش مهارت با موفقیت ۸۰ تا ۹۰ درصدی، از جمله باز کردن یک فنجان چاشنی شفاف و قرار دادن باتری، از ۱۰ دقیقه نمایش به دست آمده است.

متن اصلی هنگام برنامه‌ریزی یک جلسه ضبط مفیدتر است: ۵۰ نمایش برای هر وظیفه، به جز Thread Velcro با ۱۰۰ نمایش، که ۱۰ تا ۲۰ دقیقه داده و ۳۰ تا ۶۰ دقیقه زمان واقعی (wall-clock time) پس از شمارش ریست‌ها است. موفقیت نیز یکنواخت نیست: Thread Velcro در ۲۰ درصد، Put On Shoe در ۹۲ درصد، Cup Open در ۸۴ درصد، Prep Tape در ۶۴ درصد به پایان می‌رسد.

هایپرپارامترمقاله 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غایب؛ Fig. 11 یک پروجکشن ۳۲ به ۵۱۲ را نشان می‌دهدlatent_dim = 32
تجمیع زمانیغایب؛ --temporal_agg در کد مرجعtemporal_ensemble_coeff = None
ردیف لایه رمزگشا اشتباه تایپی نیست

مقاله ۷ لایه رمزگشا را فهرست می‌کند، lerobot عمداً ۱ لایه را ارائه می‌دهد. توضیحات در configuration_act.py می‌گوید که پیاده‌سازی اصلی یک باگ دارد به این معنی که فقط از لایه اول استفاده می‌شود، با استناد به issue 25 در tonyzhaozh/act: سر عمل hs[0] را می‌خواند، بنابراین هر هفت لایه اجرا می‌شوند اما فقط خروجی اول به پیش‌بینی می‌رسد. این مشکل از ۲۳ آوریل ۲۰۲۴ باز و بدون پاسخ مانده است. lerobot با رفتاری که نتایج منتشر شده را تولید کرده است مطابقت دارد، نه با عدد چاپ شده. مقدار --policy.n_decoder_layers را افزایش دهید و مدلی را آموزش می‌دهید که مقاله هرگز آن را ارزیابی نکرده است.

تکه‌بندی عمل، ایده اصلی است

شبیه‌سازی رفتاری معمولی یک مشاهده را به یک عمل نگاشت می‌کند و خطاها انباشته می‌شوند: یک انحراف بازو را از توزیع خارج می‌کند، عملی بدتر تولید می‌کند، و سی گام بعد، گریپر به هیچ وجه نزدیک شیء نیست. تکه‌بندی عمل k عمل را همزمان پیش‌بینی و اجرا می‌کند، و افق مؤثر را به نسبت k کاهش می‌دهد. همچنین یک مشکل خاص داده‌های انسانی را مدیریت می‌کند: اپراتورهای از راه دور مکث می‌کنند، و یک سیاست مارکوفی تک‌گامی نمی‌تواند مکثی را مدل کند که به آنچه قبلاً آمده است بستگی دارد.

مقاله k را به جای اثبات آن، حذف می‌کند. با خاموش بودن ترکیب زمانی، به طور متوسط در چهار تنظیم، موفقیت از 1 درصد در k = 1 به 44 درصد در k = 100 افزایش می‌یابد، سپس در 200 و 400 کاهش می‌یابد زیرا سیاست به کنترل حلقه باز نزدیک می‌شود. این منحنی دلیل پیش‌فرض بودن 100 است.

  • chunk_size: تعداد اقدامات آینده که رمزگشا در هر گذر رو به جلو پیش‌بینی می‌کند. پیش‌فرض 100.
  • n_action_steps: تعداد اقداماتی که قبل از پرس‌وجوی مجدد اجرا می‌کنید. پیش‌فرض 100، بنابراین lerobot کل قطعه را به صورت حلقه باز اجرا می‌کند.
  • lerobot اعتبار n_action_steps <= chunk_size را بررسی می‌کند و در صورت برعکس بودن، یک ValueError ایجاد می‌کند.

آنچه از نظر عملیاتی اهمیت دارد، chunk_size تقسیم بر نرخ فریم است. در نرخ 30 فریم بر ثانیه که مثال‌های 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
کوتاه کردن بخش اجرا شده از قطعه بدون کوتاه کردن پیش‌بینی.
تله ترکیب‌سازی زمانی

--policy.temporal_ensemble_coeff را تنظیم کنید و lerobot نیاز به n_action_steps = 1 دارد، در غیر این صورت یک NotImplementedError ایجاد می‌کند. ترکیب‌سازی (Ensembling) در هر گام زمانی از سیاست پرس‌وجو می‌کند و پیش‌بینی‌های همپوشان برای آن گام زمانی را با وزن‌های w_i = exp(-m * i) ترکیب می‌کند، که قدیمی‌ترین آن‌ها w_0 را دریافت می‌کند. مقاله این مقدار را برای ACT 3.3 درصد ذکر می‌کند: واقعی اما متوسط، و تعداد استنتاج را در طول قطعه ضرب می‌کند. با 20 میلی‌ثانیه در هر گام مقرون به صرفه است، نه با 485 میلی‌ثانیه. به تأخیر استنتاج مراجعه کنید.

هنگامی که ACT یک مدل بنیادی را شکست می‌دهد

پنج سیاست قابل آموزش در کنار هم، با اعدادی که AY-Robots اندازه‌گیری می‌کند و برای تعیین اندازه GPU اجاره‌ای خود استفاده می‌کند.

سیاستخانوادهپارامترهابه ازای هر گامرده GPUحداقل اپیزودهامجموعه داده
ACTترانسفورمر قطعه‌بندی، از ابتدا~80 M20 msRTX 4090 / 24 GB50LeRobot v3.0
SmolVLAVLA فشرده~450 M245 msRTX 4090 / 24 GB30LeRobot v3.0
GR00T N1.7بنیاد VLA، سر انتشار~3 B (~40 M trained)152 msA100 / H100 80 GB50LeRobot v2.0 or v2.1
GR00T N1.5بنیاد VLA، پیشین~3 B165 msA100 / H100 80 GB50LeRobot v2.0 or v2.1
Pi0.5VLA تطبیق جریان، ببینید تطبیق جریان~3 B, PaliGemma backbone485 msA100 / H100 80 GB50LeRobot v3.0
صفحه سیاست‌های AY-Robots که یک جدول مقایسه‌ای از ACT، SmolVLA، GR00T N1.5، GR00T N1.7 و Pi0.5 را با تعداد پارامترها، الزامات GPU، تأخیر استنتاج و حداقل تعداد اپیزودها نشان می‌دهد.
جدول /policies: ACT کمترین تعداد پارامتر و کوتاه‌ترین زمان گام را دارد.
آموزش ACT از ابتدا
مزایا
  • ۲۰ میلی‌ثانیه در هر گام عملیاتی، سریع‌ترین در میان پنج روش، روی کارت ۲۴ گیگابایتی نه A100.
  • ۱ تا ۳ دلار آمریکا در هر اجرا در مقابل ۴ تا ۱۲ دلار برای کلاس ۳ B.
  • دقیق در کارهای پر تماس که دیده است: ۸۸ و ۹۶ درصد در Slide Ziploc و Slot Battery، جایی که روش‌های قبلی هرگز از مرحله اول عبور نکردند.
مبادله‌ها
  • عدم شرطی‌سازی زبانی: رشته وظیفه نادیده گرفته می‌شود، بنابراین هر نقطه بازرسی یک وظیفه است.
  • عدم پیش‌فرض‌های معنایی: هر آنچه می‌داند از ۵۰ اپیزود شما آمده است.
  • تعمیم‌پذیری محدود: دوربین را جابجا کنید و باید دوباره آموزش دهید.
  • بی‌صدا شکست می‌خورد: افت زیان، بازو کاری نمی‌کند، گزارش‌ها چیزی نمی‌گویند.
  • مزیت سرعت تنها در صورتی کمک می‌کند که استنتاج در کنار سرووها قرار گیرد.

ACT را زمانی انتخاب کنید که وظیفه و صحنه ثابت هستند و حرکت باید سریع و دقیق باشد. یک را زمانی انتخاب کنید که یک نقطه بازرسی باید چندین دستورالعمل را پوشش دهد. دو صفحه این تصمیم را رو در رو بررسی می‌کنند: و . برای معیارهای منتشر شده، هر عدد را به منبع آن پیوند می‌دهد.

آنچه قبل از شروع نیاز دارید

یک بازوی پیرو، یک بازوی رهبر برای ، حداقل یک دوربین، یک GPU با ۲۴ گیگابایت حافظه. ACT فقط تصاویر و موقعیت‌های مفصل را می‌خواند. دو دوربین نقطه بهینه است: یک نمای ثابت از جلو برای اینکه اشیاء کجا هستند، یک دوربین مچی برای اینکه در شرف لمس کردن است، مانند ALOHA.

بازوسرووهاولتاژهزینه قطعاتوضعیت
SO-100Feetech STS32157.4 V~110 to 150 EURپشتیبانی کامل، بازوی مرجع
SO-101Feetech STS32157.4 V~130 to 170 EURپشتیبانی کامل
Koch v1.1Dynamixel XL330 / XL4305 V and 12 V rails~250 to 350 EURسازگار
LeKiwiFeetech STS3215 (arm)7.4 V arm, 12 V base~400 to 500 EURسازگار
7.4 V، نه 12 V

SO-100 و SO-101 از سرووهای Feetech STS3215 بر روی ریل 7.4 V استفاده می‌کنند. تغذیه آنها با 12 V آنها را از بین می‌برد، آنقدر بی‌صدا که مردم ابتدا نرم‌افزار را مقصر می‌دانند، و یک منبع تغذیه 12 V Koch به طور فیزیکی روی برد SO-100 جا می‌شود. برچسب را بررسی کنید. علائم: سروو پاسخ نمی‌دهد، بازو تکان می‌خورد سپس افت می‌کند. همچنین SO-100 در مقابل SO-101.

از بازوی خام تا مجموعه داده ضبط شده

جریان زیر lerobot 0.6.x است. اگر بازوی کالیبره شده و مجموعه داده دارید، از آن صرف نظر کنید. در غیر این صورت، راهنمای شروع به کار SO-100 مونتاژ را پوشش می‌دهد، راهنمای گام به گام ضبط ضبط را پوشش می‌دهد و مستندات مجموعه داده قالب را پوشش می‌دهد.

  1. 1
    نصب lerobot با افزونه‌های مناسب

    برای ضبط به core_scripts، برای آموزش به training و برای سرووهای Feetech به feetech نیاز است. پایتون 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 هر بازو را پیدا کنید

    آن را با هر دو بازو متصل اجرا کنید و در صورت درخواست یکی را جدا کنید. در لینوکس ممکن است نیاز باشد مجوزهای گره را باز کنید.

    bash
    lerobot-find-port
    # on Linux, if the port exists but is unreadable:
    sudo chmod 666 /dev/ttyACM0
  3. 3
    شناسه‌های موتور و نرخ باود را تنظیم کنید

    در SO-100 این کار قبل از مونتاژ انجام می‌شود: برخلاف SO-101، کانکتورها پس از ساخت غیرقابل دسترس هستند. اسکریپت باس را یک موتور در هر زمان از گریپر پیمایش می‌کند و شناسه‌ها را در 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 را فشار دهید، سپس هر یک را در کل دامنه خود حرکت دهید. کالیبراسیون به یک سیاست آموزش‌دیده روی یک بازو اجازه می‌دهد روی بازوی دیگر اجرا شود. از همان 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 جابجا شده، نوری که تغییر کرده زیرا نیمی از مجموعه را در بعدازظهر ضبط کرده‌اید، گرفتن شیء به دو روش مختلف. هر یک از اینها یک منحنی افت (loss curve) با ظاهر عالی و بازویی که به جای اشتباه می‌رود، ایجاد می‌کند. به افت کاهش می‌یابد، سیاست کاری نمی‌کند، سیاست فقط در یک تنظیمات کار می‌کند و جمع‌آوری داده‌های آموزشی با کیفیت بالا مراجعه کنید.

قبل از آموزش، حداقل پنج اپیزود را بازپخش کنید. جریان‌های دوربین، وضعیت‌های مفصل و اقدامات را به ازای هر ذخیره می‌کند، و بازپخش آن اقدامات را به بازو بازمی‌گرداند. اگر بازپخش کار را انجام ندهد، داده‌ها آن را شامل نمی‌شوند و آموزش آن را ابداع نخواهد کرد.

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 لروبات می‌گوید با آنها شروع کنید.

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 اختیاری و ارزشمند است: منحنی افت (loss curve) تنها سیگنال ارزان در یک اجرای ۱۰۰۰۰۰ مرحله‌ای است. برنامه زمان‌بندی از پیکربندی آموزش lerobot می‌آید، نه ACTConfig: ۱۰۰۰۰۰ مرحله، دسته ۸، سید ۱۰۰۰، یک نقطه بازیابی هر ۲۰۰۰۰ مرحله، ثبت وقایع هر ۲۰۰ مرحله.

یک اجرای کامل پنج دایرکتوری نقطه بازیابی، از 020000 تا 100000، به علاوه یک last سیم‌لینک بر جای می‌گذارد. همه آنها را نگه دارید: بهترین سیاست اغلب آخرین سیاست نیست.

تنظیمپیش‌فرض lerobotفرم ACT در AY-Robotsتوضیح
اندازه دسته88اگر به محدودیت‌های VRAM برخورد کردید، ابتدا آن را کاهش دهید.
نرخ یادگیری1e-51e-5مشابه مقاله ALOHA.
حداکثر مراحل100000100000تقریباً جایی که یک مجموعه ۵۰ اپیزودی از بهبود باز می‌ایستد.
انباشت گرادیان11, does not applyبه جای آن اندازه دسته را تغییر دهید.
سید1000exposedنقطه ورودی tyro در GR00T سید ندارد؛ اجراهای ACT قابل بازتولید هستند.
chunk_size / n_action_steps100 / 100100 / 100, editableافق پیش‌بینی و اجرا. دومی را کاهش دهید، نه اولی.
فرکانس نقطه بازیابی20000not exposedsaveSteps در اینجا یک تنظیم GR00T است.
خارج از حافظه بودن یک مشکل اندازه دسته است، نه مشکل کارت

ACT با اندازه دسته ۸ و دو دوربین 640x480 به راحتی روی ۲۴ گیگابایت جا می‌شود. زمانی که افراد برای سرعت، اندازه دسته را افزایش می‌دهند، یا فریم‌های 1920x1080 را که یک مثال ضبط lerobot نشان می‌دهد به آن می‌دهند، دیگر جا نمی‌شود. دو backbone ResNet-18 در 1080p مشخصات حافظه بسیار متفاوتی دارد. قبل از اجاره کارت بزرگتر، --batch_size را به ۴ کاهش دهید. به خارج از حافظه بودن در آموزش مراجعه کنید.

مدت زمان: حدود ۵ ساعت روی یک RTX 2080 Ti با ۱۱ گیگابایت در مقاله، چند ساعت برای ۱۰۰ هزار گام طبق صفحه ACT لربات، ۲ تا ۵ ساعت روی رده ۲۴ گیگابایتی AY-Robots. آن را کوتاه نکنید. README مخزن مرجع می‌گوید که یک سیاست ناپایدار یا متوقف‌شونده معمولاً فقط به آموزش بیشتری نیاز دارد، زیرا موفقیت و روان بودن پس از تثبیت کاهش خطا (loss plateaus) همچنان بهبود می‌یابد: برای داده‌های دنیای واقعی حداقل ۵۰۰۰ اپوک یا ۳ تا ۴ برابر طول بیشتر پس از تثبیت نیاز دارد.

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 کمکی نمی‌کند، زیرا به یک نقطه بازرسی از پیش آموزش‌دیده نیاز دارد. رشته وظیفه (task string) می‌تواند حذف شود؛ مثال خود لربات آن را برای ACT قابل صرف‌نظر کردن (skippable) علامت‌گذاری کرده است.

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. از تاریخ ۲۳ آگوست ۲۰۲۶، صفحه مستندات ACT همچنان مستقیماً بالای بلوکی که lerobot-rollout را اجرا می‌کند، می‌گوید "با استفاده از دستور lerobot-record". دستور را دنبال کنید، نه جمله را.

برای پین کردن یک نقطه بازرسی به جای مدل نهایی، اضافه کنید --policy.pretrained_revision. این نیاز دارد که اجرا با --save_checkpoint_to_hub=true شروع شده باشد، که به طور پیش‌فرض غیرفعال است: بدون آن lerobot فقط مدل نهایی را ارسال می‌کند و نه چیز دیگری. با آن، هر نقطه بازرسی با گام صفر-پد شده خود برچسب‌گذاری می‌شود، بنابراین --policy.pretrained_revision=060000 نقطه بازرسی ۶۰۰۰۰ گامی را بازیابی می‌کند. مقایسه آن با ۱۰۰۰۰۰ روی بازوی واقعی ارزان‌ترین آزمایش موجود است.

دو مسیر به یک نقطه بازرسی

تمام موارد بالا مسیر دستی هستند و کار می‌کنند. مسیر پلتفرم، کنترل را در ازای عدم نیاز به داشتن GPU یا محیط پایتون معامله می‌کند.

  1. lerobot 0.6.x را با core_scripts، training، feetech، ffmpeg نصب کنید.
  2. پورت‌ها را پیدا کنید، شناسه‌های موتور را تنظیم کنید، هر دو بازو را کالیبره کنید، 50 اپیزود ضبط کنید.
  3. چند اپیزود را بازپخش کنید تا تأیید شود داده‌ها شامل وظیفه هستند.
  4. یک GPU 24 گیگابایتی اجاره کنید یا بخرید، 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 را ویرایش کنید، یک دوربین اضافه کنید، ترینر را فورک کنید. برای تحقیق به جای تحویل یک وظیفه، یک پلتفرم حواس‌پرتی است.

ماتریس آموزش AY-Robots با پنج ردیف سیاست و چهار ستون بازوی ربات، که در آن هر سلول به راهنمای آموزش خاص برای ترکیب آن مدل و بازو پیوند دارد.
ماتریس در /train. ردیف ACT در مقابل ستون SO-100 راهنمای این مقاله است.

چه چیزی واقعاً اشتباه پیش می‌رود

تقریباً هیچ یک از مشکلات در دستور آموزش نیست. بلکه در موارد پیرامون آن است، که بر اساس دفعات بروز مشکل در اولین بار مرتب شده‌اند.

نشانهعلت معمولصفحه
lerobot-find-port چیزی نشان نمی‌دهددرایور، کابل یا مجوزهای گرهبازو شناسایی نشد
دوربین در زمان ضبط موجود نیستشاخص پس از راه‌اندازی مجدد تغییر کرده، یا دو دوربین روی یک کنترلر USBدوربین شناسایی نشد
آموزش مجموعه داده را رد می‌کندACT نسخه v3.0 را می‌خواهد، GR00T به v2.1 نیاز داردمجموعه داده به عنوان v3 رد شد
حافظه CUDA پر استاندازه دسته افزایش یافته، یا فریم‌های 1080p به جای 480pکمبود حافظه در آموزش
Loss خوب به نظر می‌رسد، بازو کاری نمی‌کندداده‌ها فاقد وظیفه هستند، یا دوربین جابجا شده استloss کاهش می‌یابد، policy کاری نمی‌کند
حرکت ناگهانی یا مکث در میانه اپیزودآموزش ناکافی، توقف در مرز قطعه، یا فراخوانی استنتاج با زمان‌بندی منقضی شدهpolicy در میانه حرکت متوقف می‌شود

دو ردیف نیاز به تاکید دارند. ACT بر روی LeRobot v3.0 آموزش می‌بیند در حالی که لودر GR00T بر روی آن کرش می‌کند و به v2.1 نیاز دارد، بنابراین یک مجموعه داده که ACT را آموزش می‌دهد می‌تواند اجرای GR00T را با شکست مواجه کند. و ردیف آخر دو راه حل دارد: نویسندگان ACT حرکت ناگهانی را با آموزش بیشتر پاسخ می‌دهند، در حالی که با n_action_steps در 100، یک توقف واقعی در مرز قطعه رخ می‌دهد، یک مکث قابل مشاهده هر 3.3 ثانیه در 30 فریم بر ثانیه. دو نکته دیگر برای دانستن: یک مفصل مرده معمولاً یک شناسه سروو که هرگز نوشته نشده است، و یک گریپر که نزدیک می‌شود اما هرگز بسته نمی‌شود به معنای دامنه گریپر بسیار کم در نمایش‌ها است. فهرست کامل: صفحات حالت‌های خرابی.

هزینه یک اجرا

سطحمدل‌هازمان اجراقیمت ساعتیهزینه هر اجرا
RTX 4090 / 24 GBACT, SmolVLA2 to 5 hours0.30 to 0.60 USDabout 1 to 3 USD
A100 80 GB / H100GR00T N1.7, GR00T N1.5, Pi0.53 to 6 hours1.20 to 2.00 USDabout 4 to 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 استفاده کنید.

واقعاً به چند اپیزود نیاز دارم؟

۵۰: آنچه ALOHA برای هر وظیفه ضبط کرده است (۱۰۰ برای Thread Velcro، سخت‌ترین آن) و حداقل AY-Robots. lerobot حدود ۱۰ اپیزود برای هر مکان شیء، با دوربین‌های ثابت و گرفتن ثابت توصیه می‌کند. پنجاه اپیزود تمیز بهتر از صد اپیزود است که در آن دوربین حرکت کرده است.

آیا باید chunk_size را از ۱۰۰ تغییر دهم؟

معمولاً خیر. کاهش از ۱ درصد در k = 1 به ۴۴ درصد در k = 100 افزایش می‌یابد و پس از آن کاهش می‌یابد، بنابراین ۱۰۰ نزدیک به اوج قرار دارد. اگر بازو بیش از حد طولانی متعهد می‌شود، به جای آن n_action_steps را کاهش دهید: در ۳۰ فریم بر ثانیه، ۲۵ درخواست مجدد هر ۰.۸ ثانیه.

یک اجرای آموزشی چقدر طول می‌کشد و آیا می‌توانم آن را زودتر متوقف کنم؟

دو تا پنج ساعت روی یک کارت ۲۴ گیگابایتی برای ۱۰۰۰۰۰ گام. نقاط بازرسی هر ۲۰۰۰۰ گام ذخیره می‌شوند و --resume=true یک اجرا را از سر می‌گیرد، بنابراین توقف زودهنگام ایمن است. فقط نه در اولین بخش مسطح: همواری پس از تثبیت کاهش ضرر بهبود می‌یابد.

ضرر کاهش یافت و بازو همچنان شکست می‌خورد. حالا چه؟

تقریباً همیشه مجموعه داده. اپیزودهای ضبط شده را روی بازو بازپخش کنید: اگر بازپخش وظیفه را انجام نمی‌دهد، داده‌ها شامل آن نیستند. سپس بررسی کنید که آیا چیزی حرکت کرده است، به خصوص یک دوربین. ACT هیچ پیش‌فرضی ندارد، بنابراین یک تکان کوچک در اپیزود ۲۱ دائمی است.

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started