
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 M | paper |
| متخصص عمل | about 100 M, flow matching | paper |
| ستون فقرات VLM | HuggingFaceTB/SmolVLM2-500M-Video-Instruct | vlm_model_name |
| لایههای VLM استفاده شده | first 16 of the language model | num_vlm_layers = 16 |
| توکنهای بصری در هر فریم | 64, pixel shuffle, no tiling | paper |
| پیشآموزش | 481 community datasets, 22.9 K episodes, 10.6 M frames; 200000 steps at global batch 256 on 4 GPUs | paper |
معیارها دلیلی هستند که مردم به یک مدل ۴۵۰ میلیونی اهمیت میدهند. در 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، به اندازه یک ناهار.

- با سختافزاری که ممکن است از قبل داشته باشید سازگار است: تقریباً ۱۰ تا ۱۶ گیگابایت در بچ ۸.
- یک اجرای هدر رفته ساعتها و چند دلار هزینه دارد، بنابراین میتوانید اشتباه بودن در مورد مجموعه داده را بپذیرید.
- از پیش آموزشدیده روی مجموعهدادههای جامعه که تحت برچسب 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 را رد کرد.
# 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اطلاعات بیشتر در این مورد در چگونه دادههای آموزشی VLA با کیفیت بالا برای دستکاری ربات جمعآوری کنیم. نسخه کوتاه: ۳۰ تا ۵۰ اپیزود تمیز از یک وظیفه با تغییرات عمدی، ۲۰۰ اپیزود نامرتب از سه وظیفه را شکست میدهد، با اختلافی که هیچ هایپرپارامتری نمیتواند آن را جبران کند.
نصب lerobot 0.6.1
# 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نصب پایه lerobot سبک است و وابستگیهای سنگین را پشت بستههای اضافی (extras) پنهان میکند: smolvla بستههای transformers، num2words و accelerate را اضافه میکند، training پشته مجموعه داده و wandb را، core_scripts وابستگیهای سختافزاری و بصریسازی را. در لینوکس، مسیر نصب همچنین چرخ (wheel) CUDA شما را تعیین میکند: پیشفرض PyPI یک چرخ cu130 با حداقل نسخه درایور 580.65 است، بنابراین در صورت داشتن درایور قدیمیتر، ابتدا torch را از فهرست cu128 نصب کنید، سپس lerobot را.
--policy.path=lerobot/smolvla_base چکپوینت از پیش آموزشدیده 450 مگابایتی را بارگذاری کرده و آن را تنظیم دقیق (fine-tune) میکند. --policy.type=smolvla یک SmolVLA جدید میسازد، و پیشفرض پیکربندی load_vlm_weights = False به این معنی است که حتی وزنهای ستون فقرات SmolVLM2 را بارگذاری نمیکند مگر اینکه شما درخواست کنید. اگر این را اشتباه انجام دهید، اجرا به خوبی آموزش میبیند، همان هزینه را دارد، و هیچ چیز قابل انتقالی یاد نمیگیرد.
اجرای آموزش، دستور به دستور
- 1احراز هویت در برابر هاب
چکپوینت پایه از هاب میآید و مجموعه داده شما نیز احتمالاً همینطور است.
bashhf auth login - 2گزینهها را یک بار بخوانید
هر فیلد از پیکربندی پایپلاین و سیاست یک پرچم است. قبل از بررسی عمیق در سورس، آن را مرور کنید.
bashlerobot-train --help - 3شروع تنظیم دقیق
مثال مستندات، بچ ۶۴ را روی یک A100 اجرا میکند؛ مرجع A100 40 GB در راهنمای محاسبات، بچ ۱۶ است، و ۸ معادل ۲۴ GB است. هیچ پرچم زمانبندی در اینجا عمداً وجود ندارد، به پایین مراجعه کنید.
bashlerobot-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خط لاگ را بخوانید، نه فقط مقدار 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چکپوینتهایی را جمعآوری کنید که بتوانید مقایسه کنید
save_freq به طور پیشفرض ۲۰۰۰۰ است، بنابراین یک اجرای ۲۰۰۰۰ گامی یک چکپوینت باقی میگذارد و چیزی برای مقایسه با آن وجود ندارد. آن را روی ۲۰۰۰ تنظیم کنید. برای ارسال به هاب به --policy.repo_id نیاز است.
bash--save_freq=2000 \ --policy.repo_id=${HF_USER}/smolvla_pick_place \ --save_checkpoint_to_hub=true - 6در صورت از کار افتادن دستگاه، ادامه دهید
مسیر --config_path را به train_config.json کنار چکپوینت اشاره دهید. lerobot از شروع در یک output_dir موجود خودداری میکند مگر اینکه در حال ادامه دادن باشید، بنابراین نمیتوانید به طور تصادفی یک اجرا را بازنویسی کنید.
bashlerobot-train \ --config_path=<path to the saved train_config.json> \ --resume=true
پرچمهایی که واقعاً نتیجه را تغییر میدهند
| پرچم | کاربرد | در 24 GB |
|---|---|---|
| --batch_size | نمونهها در هر گام، تقریباً خطی با VRAM | 4 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 در ابتدا |
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 / 50 | SmolVLAConfig |
| تعداد مراحل (حذف نویز تطبیق جریان) | 10 | SmolVLAConfig |
| نرخ یادگیری بهینهساز | 1e-4 | SmolVLAConfig |
| مراحل گرمایش زمانبندی | 1000 | SmolVLAConfig |
| مراحل کاهش زمانبندی | 30000 | SmolVLAConfig |
| نرخ یادگیری کاهش زمانبندی | 2.5e-6 | SmolVLAConfig |
| فریز کردن رمزگذار بینایی | true | SmolVLAConfig |
| فقط آموزش متخصص | true | SmolVLAConfig |
| اندازه دسته / مراحل | 8 / 100000 | TrainPipelineConfig |
| سید / فرکانس ذخیره / تعداد کارگران | 1000 / 20000 / 4 | TrainPipelineConfig |
دو خطی که مردم را شگفتزده میکند عبارتند از 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) | smolvla | 4 | حدود ۳ تا ۶ ساعت |
| Single A100 40 GB | smolvla | 16 | حدود ۱ تا ۲ ساعت |
| 4 x H100 80 GB with accelerate | smolvla | 32 | حدود ۱ تا ۲ ساعت |
| Single RTX 4090 / RTX 3090 (24 GB) | act | 8 | حدود ۳۰ تا ۶۰ دقیقه |
قانون این است که ۵ تا ۱۰ اپوک روی مجموعه داده اجرا شود، نه تعداد گامهای ثابت: steps_per_epoch = ceil(total_frames / (num_gpus x batch_size)) . در مجموعه داده مرجعی که مستندات به آن اشاره میکنند، lerobot/svla_so100_pickplace، فراداده ۵۰ اپیزود و ۱۹۶۳۱ فریم را گزارش میکند: دسته ۸ حدود ۲۴۵۴ گام در هر اپوک میدهد، بنابراین ۲۰۰۰۰ گام تقریباً ۸ اپوک است. دسته را نصف کنید و همان بودجه نصف اپوکها را فراهم میکند، بنابراین هر زمان که --batch_size را تغییر میدهید، این کار را تکرار کنید.
اجرای مجدد سیاست تنظیمشده روی بازو
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_place245 میلیثانیه برای هر گام عملیاتی به راحتی میتواند اشتباه تفسیر شود: سیاست chunk_size = 50 عمل را در هر گذر رو به جلو منتشر میکند و n_action_steps = 50 از آنها را اجرا میکند، بنابراین دفعات پرداخت این هزینه توسط این تنظیمات تعیین میشود، نه توسط دفعات دریافت فرمان توسط سرووها. این همان چیزی است که تقسیمبندی عمل (action chunking) به ارمغان میآورد و دلیل اینکه یک مدل 245 میلیثانیهای میتواند یک بازوی 30 هرتزی را هدایت کند. آنچه باقی میماند تأخیر استنتاج (inference latency) در پایان هر تکه است.
| اندازهگیری (SmolVLA، SO-100 واقعی) | همزمان | ناهمزمان |
|---|---|---|
| زمان تکمیل، برداشت و قرار دادن، 10 آزمایش | 13.75 s | 9.70 s |
| چرخههای برداشت و قرار دادن در یک پنجره زمانی ثابت | 9 | 19 |
| نرخ موفقیت میانگینگیری شده بر روی سه وظیفه | 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) بازو قرار گیرد.
این موضوع خارج از بحث یک اجرای آموزشی است، اما پروژههای 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 را خودتان اشکالزدایی میکنید.
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همان اجرا در پشت یک فرم: شما مدل و مجموعه داده را انتخاب میکنید، بکاند یک GPU را بر اساس VRAM مورد نیاز اجاره میکند، مربی را اجرا میکند و نقاط بازرسی را در فضای ذخیرهسازی اشیاء مینویسد. مجموعه داده میتواند از یک repo id هاگینگ فیس، دایرکتوری عمومی، یا ماشین شما باشد. از SmolVLA در SO-100 یا ماتریس در صفحه آموزش شروع کنید.
| فیلد | پیشفرض پلتفرم برای SmolVLA | توضیحات |
|---|---|---|
| batch size | 2 | محافظهکارانه برای رده 24 گیگابایتی |
| learning rate | 1e-4 | پیشتنظیم lerobot |
| max steps | 20000 | اجرای مرجع در مستندات LeRobot |
| gradient accumulation | 8 | در فرم نمایش داده شده، اعمال نشده است |
| extra knobs | seed, logFreq | Seed اجرا را تکرارپذیر میکند |
- 2 تا 5 ساعت در رده 24 گیگابایتی، حدود 1 تا 3 USD به ازای هر اجرا.
- همین عملیات از یک ترمینال در /cli و از عوامل هوش مصنوعی در /mcp.
- پادهای استنتاج یک نگهبان بیکار دارند، بنابراین یک پاد فراموش شده به جای صورتحساب بیصدا، خود را از بین میبرد.
- هنوز بازو ندارید؟ /live یک SO-100 فیزیکی را پخش میکند که میتوانید بدون ثبتنام آن را هدایت کنید.
یک کار گیر کرده در صف، نشانه بازار لحظهای است، نه یک باگ: کار آموزشی گیر کرده در صف. گام به گام: اولین سیاست خود را آموزش دهید و مستندات آموزش.
زمانی که SmolVLA انتخاب اشتباهی است
آزمون اینکه آیا SmolVLA اولین اجرای صحیح بود، این نیست که آیا کار کرد، بلکه این است که آیا شکست چیزی به شما آموخت. به ۶۰ یا ۷۰ درصد برسید و یک مدل بزرگتر هزینه منطقی بعدی است: دادهها سیگنال دارند. به ۱۰ درصد برسید و یک مدل ۳ B به احتمال زیاد نیز به ۱۰ درصد میرسد، که شما این را به جای دوازده دلار، با سه دلار یاد گرفتید.

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

چکلیست قبل از مقیاسبندی هر چیزی
- آیا
lrبه کف 2.5e-6 خود رسید؟ زیر 30000 گام، lerobot نرخ کاهش را مجدداً مقیاسبندی میکند و در هنگام راهاندازی این را اعلام میکند؛ بالاتر از آن،--policy.scheduler_decay_stepsرا خودتان تنظیم کنید. - بیش از یک نقطه بازرسی (checkpoint) و اپیزودهایی که با
--dataset.eval_splitکنار گذاشته شدهاند تا خطای ارزیابی (eval loss) معنایی داشته باشد. - آیا سیاست (policy) اصلاً حرکت میکند؟ کاهش خطا با بازوی بیحرکت دلایل خاصی دارد: خطا کاهش مییابد، سیاست کاری نمیکند.
- آیا در برابر تغییر صحنه مقاومت میکند؟ اگر نه: سیاست فقط در یک تنظیمات کار میکند.
- آیا seed را یادداشت کردید؟ lerobot به طور پیشفرض 1000 است، بنابراین دو اجرای دستنخورده قابل مقایسه باقی میمانند.
- فقط پس از آن: اپیزودهای بیشتر، تنوع بیشتر، یا یک مدل بزرگتر. به همین ترتیب.
برای اینکه چرا این مدلها وجود دارند و با ورودی زبان چه میکنند، پیشزمینه است؛ مونتاژ را از طریق تا اولین اجرا میکند. برای نقطه بازرسی (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 باقی میگذارد.
Sources
- SmolVLA: یک مدل بینایی-زبان-عمل برای رباتیک مقرونبهصرفه و کارآمد
- SmolVLA: مدل بینایی-زبان-عمل کارآمد (وبلاگ Hugging Face)
- کارت مدل lerobot/smolvla_base
- مستندات LeRobot: SmolVLA
- مستندات LeRobot: راهنمای سختافزار محاسباتی برای آموزش LeRobot
- مستندات LeRobot: نصب
- مستندات LeRobot: LeRobotDataset v3.0 و مبدل v2.1
- مستندات LeRobot: استنتاج ناهمگام
- lerobot v0.6.1: configuration_smolvla.py
- lerobot v0.6.1: TrainPipelineConfig
- lerobot v0.6.1: CosineDecayWithWarmupSchedulerConfig
- lerobot v0.6.1: lerobot_rollout.py (استراتژیها و استنتاج RTC)
- lerobot v0.6.1: pyproject.toml (افزونهها و نقاط ورودی کنسول)
- lerobot در PyPI
- مجموعه داده lerobot/svla_so100_pickplace (50 اپیزود، 19631 فریم، v3.0)
Sources
- SmolVLA: A Vision-Language-Action Model for Affordable and Efficient Robotics
- SmolVLA: Efficient Vision-Language-Action Model (Hugging Face blog)
- lerobot/smolvla_base model card
- LeRobot docs: SmolVLA
- LeRobot docs: Compute HW Guide for LeRobot Training
- LeRobot docs: Installation
- LeRobot docs: LeRobotDataset v3.0 and the v2.1 converter
- LeRobot docs: Asynchronous Inference
- lerobot v0.6.1: configuration_smolvla.py
- lerobot v0.6.1: TrainPipelineConfig
- lerobot v0.6.1: CosineDecayWithWarmupSchedulerConfig
- lerobot v0.6.1: lerobot_rollout.py (strategies and RTC inference)
- lerobot v0.6.1: pyproject.toml (extras and console entry points)
- lerobot on PyPI
- lerobot/svla_so100_pickplace dataset (50 episodes, 19631 frames, v3.0)
Ready for high-quality robotics data?
AY-Robots connects your robots to skilled operators worldwide.
Get Started