صفحه امتحان AY-Robots: سه روش برای شروع بدون داشتن ربات، شامل اجاره یک GPU برای استنتاج سیاست
GR00T N1.7استنتاج از راه دورGPU ابریLeRobotSO-100تأخیر

اجرای استنتاج GR00T بدون GPU محلی

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

ماشین ربات شما 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 msA100 80 GB or H100 80 GB50LeRobot v2.0 or v2.1
GR00T N1.5~3 B165 msA100 80 GB or H100 80 GB50LeRobot v2.0 or v2.1
Pi0.5~3 B, بک‌بون PaliGemma485 msA100 80 GB or H100 80 GB50LeRobot v3.0
SmolVLA~450 M245 msRTX 4090 or any 24 GB card30LeRobot v3.0
ACT~80 M20 msRTX 4090 or any 24 GB card50LeRobot v3.0
صفحه سیاست‌های AY-Robots که پنج سیاست قابل آموزش را بر اساس پارامترها، رده GPU، تأخیر استنتاج و حداقل اپیزودها مقایسه می‌کند.
همین پنج ردیف در /policies. ستون تأخیر تعیین می‌کند که آیا یک سیاست از یک پرش شبکه جان سالم به در می‌برد یا خیر.

این را به عنوان یک تصمیم بخوانید، نه اطلاعات بی‌اهمیت. با ۲۰ میلی‌ثانیه در هر گام، روی ماشین ربات اجرا می‌شود و دیگر هرگز به آن فکر نمی‌کنید. با ۴۸۵ میلی‌ثانیه، یک سوم ثانیه را قبل از خروج یک بسته از ساختمان شما صرف کرده است. و جنبه دقت را اضافه می‌کنند.

ACT مدل پایه ندارد

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 PolicyServerlerobot async inference
نقطه ورودیgr00t/eval/run_gr00t_server.pypython -m lerobot.async_inference.policy_server
حمل و نقلZeroMQ REQ/REPgRPC, add_insecure_port / insecure_channel
سریال‌سازیmsgpack + msgpack_numpy, allow_pickle=False enforcedpickle.dumps / pickle.loads, marked # nosec
پورت پیش‌فرض55558080
اتصال پیش‌فرض0.0.0.0, all interfaceslocalhost
احراز هویت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. 1
    نصب GR00T روی سرور GPU اجاره‌ای

    زیرماژول‌ها ضروری هستند، و git-lfs باید قبل از کلون کردن وجود داشته باشد وگرنه فایل‌های parquet در demo_data به صورت اشاره‌گر (pointers) می‌رسند. flash-attn و TensorRT با نصب پیش‌فرض همراه هستند. مشکل در یک ایمیج پاد تازه: torchcodec 0.8.0 تنها بک‌اند ویدیویی پشتیبانی شده است و فقط FFmpeg 4 تا 7 را بارگذاری می‌کند. اوبونتو 25.10 و 26.04 با FFmpeg 8 عرضه می‌شوند، بنابراین GR00T با خطای Could not load libtorchcodec مواجه می‌شود. یک FFmpeg پایین‌تر از 8 نصب کنید و کتابخانه‌های آن را در LD_LIBRARY_PATH قرار دهید.

    bash
    sudo 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. 2
    احراز هویت در برابر بک‌بون محدود شده

    هر نقطه بازرسی GR00T N1.7، از جمله تنظیمات دقیق (fine-tune) خودتان، در اولین استفاده، مدل محدود شده nvidia/Cosmos-Reason2-2B را بارگذاری می‌کند. در صفحه مدل درخواست دسترسی دهید و در پاد وارد شوید، در غیر این صورت بارگذاری با خطای GatedRepoError مواجه می‌شود.

    bash
    uv run huggingface-cli login
    # or:  export HF_TOKEN=<your_token>
  3. 3
    راه‌اندازی سرور سیاست

    --model-path را به دایرکتوری نقطه بازرسی خود اشاره دهید؛ در این مسیر سرور --modality-config-path را نادیده می‌گیرد، که فقط در مسیر بازپخش (replay path) خوانده می‌شود. --model-path را حذف کنید و به جای آن --dataset-path به همراه --execution-horizon را برای یک ReplayPolicy که اقدامات ضبط شده را بازپخش می‌کند، ارسال کنید؛ این ارزان‌ترین راه برای اثبات کارکرد سیم‌کشی است.

    bash
    uv 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. 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. 5
    اجرای کلاینت ربات در کنار سرووها

    کلاینت به محیط uv مخصوص خود نیاز دارد: این کلاینت درایورهای ربات lerobot را می‌خواهد، نه پشته آموزشی را. eval_so100.py ماژول‌های so100_follower، so101_follower و koch_follower را ایمپورت می‌کند، بنابراین --robot.type را مطابق با بازوی خود ارسال کنید (README اصلی از so101_follower استفاده می‌کند). کلیدهای دوربین باید با آموزش مطابقت داشته باشند: آداپتور دقیقاً front و wrist را می‌خواند، و جابجایی آن‌ها دید اشتباهی را به سیاست نشان می‌دهد.

    bash
    cd 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 نیز کار می‌کند.

bash
# 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
سرور سیاست روی GPU، کلاینت ربات روی ماشینی با پورت‌های USB

سرور خالی شروع به کار می‌کند: تا زمانی که اولین دست‌تکان دادن کلاینت به آن نگوید که چه سیاستی را ارائه می‌دهد، نمی‌داند، که در یک پاد اجاره‌ای راحت است. دو پارامتری که تعیین می‌کنند آیا بازو به نرمی حرکت می‌کند عبارتند از actions_per_chunk و chunk_size_threshold (مستندات lerobot دومی را g می‌نامند، به دنبال مقاله SmolVLA)، و مقادیر مستند شده و مقادیر ارسال شده با هم مطابقت ندارند.

ParameterValue in lerobot 0.6.1 codeWhat it doesNote
actions_per_chunkno default, requiredتعداد عملیات بازگردانده شده در هر فراخوانیجدول مستندات 50 را لیست می‌کند؛ فیلد dataclass مقدار پیش‌فرض ندارد، بنابراین CLI یک مقدار را درخواست می‌کند
chunk_size_threshold0.5نسبت پر شدن صف که در آن یا کمتر از آن کلاینت یک مشاهده جدید ارسال می‌کندجدول مستندات 0.7 را می‌گوید؛ کد و مثال خود مستندات 0.5 را می‌گویند
fps30نرخ کنترل کلاینت، environment_dt = 1/fps را تنظیم می‌کنداگر صف مدام خالی می‌شود، آن را کاهش دهید
inference_latency1/30 s (33.3 ms)تأخیر استنتاج هدف در سروریک هدف، نه یک اندازه‌گیری
obs_queue_timeout2 sمدت زمانی که سرور در صف مشاهده منتظر می‌ماندیک آپلینک کند ابتدا در اینجا خود را نشان می‌دهد
aggregate_fn_nameweighted_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
سرور سیاست lerobot دارای یک RCE وصله‌نشده است

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 میلی‌ثانیه حرکت در هر فراخوانی است، و هر چیز دیگری باید در این زمان جای بگیرد.

text
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
مثال عملی: آپلینک 100 مگابیت بر ثانیه، زمان رفت و برگشت 30 میلی‌ثانیه، GR00T N1.7

افزایش افق یک راه‌حل سرراست و البته بدون هزینه نیست: بازو بر اساس مشاهده‌ای عمل می‌کند که اکنون قدیمی شده است. راه‌حل اصولی، قطعه‌بندی بلادرنگ (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. 1
    سفر رفت و برگشت خام را دریافت کنید

    در برابر پاد، نه یک CDN. انحراف را به همان اندازه میانگین با دقت مشاهده کنید: لرزش (jitter) باعث لکنت بازو می‌شود، نه تأخیر متوسط.

    bash
    ping -c 50 <pod-host>
    # the mdev column is the number that predicts stutter
  2. 2
    آپلینکی را که دارید اندازه‌گیری کنید، نه آنی را که برایش پول می‌دهید

    آپلود خانگی معمولاً کسری از دانلود است، و این همان عددی است که در جدول پهنای باند بالا ذکر شده است.

    bash
    # on the pod
    iperf3 -s
    
    # on the robot machine, -R omitted so this measures upload
    iperf3 -c <pod-host> -t 30
  3. 3
    لاگ تأخیر خود کلاینت را بخوانید

    کلاینت ربات lerobot تأخیر سرور به کلاینت و زمان دی‌سریال‌سازی را برای هر تکه ثبت می‌کند. در مسیر B به هیچ ابزار خارجی نیاز ندارید.

    text
    Received action chunk for step #240 | Latest action: #232 |
      Incoming actions: 240:289 |
      Network latency (server->client): 187.44ms |
      Deserialization time: 3.10ms
  4. 4
    تخلیه صف عمل را مشاهده کنید

    --debug_visualize_queue_size=True را ارسال کنید و کلاینت اندازه صف را در زمان اجرا رسم می‌کند. اگر به طور مکرر به صفر برسد، شما از بودجه خارج شده‌اید: نرخ فریم (fps) را کاهش دهید، actions_per_chunk را افزایش دهید، یا chunk_size_threshold را افزایش دهید تا مشاهدات بیشتر ارسال شوند.

    bash
    python -m lerobot.async_inference.robot_client \
        ... \
        --debug_visualize_queue_size=True

استنتاج از راه دور واقعاً برای چه کاری خوب است

سیاست روی GPU اجاره‌ای، بازو روی میز شما
مزایا
  • می‌توانید یک سیاست با 3 میلیارد پارامتر را روی سخت‌افزار واقعی ارزیابی کنید، بدون اینکه کارتی داشته باشید که قیمتش از بازو بیشتر باشد.
  • GPU به صورت ساعتی اجاره می‌شود، بنابراین یک نقطه بازرسی ناموفق چند دلار هزینه دارد.
  • سمت ربات کوچک می‌ماند: درایورهای lerobot، دو دوربین، یک پورت سریال، و شما بدون دست زدن به آن، نقاط بازرسی را تعویض می‌کنید.
معاوضه‌ها
  • مشاهدات فشرده‌نشده هزینه پهنای باند را افزایش می‌دهند و آپلود خانگی محدودیت اصلی است.
  • لرزش (Jitter) بیشتر از تأخیر (Latency) آسیب می‌زند: یک اتصال با میانگین 40 میلی‌ثانیه و اوج‌های 300 میلی‌ثانیه دچار لکنت می‌شود، در حالی که یک اتصال پایدار 120 میلی‌ثانیه اینطور نیست.
  • وظایف واکنشی سریع در هیچ افقی از رفت و برگشت جان سالم به در نمی‌برند.
  • هر دو سرور به صورت احراز هویت نشده و در قالب CLI ارائه می‌شوند، بنابراین کار تونل‌سازی بر عهده شماست.
  • قطع شدن اتصال در میانه یک بسته، بازو را با یک عمل منسوخ رها می‌کند. ربات خود را به یک ربات نگهبان (watchdog) مجهز کنید.
وظیفهآیا از طریق اینترنت عمومی کار می‌کند؟چرا
یک شیء ثابت را بردارید، آن را در یک سطل قرار دهیدبلهچیزی بین مشاهده و عمل حرکت نمی‌کند.
بلوک‌ها را با سرعت عمدی روی هم بچینیدبله، با action_horizon 16 یا بیشترخطاها به اندازه کافی آهسته جمع می‌شوند تا در بسته بعدی رفع شوند.
یک کشو را باز کنید، یک شیء را وارد کنیدمعمولاًغنی از تماس اما کند. مراقب توقف و حرکت در هنگام تماس باشید.
یک شیء متحرک را دنبال کنیدخیرسیاست بر اساس مشاهده‌ای با قدمت 300 میلی‌ثانیه تا 1 ثانیه عمل می‌کند.
گرفتن، تعادل، یا بازیابی از لغزشخیرپنجره تصحیح کوتاه‌تر از یک رفت و برگشت است.
یک حلقه بسته همزمان 30 هرتزخیربودجه 33 میلی‌ثانیه از ابتدا تا انتها است. حتی یک شبکه محلی (LAN) هم با آن مشکل دارد.

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

انجام آن توسط خودتان در مقابل انجام آن روی AY-Robots

  1. یک GPU را در بازار لحظه‌ای اجاره کنید و منتظر بمانید تا VRAM کافی با قیمتی که می‌پسندید، در دسترس قرار گیرد.
  2. CUDA، uv، یک ffmpeg torchcodec قابل قبول، و پشته GR00T را با زیرماژول‌ها نصب کنید.
  3. درخواست دسترسی به بک‌بون محدود `nvidia/Cosmos-Reason2-2B` را ارسال کنید و یک توکن روی پاد قرار دهید.
  4. چک‌پوینت خود را روی پاد بکشید.
  5. سرور را روی لوپ‌بک راه‌اندازی کنید، سپس یک تونل SSH از ماشین ربات بسازید.
  6. یک محیط دوم روی ماشین ربات برای کلاینت و درایورها نصب کنید.
  7. کلیدهای دوربین، نام‌های مفصل و دستورالعمل زبان را با آنچه چک‌پوینت دیده است، مطابقت دهید.
  8. پاد را زیر نظر داشته باشید. یک A100 فراموش‌شده که یک شب کامل کار می‌کند، بیشتر از هزینه آزمایش تمام می‌شود.
پاد بیکار، هزینه واقعی است

هزینه GPU با توقف ربات متوقف نمی‌شود. بیشتر پولی که در استنتاج از راه دور از دست می‌رود، صرف سروری می‌شود که پس از رفتن همه، روشن مانده است. یک هشدار تنظیم کنید یا تخریب خودکار را فعال کنید.

صفحه سرور MCP AY-Robots که عملیات پلتفرم را به عنوان ابزارهایی برای عامل‌های هوش مصنوعی فهرست می‌کند.
صفحه MCP: عملیات تامین و استنتاج به عنوان ابزارهایی که یک عامل می‌تواند فراخوانی کند، نمایش داده شده‌اند.

هزینه یک جلسه استنتاج از راه دور چقدر است

دو عدد مهم هستند: نرخ ساعتی کارت، و مدت زمانی که آن را روشن می‌گذارید. اولی منتشر شده است؛ دومی مردم را غافلگیر می‌کند.

کارتابر عمومی Runpodابر امن Runpodمناسب برای
A100 PCIe 80 GB1.19 USD/h1.39 USD/hGR00T N1.7, GR00T N1.5, Pi0.5
A100 SXM 80 GB1.39 USD/h1.59 USD/hهمان، کمی سریع‌تر
H100 PCIe 80 GB1.99 USD/h2.89 USD/hسریع‌ترین رده؛ رقم 11.7 هرتز NVIDIA برای H100 80GB HBM3 است
L40S 48 GB0.79 USD/h0.99 USD/hفقط برای استنتاج، بالاتر از حداقل 16 گیگابایت
RTX 4090 24 GB0.34 USD/h0.74 USD/hSmolVLA, 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. یک جلسه استنتاج تنها در صورتی از نظر هزینه بر یک اجرای آموزشی برتری دارد که آن را متوقف کنید، که این همان کاری است که نگهبان بیکار برای آن است. به مستندات صورت‌حساب و صفحه قیمت‌گذاری.

جدول هزینه AY-Robots که نشان می‌دهد هر سیاست به کدام GPU نیاز دارد، زمان و قیمت معمول اجرا، و تعداد اپیزودها قبل از مفید شدن یک سیاست
جدول هزینه در /try: هر مدل به چه کارتی نیاز دارد و یک اجرا معمولاً چقدر هزینه دارد.

اگر ترجیح می‌دهید شبکه در حلقه نباشد

استنتاج از راه دور یک مشکل سخت‌افزاری را حل می‌کند و یک مشکل تأخیر ایجاد می‌کند. گاهی اوقات پاسخ بهتر، یک سیاست (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

Sources

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started