
ماشین ربات شما GPU ندارد. سرور سیاست GR00T را روی یک GPU ابری اجارهای قرار دهید، تکههای عملیات را به بازو استریم کنید، و دقیقاً متوجه شوید که شبکه چقدر برای شما هزینه دارد.
یک رزبری پای برای راهاندازی یک از طریق یک گذرگاه سریال و دریافت فریمها از دو دوربین USB کافی است. اما برای اجرای یک با سه میلیارد پارامتر کافی نیست: فایل README انویدیا، استنتاج GR00T N1.7 را با یک GPU با 16 گیگابایت یا بیشتر VRAM تخمین میزند. برای مشاهده عملکرد چکپوینت تنظیمشده شما روی بازوی ربات بدون خرید کارت، سیاست را روی یک GPU ابری اجارهای قرار دهید، حلقه ربات را روی دستگاه با پورتهای USB نگه دارید و مشاهدات و قطعات عمل را از طریق شبکه ارسال کنید.
این روش کار میکند، رایگان نیست و هزینه آن به طور یکنواخت بین وظایف توزیع نشده است. در ادامه: سرور سیاست اختصاصی NVIDIA، پشته ناهمزمان lerobot، محاسباتی که از قبل نشان میدهد آیا آپلینک شما به اندازه کافی سریع است یا خیر، و مسیر پلتفرم. همه اینها در برابر شاخه اصلی Isaac-GR00T (N1.7 GA) و lerobot 0.6.1 در 23 آگوست 2026 بررسی شده است.
آنچه باید بدانید
- •GR00T N1.7، GR00T N1.5 و Pi0.5 مدلهایی تقریباً با 3 میلیارد پارامتر هستند. هیچکدام بدون یک GPU مجزا روی کنترلر ربات جای نمیگیرند.
- •Isaac-GR00T و lerobot هر دو یک تقسیمبندی کلاینت-سرور ارائه میدهند. شما نیازی به نوشتن لایه انتقال ندارید.
- •مشاهدات، هزینه انتقال داده را تحتالشعاع قرار میدهند، نه اعمال: دو فریم RGB فشردهنشده 640x480 برابر با 1,843,200 بایت، حدود 14.7 مگابیت در هر فراخوانی است، و هیچیک از پشتهها آنها را فشرده نمیکنند.
- •AY-Robots زمان 20 تا 485 میلیثانیه را برای هر گام عمل بر اساس مدل فهرست میکند. زمان رفت و برگشت اینترنت به این مقدار اضافه میشود.
- •استنتاج از راه دور برای عملیات کند برداشت و قرار دادن (pick-and-place) مناسب است، نه حرکت واکنشی سریع. افق اجرای طولانیتر، زمان میخرد و تازگی مشاهدات را به خطر میاندازد.
- •هیچیک از سرورها به صورت پیشفرض روی IP عمومی امن نیستند، و lerobot دارای یک RCE (اجرای کد از راه دور) وصلهنشده است. آن را تونل کنید.
چرا سیاست روی دستگاه ربات جای نمیگیرد
دو مورد از پنج سیاست AY-Robots که قابل آموزش هستند، روی کارت ورکاستیشن اجرا میشوند، سه مورد دیگر خیر. ستون در ادامه برای هر گام عملیاتی است، و این عددی است که با زمان رفت و برگشت شبکه شما رقابت میکند.
| سیاست | پارامترها | استنتاج در هر گام عملیاتی | رده GPU برای آموزش | حداقل اپیزودها | فرمت مجموعه داده |
|---|---|---|---|---|---|
| GR00T N1.7 | ~3 B, ~40 M آموزشدیده در طول تنظیم دقیق | 152 ms | A100 80 GB or H100 80 GB | 50 | LeRobot v2.0 or v2.1 |
| GR00T N1.5 | ~3 B | 165 ms | A100 80 GB or H100 80 GB | 50 | LeRobot v2.0 or v2.1 |
| Pi0.5 | ~3 B, بکبون PaliGemma | 485 ms | A100 80 GB or H100 80 GB | 50 | LeRobot v3.0 |
| SmolVLA | ~450 M | 245 ms | RTX 4090 or any 24 GB card | 30 | LeRobot v3.0 |
| ACT | ~80 M | 20 ms | RTX 4090 or any 24 GB card | 50 | LeRobot v3.0 |

این را به عنوان یک تصمیم بخوانید، نه اطلاعات بیاهمیت. با ۲۰ میلیثانیه در هر گام، روی ماشین ربات اجرا میشود و دیگر هرگز به آن فکر نمیکنید. با ۴۸۵ میلیثانیه، یک سوم ثانیه را قبل از خروج یک بسته از ساختمان شما صرف کرده است. و جنبه دقت را اضافه میکنند.
GR00T N1.7, GR00T N1.5 و Pi0.5 از یک چکپوینت فروشنده شروع میشوند (nvidia/GR00T-N1.7-3B, nvidia/GR00T-N1.5-3B, lerobot/pi05_base). ACT تا زمانی که آن را روی وظیفه خود آموزش ندهید، وجود ندارد، بنابراین تا زمانی که یک کار آموزشی اجرا نشده باشد، چیزی برای ارائه از راه دور وجود ندارد. به ACT on SO-100 مراجعه کنید.
دو پشته کلاینت-سرور موجود
Isaac-GR00T یک سرور درخواست-پاسخ ZeroMQ ارائه میدهد؛ lerobot یک سرور gRPC ساخته شده بر اساس استنتاج ناهمزمان ارائه میدهد. هر دو یک GR00T چکپوینت. لیست سیاستهای پشتیبانی شده lerobot در async_inference/constants.py عبارتند از act, smolvla, diffusion, tdmpc, vqbet, pi0, pi05 و groot؛ لیست رباتهای آن عبارتند از so100_follower, so101_follower, bi_so_follower و omx_follower.
| Isaac-GR00T PolicyServer | lerobot async inference | |
|---|---|---|
| نقطه ورودی | gr00t/eval/run_gr00t_server.py | python -m lerobot.async_inference.policy_server |
| حمل و نقل | ZeroMQ REQ/REP | gRPC, add_insecure_port / insecure_channel |
| سریالسازی | msgpack + msgpack_numpy, allow_pickle=False enforced | pickle.dumps / pickle.loads, marked # nosec |
| پورت پیشفرض | 5555 | 8080 |
| اتصال پیشفرض | 0.0.0.0, all interfaces | localhost |
| احراز هویت | api_token توسط کلاس پشتیبانی میشود، توسط CLI ارسال نمیشود | هیچکدام |
| مهلت زمانی کلاینت | 15000 میلیثانیه (PolicyClient timeout_ms) | 2 ثانیه مهلت زمانی صف مشاهده |
| مدل اجرا | همزمان: مسدود کردن، سپس اجرای قطعه | ناهمزمان: اجرا در حین محاسبه قطعه بعدی |
ردیف سریالسازی بیش از آنچه به نظر میرسد اهمیت دارد. GR00T's MsgSerializer از پذیرش محمولههای ndarray با نوع داده شیء (object-dtype) در هر دو جهت خودداری میکند، زیرا در غیر این صورت msgpack_numpy آنها را به pickle میدهد. lerobot در عوض از pickle استفاده میکند: policy_server.py روی دادههای درخواست، pickle.loads را فراخوانی میکند، robot_client.py مشاهداتی را که ارسال میکند، pickle میکند. در یک شبکه محلی قابل اعتماد قابل دفاع است، اما زمانی که پورت از طریق اینترنت قابل دسترسی باشد، غیرقابل دفاع است.
مسیر A: سرور سیاست GR00T متعلق به NVIDIA
این مسیری است که NVIDIA برای سختافزار SO-100 و SO-101 مستند کرده است، و مسیری است که باید استفاده کنید اگر نقطه بازرسی شما از examples/finetune.sh با --embodiment-tag NEW_EMBODIMENT خارج شده باشد. این مراحل آنچه را که README اصلی از قلم انداخته است اضافه میکنند: رساندن پورت به ربات بدون اینکه آن را در معرض دید دیگران قرار دهید.
- 1نصب GR00T روی سرور GPU اجارهای
زیرماژولها ضروری هستند، و git-lfs باید قبل از کلون کردن وجود داشته باشد وگرنه فایلهای parquet در
demo_dataبه صورت اشارهگر (pointers) میرسند. flash-attn و TensorRT با نصب پیشفرض همراه هستند. مشکل در یک ایمیج پاد تازه:torchcodec0.8.0 تنها بکاند ویدیویی پشتیبانی شده است و فقط FFmpeg 4 تا 7 را بارگذاری میکند. اوبونتو 25.10 و 26.04 با FFmpeg 8 عرضه میشوند، بنابراین GR00T با خطایCould not load libtorchcodecمواجه میشود. یک FFmpeg پایینتر از 8 نصب کنید و کتابخانههای آن را درLD_LIBRARY_PATHقرار دهید.bashsudo apt install git-lfs && git lfs install curl -LsSf https://astral.sh/uv/install.sh | sh sudo apt-get update && sudo apt-get install -y ffmpeg git clone --recurse-submodules https://github.com/NVIDIA/Isaac-GR00T cd Isaac-GR00T uv sync --python 3.12 uv run python -c "import gr00t; print('GR00T installed successfully')" - 2احراز هویت در برابر بکبون محدود شده
هر نقطه بازرسی GR00T N1.7، از جمله تنظیمات دقیق (fine-tune) خودتان، در اولین استفاده، مدل محدود شده
nvidia/Cosmos-Reason2-2Bرا بارگذاری میکند. در صفحه مدل درخواست دسترسی دهید و در پاد وارد شوید، در غیر این صورت بارگذاری با خطایGatedRepoErrorمواجه میشود.bashuv run huggingface-cli login # or: export HF_TOKEN=<your_token> - 3راهاندازی سرور سیاست
--model-pathرا به دایرکتوری نقطه بازرسی خود اشاره دهید؛ در این مسیر سرور--modality-config-pathرا نادیده میگیرد، که فقط در مسیر بازپخش (replay path) خوانده میشود.--model-pathرا حذف کنید و به جای آن--dataset-pathبه همراه--execution-horizonرا برای یک ReplayPolicy که اقدامات ضبط شده را بازپخش میکند، ارسال کنید؛ این ارزانترین راه برای اثبات کارکرد سیمکشی است.bashuv run python gr00t/eval/run_gr00t_server.py \ --model-path /workspace/so100_finetune/checkpoint-10000 \ --embodiment-tag NEW_EMBODIMENT \ --device cuda:0 \ --host 127.0.0.1 --port 5555 - 4تونل کردن پورت 5555 به دستگاه ربات
به لوپبک متصل شوید، همانطور که در بالا ذکر شد، و پورت را از طریق SSH یا یک شبکه مشبک (mesh) به سبک WireGuard منتقل کنید. این کار رمزگذاری و احراز هویتی را فراهم میکند که سوکت ZeroMQ فاقد آن است، و حدود یک میلیثانیه طول میکشد.
bash# on the robot machine ssh -N -L 5555:127.0.0.1:5555 root@<pod-host> -p <pod-ssh-port> # sanity check that something answers nc -vz 127.0.0.1 5555 - 5اجرای کلاینت ربات در کنار سرووها
کلاینت به محیط uv مخصوص خود نیاز دارد: این کلاینت درایورهای ربات lerobot را میخواهد، نه پشته آموزشی را.
eval_so100.pyماژولهای so100_follower، so101_follower و koch_follower را ایمپورت میکند، بنابراین--robot.typeرا مطابق با بازوی خود ارسال کنید (README اصلی از so101_follower استفاده میکند). کلیدهای دوربین باید با آموزش مطابقت داشته باشند: آداپتور دقیقاًfrontوwristرا میخواند، و جابجایی آنها دید اشتباهی را به سیاست نشان میدهد.bashcd gr00t/eval/real_robot/SO100 uv sync uv pip install --no-deps -e ../../../../ uv run --no-sync python eval_so100.py \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM0 \ --robot.id=orange_follower \ --robot.cameras="{ front: {type: opencv, index_or_path: 6, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 2, width: 640, height: 480, fps: 30}}" \ --policy_host=127.0.0.1 \ --policy_port=5555 \ --lang_instruction="pick up the red block and put it in the bin"
`run_gr00t_server.py` به طور پیشفرض از `--host 0.0.0.0` استفاده میکند و هر رابط را متصل میکند: روی یک پاد با IP عمومی که یک نقطه پایانی استنتاج باز است. و کلاس `PolicyServer` یک `api_token` را میپذیرد و آن را برای هر درخواست اعتبارسنجی میکند، اما `run_gr00t_server.py` هرگز آن را ارسال نمیکند، بنابراین سرور CLI بدون احراز هویت است، هر چیزی که شما پیکربندی کنید. به `127.0.0.1` متصل شوید و تونل کنید. خطای `ZMQError: Address already in use` به این معنی است که پورت 5555 اشغال شده است؛ `--port` را ارسال کنید.
مسیر B: استنتاج ناهمزمان lerobot
lerobot یک مشکل متفاوت را حل میکند. به جای مسدود کردن ربات در حالی که مدل فکر میکند، کلاینت به گام برداشتن در صف موجود خود ادامه میدهد در حالی که سرور تکه بعدی را محاسبه میکند. این تقسیمبندی عمل گسترش یافتهتر، پشته ناهمزمان معرفی شده با SmolVLA است. این با یک نقطه بازرسی GR00T نیز کار میکند.
# GPU machine
pip install -e ".[async]"
python -m lerobot.async_inference.policy_server \
--host=127.0.0.1 \
--port=8080
# robot machine, after tunnelling 8080
python -m lerobot.async_inference.robot_client \
--server_address=127.0.0.1:8080 \
--robot.type=so100_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=follower_so100 \
--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}}" \
--task="pick up the red block and put it in the bin" \
--policy_type=groot \
--pretrained_name_or_path=<user>/my_groot_finetune \
--policy_device=cuda \
--actions_per_chunk=50 \
--chunk_size_threshold=0.5 \
--debug_visualize_queue_size=Trueسرور خالی شروع به کار میکند: تا زمانی که اولین دستتکان دادن کلاینت به آن نگوید که چه سیاستی را ارائه میدهد، نمیداند، که در یک پاد اجارهای راحت است. دو پارامتری که تعیین میکنند آیا بازو به نرمی حرکت میکند عبارتند از actions_per_chunk و chunk_size_threshold (مستندات lerobot دومی را g مینامند، به دنبال مقاله SmolVLA)، و مقادیر مستند شده و مقادیر ارسال شده با هم مطابقت ندارند.
| Parameter | Value in lerobot 0.6.1 code | What it does | Note |
|---|---|---|---|
| actions_per_chunk | no default, required | تعداد عملیات بازگردانده شده در هر فراخوانی | جدول مستندات 50 را لیست میکند؛ فیلد dataclass مقدار پیشفرض ندارد، بنابراین CLI یک مقدار را درخواست میکند |
| chunk_size_threshold | 0.5 | نسبت پر شدن صف که در آن یا کمتر از آن کلاینت یک مشاهده جدید ارسال میکند | جدول مستندات 0.7 را میگوید؛ کد و مثال خود مستندات 0.5 را میگویند |
| fps | 30 | نرخ کنترل کلاینت، environment_dt = 1/fps را تنظیم میکند | اگر صف مدام خالی میشود، آن را کاهش دهید |
| inference_latency | 1/30 s (33.3 ms) | تأخیر استنتاج هدف در سرور | یک هدف، نه یک اندازهگیری |
| obs_queue_timeout | 2 s | مدت زمانی که سرور در صف مشاهده منتظر میماند | یک آپلینک کند ابتدا در اینجا خود را نشان میدهد |
| aggregate_fn_name | weighted_average | چگونه مناطق همپوشان تکهها با هم ترکیب میشوند | 0.3 old + 0.7 new; latest_only, average and conservative also ship. The registry is AGGREGATE_FUNCTIONS in configs.py, not robot_client.py as the docs claim |
CVE-2026-25874 یک اجرای کد از راه دور بدون احراز هویت در پایپلاین استنتاج ناهمزمان lerobot است: pickle.loads() بر روی دادههای دریافت شده از طریق یک کانال gRPC بدون احراز هویت و بدون TLS، که از طریق فراخوانیهای SendPolicyInstructions، SendObservations و GetActions قابل دسترسی است. CWE-502, CVSS 3.1 base score 9.8 from NVD, 4.0 base score 9.3 from the assigning CNA. این گزارش LeRobot تا نسخه 0.5.1 را به عنوان آسیبدیده لیست میکند و هم سرور سیاست و هم کلاینت ربات را نام میبرد، بنابراین دستگاه کنار بازوی شما در محدوده است. ارتقا راهحل نیست: این گزارش به مشکل بالادستی 3047 و وصله، PR 3048، اشاره میکند که pickle را با safetensors به علاوه JSON جایگزین میکند، و در 23 August 2026 هر دو هنوز باز هستند. policy_server.py on main still calls pickle.loads on request data while serve() binds with add_insecure_port. به لوپبک متصل شوید و هرگز پورت 8080 را فوروارد نکنید.
محاسباتی که تعیین میکند آیا لینک شما به اندازه کافی سریع است یا خیر
مردم این را نادیده میگیرند و سپس یک روز را صرف . این دو دقیقه طول میکشد و تقریباً همیشه تعیینکننده است.
دیکشنری مشاهده کامنتگذاری شده در eval_so100.py NVIDIA's میگوید چه چیزی از طریق سیم منتقل میشود: دو آرایه با ابعاد (480, 640, 3) از نوع uint8، شش فلوت مفصلی، یک رشته زبان. این معادل 921,600 بایت در هر فریم، 1,843,200 بایت برای دو دوربین، حدود 14.7 مگابیت است، و هیچ یک از پشتهها آن را با JPEG فشرده نمیکنند. قطعهای که برمیگردد چند ده گام از 6 فلوت است. آپلود شما همه چیز را تعیین میکند، نه دانلود شما.
| پهنای باند آپلود | زمان لازم برای ارسال یک مشاهده (14.7 مگابیت) | نتیجه برای بازوی 30 فریم بر ثانیه |
|---|---|---|
| 10 Mbit/s، آپلود خانگی معمولی | ~1.47 s | غیرقابل استفاده. بازو بین هر قطعه متوقف میشود. |
| 25 Mbit/s | ~0.59 s | فقط برای برداشتن و گذاشتن آهسته، با افق اجرای طولانی. |
| 50 Mbit/s | ~0.29 s | قابل استفاده برای کارهای عمدی. |
| 100 Mbit/s | ~0.15 s | مناسب برای برداشتن و گذاشتن، قابل مشاهده در حرکت سریع. |
| 1 Gbit/s فیبر یا دیتاسنتر | ~0.015 s | در عوض، مدل به گلوگاه تبدیل میشود. |
بودجهای که باید در آن جای بگیرید
کلاینت GR00T SO-100 همزمان است: آن فراخوانی میکند policy.get_action(obs)، سپس اولین action_horizon گام از قطعه را با سرعت 30 فریم بر ثانیه (FPS) اجرا کرده و دوباره فراخوانی میکند. اندازه قطعه و افق اعداد متفاوتی هستند: راهنمای استقرار NVIDIA اندازه قطعه عمل را 16 توصیه میکند، و حداقل 32 در ترکیب با قطعهبندی بلادرنگ، در حالی که eval_so100.py یک افق اجرایی 8 را ارائه میدهد. هشت گام با سرعت 30 فریم بر ثانیه معادل 267 میلیثانیه حرکت در هر فراخوانی است، و هر چیز دیگری باید در این زمان جای بگیرد.
observation upload 14.7 Mbit / 100 Mbit/s = 147 ms
network round trip = 30 ms
model inference (AY-Robots figure, N1.7) = 152 ms
action chunk return + deserialize = ~2 ms
-------
total per call 331 ms
budget at action_horizon = 8 -> 267 ms FAIL, arm pauses ~64 ms per chunk
budget at action_horizon = 16 -> 533 ms fits, with headroom
budget at action_horizon = 32 -> 1067 ms fits, observations now ~1 s staleافزایش افق یک راهحل سرراست و البته بدون هزینه نیست: بازو بر اساس مشاهدهای عمل میکند که اکنون قدیمی شده است. راهحل اصولی، قطعهبندی بلادرنگ (real-time chunking) است که قطعه بعدی را در حین اجرای قطعه فعلی محاسبه میکند، اقدامات تضمینشده برای اجرا را ثابت نگه میدارد و بقیه را تکمیل میکند؛ مقاله RTC آن را در برابر تأخیر استنتاج بدون نیاز به بازآموزی مقاوم گزارش میکند. ابتدا بررسی کنید که این موضوع در چه وضعیتی قرار دارد. NVIDIA، RTC را آزمایشی میداند، یک اولیه مدل سطح پایین که از طریق action_head.get_action(..., options={"rtc_overlap_steps": ..., "rtc_frozen_steps": ...}) قابل دسترسی است، اما به Gr00tPolicy یا مسیر سرور-کلاینت متصل نیست، جایی که options استفاده نشده است، و هیچ تست یا مثالی ندارد. از طریق یک سرور سیاست، شما اجرای ناهمزمان دریافت میکنید، نه RTC.
NVIDIA مدل GR00T N1.7 را به صورت سرتاسری با 4 مرحله حذف نویز و یک دوربین بنچمارک کرده است. روی یک H100 80GB HBM3: 85.8 میلیثانیه (11.7 هرتز) در حالت PyTorch eager، 48.6 میلیثانیه (20.6 هرتز) با torch.compile، 27.9 میلیثانیه (35.9 هرتز) با پایپلاین کامل TensorRT. یک L40 در حالت eager 128.3 میلیثانیه (7.8 هرتز) زمان میبرد. NVIDIA فرکانس 10 هرتز را حداقل توصیه شده برای دستکاریهای معمول میداند، و زیر 10 هرتز را فقط برای کارهای کند و غیرواکنشی مناسب میداند. اینها نرخهای بازبرنامهریزی هستند: یک سیاست 10 هرتزی همچنان میتواند یک بازوی 30 فریم بر ثانیه را از طریق قطعهبندی عمل هدایت کند. یک دوربین دوم شما را به مسیر اشتباه میبرد.
قبل از اعتماد، آن را اندازهگیری کنید
هر عددی که در بالا ذکر شد، یک پیشبینی است. چهار دستور آن را به یک اندازهگیری تبدیل میکنند که ارزش اجرا کردن را دارد، قبل از اینکه یک ساعت پاد را به کاری اختصاص دهید که هرگز قرار نبود کار کند.
- 1سفر رفت و برگشت خام را دریافت کنید
در برابر پاد، نه یک CDN. انحراف را به همان اندازه میانگین با دقت مشاهده کنید: لرزش (jitter) باعث لکنت بازو میشود، نه تأخیر متوسط.
bashping -c 50 <pod-host> # the mdev column is the number that predicts stutter - 2آپلینکی را که دارید اندازهگیری کنید، نه آنی را که برایش پول میدهید
آپلود خانگی معمولاً کسری از دانلود است، و این همان عددی است که در جدول پهنای باند بالا ذکر شده است.
bash# on the pod iperf3 -s # on the robot machine, -R omitted so this measures upload iperf3 -c <pod-host> -t 30 - 3لاگ تأخیر خود کلاینت را بخوانید
کلاینت ربات lerobot تأخیر سرور به کلاینت و زمان دیسریالسازی را برای هر تکه ثبت میکند. در مسیر B به هیچ ابزار خارجی نیاز ندارید.
textReceived action chunk for step #240 | Latest action: #232 | Incoming actions: 240:289 | Network latency (server->client): 187.44ms | Deserialization time: 3.10ms - 4تخلیه صف عمل را مشاهده کنید
--debug_visualize_queue_size=Trueرا ارسال کنید و کلاینت اندازه صف را در زمان اجرا رسم میکند. اگر به طور مکرر به صفر برسد، شما از بودجه خارج شدهاید: نرخ فریم (fps) را کاهش دهید، actions_per_chunk را افزایش دهید، یا chunk_size_threshold را افزایش دهید تا مشاهدات بیشتر ارسال شوند.bashpython -m lerobot.async_inference.robot_client \ ... \ --debug_visualize_queue_size=True
استنتاج از راه دور واقعاً برای چه کاری خوب است
- میتوانید یک سیاست با 3 میلیارد پارامتر را روی سختافزار واقعی ارزیابی کنید، بدون اینکه کارتی داشته باشید که قیمتش از بازو بیشتر باشد.
- GPU به صورت ساعتی اجاره میشود، بنابراین یک نقطه بازرسی ناموفق چند دلار هزینه دارد.
- سمت ربات کوچک میماند: درایورهای lerobot، دو دوربین، یک پورت سریال، و شما بدون دست زدن به آن، نقاط بازرسی را تعویض میکنید.
- مشاهدات فشردهنشده هزینه پهنای باند را افزایش میدهند و آپلود خانگی محدودیت اصلی است.
- لرزش (Jitter) بیشتر از تأخیر (Latency) آسیب میزند: یک اتصال با میانگین 40 میلیثانیه و اوجهای 300 میلیثانیه دچار لکنت میشود، در حالی که یک اتصال پایدار 120 میلیثانیه اینطور نیست.
- وظایف واکنشی سریع در هیچ افقی از رفت و برگشت جان سالم به در نمیبرند.
- هر دو سرور به صورت احراز هویت نشده و در قالب CLI ارائه میشوند، بنابراین کار تونلسازی بر عهده شماست.
- قطع شدن اتصال در میانه یک بسته، بازو را با یک عمل منسوخ رها میکند. ربات خود را به یک ربات نگهبان (watchdog) مجهز کنید.
| وظیفه | آیا از طریق اینترنت عمومی کار میکند؟ | چرا |
|---|---|---|
| یک شیء ثابت را بردارید، آن را در یک سطل قرار دهید | بله | چیزی بین مشاهده و عمل حرکت نمیکند. |
| بلوکها را با سرعت عمدی روی هم بچینید | بله، با action_horizon 16 یا بیشتر | خطاها به اندازه کافی آهسته جمع میشوند تا در بسته بعدی رفع شوند. |
| یک کشو را باز کنید، یک شیء را وارد کنید | معمولاً | غنی از تماس اما کند. مراقب توقف و حرکت در هنگام تماس باشید. |
| یک شیء متحرک را دنبال کنید | خیر | سیاست بر اساس مشاهدهای با قدمت 300 میلیثانیه تا 1 ثانیه عمل میکند. |
| گرفتن، تعادل، یا بازیابی از لغزش | خیر | پنجره تصحیح کوتاهتر از یک رفت و برگشت است. |
| یک حلقه بسته همزمان 30 هرتز | خیر | بودجه 33 میلیثانیه از ابتدا تا انتها است. حتی یک شبکه محلی (LAN) هم با آن مشکل دارد. |
اگر یک اجرای از راه دور در هر اپیزود در یک نقطه خاص دچار لکنت میشود، شبکه احتمالاً علت آن نیست. سیاستی که هر بار در یک زاویه مفصلی خاص تردید میکند، معمولاً یک مشکل دادهای است؛ به صفحات حالتهای خرابی، به ویژه سیاستی که فقط در یک تنظیمات کار میکند و کاهش ضرر اما سیاست هیچ کاری نمیکند.
انجام آن توسط خودتان در مقابل انجام آن روی AY-Robots
- یک GPU را در بازار لحظهای اجاره کنید و منتظر بمانید تا VRAM کافی با قیمتی که میپسندید، در دسترس قرار گیرد.
- CUDA، uv، یک ffmpeg torchcodec قابل قبول، و پشته GR00T را با زیرماژولها نصب کنید.
- درخواست دسترسی به بکبون محدود `nvidia/Cosmos-Reason2-2B` را ارسال کنید و یک توکن روی پاد قرار دهید.
- چکپوینت خود را روی پاد بکشید.
- سرور را روی لوپبک راهاندازی کنید، سپس یک تونل SSH از ماشین ربات بسازید.
- یک محیط دوم روی ماشین ربات برای کلاینت و درایورها نصب کنید.
- کلیدهای دوربین، نامهای مفصل و دستورالعمل زبان را با آنچه چکپوینت دیده است، مطابقت دهید.
- پاد را زیر نظر داشته باشید. یک A100 فراموششده که یک شب کامل کار میکند، بیشتر از هزینه آزمایش تمام میشود.
هزینه GPU با توقف ربات متوقف نمیشود. بیشتر پولی که در استنتاج از راه دور از دست میرود، صرف سروری میشود که پس از رفتن همه، روشن مانده است. یک هشدار تنظیم کنید یا تخریب خودکار را فعال کنید.
- سیاست آموزشدیده مورد نظر خود را برای اجرا انتخاب کنید.
- `/api/inference/pod` به صورت خودکار یک پاد GPU ابری را فراهم میکند که آن سیاست را ارائه میدهد.
- کلاینت ربات محلی با آن نقطه پایانی ارتباط برقرار میکند. چکپوینتهای پایه متعلق به خود فروشندگان هستند: `nvidia/GR00T-N1.7-3B`، `nvidia/GR00T-N1.5-3B`، `lerobot/pi05_base`. ACT هیچکدام را ندارد.
- پادها دارای یک نگهبان بیکاری هستند و پس از یک دوره بیکاری خود را از بین میبرند، بنابراین هیچ چیز به صورت پنهانی صورتحساب نمیشود.
- همین عملیات از طریق ترمینال و برای عاملهای هوش مصنوعی در دسترس هستند، بنابراین حلقه میتواند اسکریپتنویسی شود.
تامین خودکار، کار راهاندازی و صورتحساب پاد فراموششده را حذف میکند، نه فیزیک را. استنتاج همچنان باید برای کارهای سریع در کنار سرووها قرار گیرد: حلقه کنترل بسته به مدل، 20 تا 485 ms در هر گام عملیاتی است، و رفت و برگشتهای اینترنت عمومی علاوه بر آن، یک سیاست کاری را به یک سیاست مردد تبدیل میکند.
- راهنمای کلاینت برای سمت محلی اتصال
- اولین سیاست خود را اجرا کنید برای راهنما
- CLI و سرور MCP برای نسخه اسکریپتنویسی شده
- مستندات امنیتی

هزینه یک جلسه استنتاج از راه دور چقدر است
دو عدد مهم هستند: نرخ ساعتی کارت، و مدت زمانی که آن را روشن میگذارید. اولی منتشر شده است؛ دومی مردم را غافلگیر میکند.
| کارت | ابر عمومی Runpod | ابر امن Runpod | مناسب برای |
|---|---|---|---|
| A100 PCIe 80 GB | 1.19 USD/h | 1.39 USD/h | GR00T N1.7, GR00T N1.5, Pi0.5 |
| A100 SXM 80 GB | 1.39 USD/h | 1.59 USD/h | همان، کمی سریعتر |
| H100 PCIe 80 GB | 1.99 USD/h | 2.89 USD/h | سریعترین رده؛ رقم 11.7 هرتز NVIDIA برای H100 80GB HBM3 است |
| L40S 48 GB | 0.79 USD/h | 0.99 USD/h | فقط برای استنتاج، بالاتر از حداقل 16 گیگابایت |
| RTX 4090 24 GB | 0.34 USD/h | 0.74 USD/h | SmolVLA, ACT |
این نرخها از صفحه قیمتگذاری Runpod در 23 آگوست 2026 خوانده شدهاند و بازارهای لحظهای در نوسان هستند. AY-Robots در عوض یک اجرای کامل را نقل میکند: 3 تا 6 ساعت با 1.20 تا 2.00 دلار آمریکا در ساعت در رده A100 یا H100، حدود 4 تا 12 دلار آمریکا برای اجرای GR00T یا Pi0.5؛ 2 تا 5 ساعت با 0.30 تا 0.60 دلار آمریکا در ساعت در رده 24 گیگابایتی، 1 تا 3 دلار آمریکا برای SmolVLA یا ACT. یک جلسه استنتاج تنها در صورتی از نظر هزینه بر یک اجرای آموزشی برتری دارد که آن را متوقف کنید، که این همان کاری است که نگهبان بیکار برای آن است. به مستندات صورتحساب و صفحه قیمتگذاری.

اگر ترجیح میدهید شبکه در حلقه نباشد
استنتاج از راه دور یک مشکل سختافزاری را حل میکند و یک مشکل تأخیر ایجاد میکند. گاهی اوقات پاسخ بهتر، یک سیاست (policy) است که با سختافزار موجود شما سازگار باشد.
- ACT، تقریباً 80 میلیون پارامتر و 20 میلیثانیه در هر گام عملیاتی، حداقل 50 اپیزود، هر کارت 24 گیگابایتی. در یک تنظیمات تکراری تکوظیفهای، اغلب یک مدل 3 B از راه دور را شکست میدهد، زیرا هرگز منتظر یک بسته (packet) نمیماند.
- SmolVLA، تقریباً 450 میلیون پارامتر و 245 میلیثانیه در هر گام عملیاتی، حداقل 30 اپیزود. این مدل شرطیسازی زبانی را که ACT فاقد آن است، حفظ میکند و مستندات lerobot حجم آن را در زمان استنتاج حدود 2 گیگابایت در مقابل تقریباً 14 گیگابایت برای PI0 تخمین میزنند.
- ACT در مقابل GR00T N1.7 برای نیمه دقت این مبادله.
یک مسیر میانی نیز وجود دارد: آموزش در فضای ابری، ارزیابی محلی. تنظیم دقیق به کارت 80 گیگابایتی نیاز دارد و به تأخیر اهمیت نمیدهد، بنابراین آموزش GR00T N1.7 بر روی یک SO-100 از راه دور بحثبرانگیز نیست. فقط حلقه ارزیابی دارای محدودیت زمان واقعی است؛ مستندات آموزش و ماتریس مدل و بازو آن نیمه را پوشش میدهند.
هنوز بازویی روی میز ندارید؟
یک SO-100 واقعی را در مرورگر بدون نیاز به ثبتنام هدایت کنید، پنج سیاست قابل آموزش را با اعداد تأخیر واقعی آنها مقایسه کنید، یا یک GPU اجاره کرده و یکی را آموزش دهید. سه راه برای شروع، هیچکدام نیازی به سختافزاری که ندارید، ندارند.
بدون سختافزار امتحان کنیدسوالات متداول
آیا میتوانم GR00T N1.7 را روی رزبری پای اجرا کنم اگر GPU از راه دور باشد؟▾
بله، تقسیمبندی کلاینت-سرور برای همین منظور است. رزبری پای درایورهای lerobot را اجرا میکند، دو دوربین و یک گذرگاه سریال را میخواند و مشاهدات را به سرور سیاست ارسال میکند؛ هرگز مدل را بارگذاری نمیکند. محدودیت از VRAM به پهنای باند آپلود منتقل میشود: دو فریم RGB فشردهنشده 640x480 برابر با 1,843,200 بایت در هر فراخوانی هستند و هیچ یک از پشتهها آنها را فشرده نمیکنند.
شبکه در واقع چقدر تأخیر اضافه میکند؟▾
زمان رفت و برگشت به علاوه زمان انتقال مشاهده. زمان انتقال 14.7 مگابیت تقسیم بر پهنای باند آپلود شماست: تقریباً 147 میلیثانیه در یک لینک 100 مگابیت بر ثانیه، 1.47 ثانیه در یک لینک 10 مگابیت بر ثانیه. هر دو اینها به زمان استنتاج خود مدل اضافه میشوند، که AY-Robots آن را 152 میلیثانیه برای GR00T N1.7 و 485 میلیثانیه برای Pi0.5 فهرست کرده است. با استفاده از ping و iperf3 در برابر پاد اندازهگیری کنید، نه یک سرور تست سرعت.
آیا استنتاج از راه دور برای یک کار واقعی به اندازه کافی خوب است؟▾
برای کارهای آهسته و با دقت انتخاب و قرار دادن، بله. برای هر چیز واکنشی، خیر. راهنمای استقرار NVIDIA نیاز به یک گام همزمان را تقریباً 33 میلیثانیه از ابتدا تا انتها در 30 فریم بر ثانیه تعیین میکند و اشاره میکند که ضبط، شبکه، استنتاج و پسپردازش به طور معمول از این مقدار فراتر میروند، حتی بدون دخالت اینترنت.
سرورها از کدام پورت استفاده میکنند و آیا باز کردن آن ایمن است؟▾
PolicyServer در Isaac-GR00T به طور پیشفرض از پورت 5555 از طریق ZeroMQ استفاده میکند و 0.0.0.0 را در CLI خود متصل میکند. lerobot به طور پیشفرض از پورت 8080 از طریق gRPC استفاده میکند و localhost را متصل میکند. هیچ یک برای افشا ایمن نیستند: کلاس GR00T از api_token پشتیبانی میکند اما run_gr00t_server.py هرگز آن را ارسال نمیکند، و lerobot دادهها را از طریق یک کانال gRPC ناامن pickle میکند، که CVE-2026-25874 است. به loopback متصل شوید و از یک تونل SSH استفاده کنید.
آیا ارتقاء lerobot مشکل CVE-2026-25874 را برطرف میکند؟▾
تا 23 آگوست 2026 خیر. رکورد CVE، LeRobot تا نسخه 0.5.1 را تحت تأثیر قرار گرفته فهرست میکند و PyPI نسخه 0.6.1 را ارائه میدهد، اما درخواست کششی که pickle را از پایپلاین ناهمزمان حذف میکند هنوز باز است، و policy_server.py در main همچنان pickle.loads را روی دادههای درخواست فراخوانی میکند. جداسازی شبکه را به عنوان راه حل در نظر بگیرید، نه ارتقاء نسخه، و فرض کنید کلاینت سمت ربات نیز در محدوده است.
آیا میتوانم از کلاینت ناهمزمان lerobot با یک GR00T checkpoint استفاده کنم؟▾
بله. lerobot 0.6.1، groot را در SUPPORTED_POLICIES در کنار act, smolvla, diffusion, tdmpc, vqbet, pi0 و pi05 فهرست میکند، و هر دو so100_follower و so101_follower در SUPPORTED_ROBOTS هستند. --policy_type=groot را ارسال کنید و --pretrained_name_or_path را به checkpoint خود اشاره دهید. شما اجرای ناهمزمان را دریافت میکنید، که مثال GR00T SO-100 آن را پیادهسازی نمیکند، با هزینه انتقال pickle.
نسخه کوتاه
استنتاج از راه دور برای یک 3 B سیاست یک مشکل مهندسی حل شده با یک مشکل فیزیک حل نشده همراه است. مهندسی شامل دو دستور و یک تونل SSH است. فیزیک این است که یک مشاهده 1.8 مگابایتی باید به یک GPU در کشوری دیگر برسد و قبل از اینکه بازو از اقدامات خود خارج شود، بازگردد. قبل از اجاره هر چیزی، محاسبات را انجام دهید، کاری را انتخاب کنید که یک مشاهده قدیمی را تحمل کند، و افق اجرا را افزایش دهید به جای اینکه امیدوار باشید لینک بهبود یابد.
اگر هنوز مجموعه دادهای را ضبط نکردهاید، اولین مجموعه داده خود را ضبط کنید و راهنمای راهاندازی SO-100 در اولویت هستند، و ورودی فرمت مجموعه داده LeRobot توضیح میدهد که ضبطکننده چه چیزی را مینویسد. پیشزمینه در مدلهای بینایی-زبان-عمل و کار سیاست تطبیق جریان است؛ ورودی آرنا هر عدد بنچمارک را به یک منبع پیوند میدهد.
Sources
- NVIDIA Isaac-GR00T: مخزن N1.7 و README (حداقل ۱۶ گیگابایت برای استنتاج، نصب، بکبون Cosmos-Reason2-2B محدود، محدودیت FFmpeg)
- run_gr00t_server.py: رابط خط فرمان سرور سیاست GR00T، پیشفرضهای ServerConfig (میزبان 0.0.0.0، پورت 5555) و مسیر ReplayPolicy
- server_client.py: PolicyServer و PolicyClient، مرز allow_pickle=False در MsgSerializer، api_token، timeout_ms
- eval_so100.py: کلاینت سیاست SO-100، پیشفرضهای EvalConfig و حلقه کنترل همزمان
- مثال Isaac-GR00T SO100/SO101: تبدیل مجموعه داده، تنظیم دقیق و دستورات ارزیابی حلقه بسته
- راهنمای استقرار در دنیای واقعی Isaac-GR00T: بودجه همزمان ۳۳ میلیثانیه، توقف و حرکت، اندازه قطعه عمل، وضعیت RTC
- توصیه سختافزاری Isaac-GR00T: فرکانس استنتاج به ازای هر GPU و حداقل ۱۰ هرتز
- راهنمای استقرار و استنتاج Isaac-GR00T: نتایج بنچمارک تأخیر به ازای هر جزء
- LeRobot: آموزش استنتاج ناهمزمان (PolicyServer، RobotClient، جدول پارامترهای مستند شده)
- lerobot async_inference/configs.py: پیشفرضهای PolicyServerConfig و RobotClientConfig، رجیستری AGGREGATE_FUNCTIONS
- lerobot async_inference/policy_server.py: pickle.loads روی داده درخواست، add_insecure_port، نامهای فراخوانی gRPC
- lerobot robot_client.py: انتقال gRPC، سریالسازی pickle، ثبت تأخیر
- CVE-2026-25874: اجرای کد از راه دور از طریق gRPC با deserialization ناامن LeRobot، تحت تأثیر تا نسخه 0.5.1
- Black، Galliker و Levine، اجرای بلادرنگ سیاستهای جریان قطعهبندی عمل (قطعهبندی بلادرنگ)
- قیمتگذاری GPU Runpod: نرخهای ساعتی ابری جامعه و امن برای A100، H100، L40S و RTX 4090
Sources
- NVIDIA Isaac-GR00T: N1.7 repository and README (16 GB inference floor, install, gated Cosmos-Reason2-2B backbone, FFmpeg constraint)
- run_gr00t_server.py: the GR00T policy server CLI, ServerConfig defaults (host 0.0.0.0, port 5555) and the ReplayPolicy path
- server_client.py: PolicyServer and PolicyClient, MsgSerializer's allow_pickle=False boundary, api_token, timeout_ms
- eval_so100.py: the SO-100 policy client, EvalConfig defaults and the synchronous control loop
- Isaac-GR00T SO100/SO101 example: dataset conversion, finetune and closed-loop eval commands
- Isaac-GR00T Real-World Deployment Guide: the 33 ms synchronous budget, stop-and-go, action chunk size, RTC status
- Isaac-GR00T Hardware Recommendation: inference frequency per GPU and the 10 Hz minimum
- Isaac-GR00T Deployment and Inference Guide: per-component latency benchmark results
- LeRobot: Asynchronous Inference tutorial (PolicyServer, RobotClient, the documented parameter table)
- lerobot async_inference/configs.py: PolicyServerConfig and RobotClientConfig defaults, AGGREGATE_FUNCTIONS registry
- lerobot async_inference/policy_server.py: pickle.loads on request data, add_insecure_port, the gRPC call names
- lerobot robot_client.py: gRPC transport, pickle serialization, latency logging
- CVE-2026-25874: LeRobot unsafe deserialization remote code execution via gRPC, affected through 0.5.1
- Black, Galliker and Levine, Real-Time Execution of Action Chunking Flow Policies (real-time chunking)
- Runpod GPU pricing: community and secure cloud hourly rates for A100, H100, L40S and RTX 4090
Ready for high-quality robotics data?
AY-Robots connects your robots to skilled operators worldwide.
Get Started