صفحه مدل SmolVLA در AY-Robots که تعداد پارامترها، رده GPU، تأخیر استنتاج به ازای هر گام عملیاتی و حداقل تعداد اپیزودها را نشان می‌دهد
SmolVLALeRobotآموزش VLAتنظیم دقیقSO-100

چگونه SmolVLA را روی یک GPU 24 گیگابایتی آموزش دهیم (lerobot 0.6.1)

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

SmolVLA یک VLA با 450 میلیون پارامتر است که روی یک کارت 24 گیگابایتی تنظیم دقیق می‌شود. دستورات واقعی lerobot 0.6.1، پیش‌فرض‌های واقعی، دام‌هایی که یک روز زمان می‌برند و هزینه یک اجرا چقدر است.

SmolVLA در یک نگاه

  • 450 میلیون پارامتر، که حدود 100 میلیون از آنها یک متخصص عمل تطبیق جریان است. lerobot فقط آن متخصص را آموزش می‌دهد و VLM را ثابت نگه می‌دارد، به همین دلیل روی یک کارت جا می‌شود.
  • راهنمای محاسباتی LeRobot گروه smolvla را در حدود 10 تا 16 گیگابایت VRAM اوج در بچ 8 با AdamW قرار می‌دهد. از این رو 24 گیگابایت.
  • نقطه ورود 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 گیگابایتی که 1 تا 3 دلار برای هر اجرا هزینه دارد در مقابل 4 تا 12 دلار برای مدل‌های 80 گیگابایتی.

اکثر افرادی که یک مدل بینایی-زبان-عمل روی یک بازوی واقعی می‌خواهند، در خط سخت‌افزار متوقف می‌شوند. GR00T N1.7 و Pi0.5 هر کدام حدود سه میلیارد پارامتر دارند و به یک A100 80 GB یا یک H100 نیاز دارند. اگر آنچه شما دارید یک کامپیوتر گیمینگ با RTX 4090 است، این پایان راه است. SmolVLA استثنا است: 450 میلیون پارامتر، درون LeRobot، ساخته شده برای تنظیم دقیق روی یک کارت مصرف‌کننده و سرویس‌دهی از یک CPU.

ابتدا مسیر دستی: lerobot را نصب کنید، چک‌پوینت lerobot/smolvla_base را دریافت کنید، دستور واقعی را اجرا کنید، و اجرا را در حین وقوع بخوانید. سپس مسیر پلتفرم، و جایی که کمکی نمی‌کند.

SmolVLA چیست، در اعدادی که می‌توانید بررسی کنید

SmolVLA یک تطبیق جریان سیاستی است که به یک مدل زبان بصری کوچک متصل شده است. ستون فقرات آن SmolVLM2-500M-Video-Instruct است؛ مقاله فقط ۱۶ لایه اول مدل زبان آن را حفظ می‌کند، هر فریم دوربین را به ۶۴ توکن بصری با یک درهم‌سازی پیکسلی به جای کاشی‌کاری تصویر محدود می‌کند، و توجه متقاطع را با یک لایه توجه خودی در هر بلوک دوم در هم می‌آمیزد. هزینه استنتاج یک محدودیت طراحی بود، نه یک فکر ثانویه.

ویژگیمقدارمنبع
پارامترهای کل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

معیارها دلیلی هستند که مردم به یک مدل ۴۵۰ میلیونی اهمیت می‌دهند. در LIBERO، میانگین آن ۸۷.۳ درصد در مقابل ۷۶.۵ برای OpenVLA با ۷ میلیارد و ۸۶.۰ برای Pi0 پیش‌آموزش‌دیده رباتیک با ۳.۳ میلیارد است؛ در Meta-World، ۵۷.۳ در مقابل ۴۷.۹. در سخت‌افزار واقعی SO-100، آموزش چندوظیفه‌ای ۷۵ درصد در برداشتن و قرار دادن، ۹۰ درصد در چیدن، ۷۰ درصد در مرتب‌سازی، با میانگین ۷۸.۳ را می‌دهد، در حالی که ACT آموزش‌دیده برای هر وظیفه به طور متوسط ۴۸.۳ بود. همین ردیف‌ها در کنار هر VLA منتشر شده در ورودی میدان SmolVLA و مقایسه ACT با SmolVLA.

نسخه صادقانه ادعای اندازه

SmolVLA در همه چیز بهتر از یک مدل ۳ میلیاردی نیست. جدول SO-101 خود مقاله گواه این است: ۹۰ درصد موفقیت در توزیع، ۵۰ درصد خارج از آن، بر روی پلتفرمی که هرگز روی آن پیش‌آموزش ندیده بود. آنچه ادعا می‌کند و پشتیبانی می‌کند این است که در مقایسه با Pi0، حدود ۴۰ درصد سریع‌تر با ۶ برابر حافظه کمتر آموزش می‌بیند.

چرا کارت ۲۴ گیگابایتی برای اولین اجرا مناسب است

LeRobot یک راهنمای اندازه‌گیری محاسباتی ارائه می‌دهد که مفیدترین صفحه در مخزن برای این منظور است. این راهنما سیاست‌ها را بر اساس اندازه ستون فقرات گروه‌بندی می‌کند و برای هر گروه یک پوشش VRAM ارائه می‌دهد که با اندازه دسته ۸ و AdamW، پیش‌فرض lerobot، اندازه‌گیری شده است. تنها وضعیت بهینه‌ساز ۳۰ تا ۱۰۰ درصد بیشتر از یک گذر رو به جلو و عقب خالص اضافه می‌کند، بنابراین این ارقام فقط مربوط به وزن‌ها نیستند.

گروهسیاست‌هاحداکثر VRAM (دسته ۸، AdamW)پردازنده‌های گرافیکی اولیه
BC سبکact, vqbet, tdmpcحدود ۲ تا ۶ گیگابایتRTX 3060, L4
انتشارdiffusion, multi_task_ditحدود ۸ تا ۱۴ گیگابایتRTX 4070+, L4
VLA کوچکsmolvlaحدود ۱۰ تا ۱۶ گیگابایتRTX 4080+, L4, A10G
VLA بزرگpi0, pi0_fast, pi05, xvla, wall_xحدود ۲۴ تا ۴۰ گیگابایتA100 40 GB+
چندوجهیgroot, eo1حدود ۲۴ تا ۴۰ گیگابایتA100 40 GB+

ده تا شانزده گیگابایت در دسته ۸ استدلال اصلی است: یک کارت ۲۴ گیگابایتی این مقدار را به علاوه بارگذار داده (dataloader) پوشش می‌دهد. AY-Robots مدل SmolVLA را روی RTX 4090 یا هر کارت ۲۴ گیگابایتی، حداقل با ۳۰ اپیزود، LeRobot v3.0 داده، ۲۴۵ میلی‌ثانیه در هر گام عملیاتی. اجاره‌ای، این یعنی ۲ تا ۵ ساعت با نرخ ۰.۳۰ تا ۰.۶۰ دلار آمریکا در ساعت، حدود ۱ تا ۳ دلار آمریکا برای هر تنظیم دقیق اجرا، در مقابل ۴ تا ۱۲ دلار آمریکا در رده ۸۰ گیگابایتی که GR00T و Pi0.5 نیاز دارند (قیمت‌گذاری). یک اجرای ناموفق SmolVLA به اندازه یک قهوه هزینه دارد؛ یک اجرای ناموفق GR00T، به اندازه یک ناهار.

جدول هزینه AY-Robots: کارت به ازای هر سیاست، زمان اجرا، قیمت به ازای هر اجرا، تعداد اپیزودهای مورد نیاز
SmolVLA و ACT در ردیف ۲۴ گیگابایتی قرار دارند، سه مدل ۳ B در ردیف ۸۰ گیگابایتی.
شروع با SmolVLA به جای یک مدل ۳ B
آنچه به دست می‌آورید
  • با سخت‌افزاری که ممکن است از قبل داشته باشید سازگار است: تقریباً ۱۰ تا ۱۶ گیگابایت در بچ ۸.
  • یک اجرای هدر رفته ساعت‌ها و چند دلار هزینه دارد، بنابراین می‌توانید اشتباه بودن در مورد مجموعه داده را بپذیرید.
  • از پیش آموزش‌دیده روی مجموعه‌داده‌های جامعه که تحت برچسب lerobot به اشتراک گذاشته شده‌اند، با نتایج واقعی SO-100 و SO-101.
  • این مدل در خود lerobot قرار دارد: بدون مخزن فروشنده، و smolvla_base محدود نشده است.
آنچه از دست می‌دهید
  • ۴۵۰ M همچنان ۴۵۰ M است: موفقیت خارج از توزیع در جدول SO-101 مقاله از ۹۰ به ۵۰ درصد کاهش می‌یابد.
  • این مدل داده‌های LeRobot v3.0 را می‌خواهد؛ یک ضبط v2.1 باید تبدیل شود (dataset rejected v3).
  • ۲۴۵ میلی‌ثانیه به ازای هر گام عملیاتی یک کنترل‌کننده انتخاب و قرار دادن (pick and place) کارآمد است، نه یک کنترل‌کننده واکنشی.
  • مثال مستندات، بچ ۶۴ را روی A100 اجرا می‌کند؛ روی ۲۴ گیگابایت، بچ را با زمان واقعی (wall clock) معاوضه می‌کنید.

گام ۰: مجموعه داده، اجرا را تعیین می‌کند، نه پرچم‌ها

اگر ضبط بد باشد، هیچ‌یک از موارد زیر اهمیت ندارد. صفحه LeRobot SmolVLA صریح است: مجموعه داده مرجع ۵۰ اپیزود در ۵ موقعیت مکعبی بود، ۱۰ اپیزود برای هر موقعیت، و همان وظیفه با ۲۵ اپیزود عملکرد ضعیفی داشت. تکرار به ازای هر تغییر تعمیم‌پذیری ایجاد می‌کند، اما تعداد خام اپیزودها این کار را نمی‌کند. هرگز یکی را ضبط نکرده‌اید؟ از اولین مجموعه داده خود را ضبط کنید، با کلاینت دسکتاپ، که فرمت LeRobot را از یک تله‌اپریشن جلسه می‌نویسد، یا یکی را از دایرکتوری مجموعه داده.

  • حداقل ۳۰ اپیزود در AY-Robots، حدود ۵۰ اپیزود برای دستورالعمل مرجع LeRobot.
  • هر تغییری که در زمان اجرا (rollout) انتظار دارید، چندین بار تکرار شود.
  • یک رشته وظیفه (task string)، که در زمان ضبط و اجرا به طور یکسان نوشته شده باشد. مدل بر اساس آن متن شرطی می‌شود.
  • دوربین‌های ثابت. جابجایی دوربین بین زمان ضبط و اجرا، رایج‌ترین دلیلی است که یک منحنی افت (loss curve) تمیز، بازوی بی‌حرکت را نتیجه می‌دهد.
  • یک تغییر (variation) کنار گذاشته شده که هرگز روی آن آموزش ندیده‌اید، تا چیزی صادقانه برای آزمایش در برابر آن داشته باشید.
تله مجموعه داده که یک روز زمان می‌برد

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 با کیفیت بالا برای دستکاری ربات جمع‌آوری کنیم. نسخه کوتاه: ۳۰ تا ۵۰ اپیزود تمیز از یک وظیفه با تغییرات عمدی، ۲۰۰ اپیزود نامرتب از سه وظیفه را شکست می‌دهد، با اختلافی که هیچ هایپرپارامتری نمی‌تواند آن را جبران کند.

نصب 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. برای اعمال پچ بر روی ترینر، مخزن را کلون کرده و به جای آن از pip install -e ".[smolvla,training]" استفاده کنید.

نصب پایه lerobot سبک است و وابستگی‌های سنگین را پشت بسته‌های اضافی (extras) پنهان می‌کند: smolvla بسته‌های transformers، num2words و accelerate را اضافه می‌کند، training پشته مجموعه داده و wandb را، core_scripts وابستگی‌های سخت‌افزاری و بصری‌سازی را. در لینوکس، مسیر نصب همچنین چرخ (wheel) CUDA شما را تعیین می‌کند: پیش‌فرض PyPI یک چرخ cu130 با حداقل نسخه درایور 580.65 است، بنابراین در صورت داشتن درایور قدیمی‌تر، ابتدا torch را از فهرست cu128 نصب کنید، سپس lerobot را.

policy.path و policy.type پرچم‌های یکسانی نیستند

--policy.path=lerobot/smolvla_base چک‌پوینت از پیش آموزش‌دیده 450 مگابایتی را بارگذاری کرده و آن را تنظیم دقیق (fine-tune) می‌کند. --policy.type=smolvla یک SmolVLA جدید می‌سازد، و پیش‌فرض پیکربندی load_vlm_weights = False به این معنی است که حتی وزن‌های ستون فقرات SmolVLM2 را بارگذاری نمی‌کند مگر اینکه شما درخواست کنید. اگر این را اشتباه انجام دهید، اجرا به خوبی آموزش می‌بیند، همان هزینه را دارد، و هیچ چیز قابل انتقالی یاد نمی‌گیرد.

اجرای آموزش، دستور به دستور

  1. 1
    احراز هویت در برابر هاب

    چک‌پوینت پایه از هاب می‌آید و مجموعه داده شما نیز احتمالاً همینطور است.

    bash
    hf auth login
  2. 2
    گزینه‌ها را یک بار بخوانید

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

    bash
    lerobot-train --help
  3. 3
    شروع تنظیم دقیق

    مثال مستندات، بچ ۶۴ را روی یک A100 اجرا می‌کند؛ مرجع A100 40 GB در راهنمای محاسبات، بچ ۱۶ است، و ۸ معادل ۲۴ GB است. هیچ پرچم زمان‌بندی در اینجا عمداً وجود ندارد، به پایین مراجعه کنید.

    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
    خط لاگ را بخوانید، نه فقط مقدار loss را

    در هر --log_freq گام، lerobot مقادیر loss, grdn, lr, updt_s, data_s, smp/s و در CUDA، mem_gb را چاپ می‌کند. mem_gb نشان می‌دهد که آیا بچ جا می‌شود، lr نشان می‌دهد که آیا زمان‌بندی در حال کاهش است، و نزدیک شدن data_s به updt_s به این معنی است که دیتالودر گلوگاه است، نه GPU.

    bash
    # if data_s creeps toward updt_s
    lerobot-train ... --num_workers=8
  5. 5
    چک‌پوینت‌هایی را جمع‌آوری کنید که بتوانید مقایسه کنید

    save_freq به طور پیش‌فرض ۲۰۰۰۰ است، بنابراین یک اجرای ۲۰۰۰۰ گامی یک چک‌پوینت باقی می‌گذارد و چیزی برای مقایسه با آن وجود ندارد. آن را روی ۲۰۰۰ تنظیم کنید. برای ارسال به هاب به --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 کنار چک‌پوینت اشاره دهید. lerobot از شروع در یک output_dir موجود خودداری می‌کند مگر اینکه در حال ادامه دادن باشید، بنابراین نمی‌توانید به طور تصادفی یک اجرا را بازنویسی کنید.

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

پرچم‌هایی که واقعاً نتیجه را تغییر می‌دهند

پرچمکاربرددر 24 GB
--batch_sizeنمونه‌ها در هر گام، تقریباً خطی با VRAM4 to 8
--stepsکل گام‌های بهینه‌ساز20000 در اولین مرحله
--policy.scheduler_decay_stepsطول کاهش کسینوسی، پیش‌تنظیم 30000فقط بالای 30000 اثر می‌کند
--policy.use_ampدقت ترکیبی؛ SmolVLA فیلد dtype نداردtrue زمانی که حافظه کم است
--num_workersپردازش‌های دیتالودر، پیش‌فرض 4افزایش دهید تا زمانی که data_s از افزایش باز ایستد
--dataset.eval_splitکسری از اپیزودهای کنار گذاشته شده برای هر وظیفه0.1, with --eval_steps
--policy.freeze_vision_encoderبرج بینایی را ثابت نگه می‌داردtrue در 24 GB
--policy.train_expert_onlyفقط متخصص ~100 M گرادیان دریافت می‌کندtrue در ابتدا
زمان‌بندی: آنچه 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 بهینه‌ساز و پیش‌تنظیم زمان‌بندی خود را دارد، و مگر اینکه شما تنظیم کنید use_policy_training_preset=false آن پیش‌تنظیم‌ها برنده می‌شوند. نیمی از سوالاتی که مردم در مورد آموزش SmolVLA می‌پرسند با یک پیش‌فرض پاسخ داده می‌شوند که از وجود آن بی‌خبر بودند.

تنظیمپیش‌فرض در lerobot 0.6.1تعریف شده در
اندازه قطعه / تعداد مراحل عمل50 / 50SmolVLAConfig
تعداد مراحل (حذف نویز تطبیق جریان)10SmolVLAConfig
نرخ یادگیری بهینه‌ساز1e-4SmolVLAConfig
مراحل گرمایش زمان‌بندی1000SmolVLAConfig
مراحل کاهش زمان‌بندی30000SmolVLAConfig
نرخ یادگیری کاهش زمان‌بندی2.5e-6SmolVLAConfig
فریز کردن رمزگذار بیناییtrueSmolVLAConfig
فقط آموزش متخصصtrueSmolVLAConfig
اندازه دسته / مراحل8 / 100000TrainPipelineConfig
سید / فرکانس ذخیره / تعداد کارگران1000 / 20000 / 4TrainPipelineConfig

دو خطی که مردم را شگفت‌زده می‌کند عبارتند از freeze_vision_encoder و train_expert_only، هر دو درست هستند. به طور پیش‌فرض شما تقریباً ۱۰۰ میلیون پارامتر را آموزش می‌دهید، نه ۴۵۰ میلیون، به همین دلیل است که روی ۲۴ گیگابایت جا می‌شود. اجرای مرجع LeRobot روی یک کلاستر چهار GPU H100 هر دو را به false تغییر می‌دهد؛ روی یک کارت ۲۴ گیگابایتی، این کار یک اجرای موفق را به .

تنظیم‌کننده حافظه که وجود ندارد

توصیه راهنما زمانی که با محدودیت حافظه مواجه هستید این است که اندازه بچ (batch size) را کاهش دهید و از انباشت گرادیان (gradient accumulation) برای بازیابی بچ مؤثر استفاده کنید. هیچ انباشت گرادیانی در lerobot 0.6.1 وجود ندارد: TrainPipelineConfig چنین فیلدی ندارد و این رشته در هیچ کجای بسته منتشر شده ظاهر نمی‌شود. فرم AY-Robots مقدار انباشت گرادیان ۸ را برای SmolVLA نشان می‌دهد و آن را نیز اعمال نمی‌کند. اهرم‌های شما روی ۲۴ گیگابایت عبارتند از --batch_size، دو پیش‌فرض freeze، و --policy.use_amp.

مدت زمان اجرا و تعداد گام‌های کافی

LeRobot نقاط مرجع زمان واقعی را برای پنج اپوک (epoch) روی یک مجموعه داده تقریباً ۵۰ اپیزودی، حدود ۴۵۰۰۰ فریم با سرعت ۳۰ فریم بر ثانیه، منتشر می‌کند. مستندات می‌گویند این ارقام تقریبی هستند، اما تفاوت بین انتظار یک ساعت و یک روز را نشان می‌دهند.

تنظیماتسیاستدستهزمان واقعی
Single L4 / A10G (24 GB)smolvla4حدود ۳ تا ۶ ساعت
Single A100 40 GBsmolvla16حدود ۱ تا ۲ ساعت
4 x H100 80 GB with acceleratesmolvla32حدود ۱ تا ۲ ساعت
Single RTX 4090 / RTX 3090 (24 GB)act8حدود ۳۰ تا ۶۰ دقیقه
قبل از انتخاب --steps، محاسبات اپوک را انجام دهید

قانون این است که ۵ تا ۱۰ اپوک روی مجموعه داده اجرا شود، نه تعداد گام‌های ثابت: steps_per_epoch = ceil(total_frames / (num_gpus x batch_size)) . در مجموعه داده مرجعی که مستندات به آن اشاره می‌کنند، lerobot/svla_so100_pickplace، فراداده ۵۰ اپیزود و ۱۹۶۳۱ فریم را گزارش می‌کند: دسته ۸ حدود ۲۴۵۴ گام در هر اپوک می‌دهد، بنابراین ۲۰۰۰۰ گام تقریباً ۸ اپوک است. دسته را نصف کنید و همان بودجه نصف اپوک‌ها را فراهم می‌کند، بنابراین هر زمان که --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
رشته وظیفه باید با رشته‌ای که با آن ضبط کرده‌اید مطابقت داشته باشد. مدل بر اساس آن متن شرطی شده است، بنابراین یک بازنویسی (paraphrase) یک دستورالعمل متفاوت است.

245 میلی‌ثانیه برای هر گام عملیاتی به راحتی می‌تواند اشتباه تفسیر شود: سیاست chunk_size = 50 عمل را در هر گذر رو به جلو منتشر می‌کند و n_action_steps = 50 از آنها را اجرا می‌کند، بنابراین دفعات پرداخت این هزینه توسط این تنظیمات تعیین می‌شود، نه توسط دفعات دریافت فرمان توسط سرووها. این همان چیزی است که تقسیم‌بندی عمل (action chunking) به ارمغان می‌آورد و دلیل اینکه یک مدل 245 میلی‌ثانیه‌ای می‌تواند یک بازوی 30 هرتزی را هدایت کند. آنچه باقی می‌ماند تأخیر استنتاج (inference latency) در پایان هر تکه است.

اندازه‌گیری (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 که اجرای مدل را به تقسیم‌بندی بلادرنگ (real time chunking) تغییر می‌دهد، که بلوک استفاده خود اسکریپت آن را برای VLAs کند، 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 ترکیب می‌کند، که اینگونه جک بشکه‌ای اشتباه سوکت اشتباه را پیدا می‌کند.

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

شما مالک ماشین، محیط و اشکال‌زدایی هستید. تنها وابستگی ابری، دانلود نقطه بازرسی پایه از هاب است. این مسیر صحیح است اگر می‌خواهید سیاست را تغییر دهید، اگر داده‌ها نمی‌توانند شبکه شما را ترک کنند، یا اگر کارت بیکار است.

  • شما کنترل چرخ CUDA، درایور، ساخت ffmpeg و بارگذار داده را در اختیار دارید.
  • می‌توانید 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 اولین اجرای صحیح بود، این نیست که آیا کار کرد، بلکه این است که آیا شکست چیزی به شما آموخت. به ۶۰ یا ۷۰ درصد برسید و یک مدل بزرگتر هزینه منطقی بعدی است: داده‌ها سیگنال دارند. به ۱۰ درصد برسید و یک مدل ۳ B به احتمال زیاد نیز به ۱۰ درصد می‌رسد، که شما این را به جای دوازده دلار، با سه دلار یاد گرفتید.

ماتریس آموزش AY-Robots: پنج سیاست به عنوان ردیف، چهار بازوی ربات به عنوان ستون
هر سلول راهنمای خودش است. SmolVLA برای هر یک از چهار بازو یکی دارد.

قبل از صرف هزینه بیشتر، خواندن این موارد ارزشمند است: Pi0.5 در برابر SmolVLA برای ظرفیت بیشتر بر اساس همان ایده، و GR00T N1.7 در برابر SmolVLA برای مسیر NVIDIA، هر دو در رده ۸۰ گیگابایتی با هزینه ۴ تا ۱۲ USD در هر اجرا. راه دیگر، ACT یک خط پایه ارزان‌تر است: ۸۰ M پارامتر، ۲۰ ms در هر گام عملیاتی، بدون شرطی‌سازی زبان. هر پنج مورد در صفحه سیاست‌ها؛ آرنا دارای ۸۵ مدل و ۳۳۲ نتیجه بنچمارک است.

مقایسه سیاست‌های AY-Robots: پارامترها، رده GPU، تأخیر، حداقل اپیزودها
چهار عددی که یک اجرا را تعیین می‌کنند.

چک‌لیست قبل از مقیاس‌بندی هر چیزی

  1. آیا lr به کف 2.5e-6 خود رسید؟ زیر 30000 گام، lerobot نرخ کاهش را مجدداً مقیاس‌بندی می‌کند و در هنگام راه‌اندازی این را اعلام می‌کند؛ بالاتر از آن، --policy.scheduler_decay_steps را خودتان تنظیم کنید.
  2. بیش از یک نقطه بازرسی (checkpoint) و اپیزودهایی که با --dataset.eval_split کنار گذاشته شده‌اند تا خطای ارزیابی (eval loss) معنایی داشته باشد.
  3. آیا سیاست (policy) اصلاً حرکت می‌کند؟ کاهش خطا با بازوی بی‌حرکت دلایل خاصی دارد: خطا کاهش می‌یابد، سیاست کاری نمی‌کند.
  4. آیا در برابر تغییر صحنه مقاومت می‌کند؟ اگر نه: سیاست فقط در یک تنظیمات کار می‌کند.
  5. آیا seed را یادداشت کردید؟ lerobot به طور پیش‌فرض 1000 است، بنابراین دو اجرای دست‌نخورده قابل مقایسه باقی می‌مانند.
  6. فقط پس از آن: اپیزودهای بیشتر، تنوع بیشتر، یا یک مدل بزرگتر. به همین ترتیب.

برای اینکه چرا این مدل‌ها وجود دارند و با ورودی زبان چه می‌کنند، پیش‌زمینه است؛ مونتاژ را از طریق تا اولین اجرا می‌کند. برای نقطه بازرسی (checkpoint) تکمیل شده، ؛ اگر بازو هرگز ظاهر نشد، .

SmolVLA را روی بازوی خود آموزش دهید

مدل و بازو را انتخاب کنید و راهنما پیش‌فرض‌های دقیق، فرمت مجموعه داده و هزینه اجرا را به شما می‌دهد. SmolVLA در رده 24 گیگابایتی با هزینه 1 تا 3 دلار آمریکا برای هر اجرا قرار دارد.

راهنماهای آموزش را باز کنید
آیا واقعاً می‌توانم SmolVLA را روی RTX 4090 فاین‌تیون کنم؟

بله. راهنمای محاسباتی LeRobot، مدل SmolVLA را با حدود 10 تا 16 گیگابایت VRAM اوج در بچ 8 با AdamW قرار می‌دهد و کارت‌های مصرف‌کننده 24 گیگابایتی را برای آن راحت می‌داند. بچ 64 در مثال مستندات با یک A100 جفت شده است. حافظه تقریباً به صورت خطی با بچ مقیاس می‌شود، بنابراین از 4 یا 8 استفاده کنید و mem_gb را مشاهده کنید.

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

AY-Robots حداقل را 30 تعیین می‌کند. مستندات LeRobot حدود 50 را توصیه می‌کنند و گزارش می‌دهند که 25 اپیزود از یک کار مشابه عملکرد ضعیفی داشته است. ساختار بر تعداد غلبه می‌کند: مجموعه مرجع شامل 5 موقعیت مکعب با 10 اپیزود برای هر کدام بود، و این تکرار است که تعمیم‌پذیری را ایجاد می‌کند.

مستندات می‌گویند بچ 64، پلتفرم بچ 2 می‌فرستد. کدام درست است؟

هر دو، برای سخت‌افزارهای مختلف. مثال مستندات از بچ 64 استفاده می‌کند و حدود 4 ساعت برای 20000 گام روی یک A100 را ذکر می‌کند؛ نقطه مرجع A100 40 گیگابایتی در راهنمای محاسباتی، بچ 16 است. بچ 2 چیزی است که AY-Robots در رده 24 گیگابایتی ارسال می‌کند. به صورت محلی 4 تا 8 حد وسط است و محاسبات اپوک با آن تغییر می‌کند.

SmolVLA یا ACT برای اولین اجرا روی SO-100؟

ACT اگر کار یک حرکت تکراری است و سریع‌ترین حلقه را می‌خواهید: 20 میلی‌ثانیه در هر گام عملیاتی، 80 میلیون پارامتر، بدون شرط‌گذاری زبانی. SmolVLA اگر شرط‌گذاری زبانی، چندین رشته وظیفه در یک چک‌پوینت، و یک پایه از پیش آموزش‌دیده می‌خواهید. هر دو در رده 24 گیگابایتی قرار می‌گیرند، بنابراین انتخاب بر اساس وظیفه است، نه بودجه.

آیا باید --policy.scheduler_decay_steps را تنظیم کنم؟

فقط زمانی که --steps بالای 30000 باشد. SmolVLA کاهش کسینوسی را در 30000 گام از پیش تنظیم می‌کند، و lerobot 0.6.1 آن را برای اجرای کوتاه‌تر به صورت خودکار مقیاس‌بندی می‌کند و هنگام انجام این کار، "Auto-scaling LR scheduler" را لاگ می‌کند. هرگز مقیاس‌بندی به بالا انجام نمی‌دهد، بنابراین --steps=100000 پیش‌فرض، 70000 گام آخر را روی کف 2.5e-6 باقی می‌گذارد.

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started