
למכונת הרובוט שלך אין GPU. הצב את שרת המדיניות של GR00T על GPU ענן שכור, הזרם נתחי פעולה לזרוע, ולמד בדיוק מה עלות הרשת עבורך.
Raspberry Pi מספיק כדי להניע דרך אפיק טורי ולשלוף פריימים משתי מצלמות USB. זה לא מספיק כדי להריץ מודל של שלושה מיליארד פרמטרים מסוג : קובץ ה-README של NVIDIA מציין שביצוע הסקה של GR00T N1.7 דורש GPU אחד עם 16 GB או יותר של VRAM. כדי לראות מה נקודת הבדיקה (checkpoint) המכווננת של עושה על הזרוע בלי לקנות כרטיס, שים את המדיניות על GPU ענן שכור, השאר את לולאת הרובוט על המכונה עם יציאות ה-USB, ושלח תצפיות ונתחי פעולה דרך הרשת.
זה עובד, זה לא בחינם, והמחיר אינו מתחלק באופן שווה בין המשימות. להלן: שרת המדיניות של NVIDIA עצמה, ערימת ה-async של lerobot, החישוב שקובע מראש אם ה-uplink שלך מהיר מספיק, ונתיב הפלטפורמה. כל זה נבדק מול הענף הראשי של Isaac-GR00T (N1.7 GA) ו-lerobot 0.6.1 בתאריך 23 August 2026.
מה שאתה צריך לדעת
- •GR00T N1.7, GR00T N1.5 ו-Pi0.5 הם מודלים של כ-3 B פרמטרים. אף אחד מהם לא מתאים לבקר רובוט ללא GPU נפרד.
- •גם Isaac-GR00T וגם lerobot מספקים פיצול לקוח-שרת. אינך כותב את התעבורה.
- •תצפיות שולטות בעלות התקשורת, לא פעולות: שתי תמונות RGB לא דחוסות בגודל 640x480 הן 1,843,200 bytes, כ-14.7 Mbit לכל קריאה, ואף אחת מהערימות לא דוחסת אותן.
- •AY-Robots מפרטת 20 עד 485 ms לכל שלב פעולה לפי מודל. זמני תגובה של האינטרנט מתווספים לכך.
- •הסקה מרחוק מתאימה למשימות איסוף והנחה איטיות, לא לתנועה תגובתית מהירה. אופק ביצוע ארוך יותר קונה זמן ועולה ברעננות התצפיות.
- •אף אחד מהשרתים אינו בטוח ב-IP ציבורי כפי שהוא מסופק, ושל lerobot מכיל RCE לא מתוקן. תעל אותו.
מדוע המדיניות לא תתאים למכונת הרובוט
שתיים מתוך חמש המדיניות ש-AY-Robots יכולה לאמן רצות על כרטיס תחנת עבודה, שלוש לא. השהיית הסקה העמודה למטה היא לכל שלב פעולה, וזה המספר שמתחרה בזמן ההלוך-חזור של הרשת שלך.
| מדיניות | פרמטרים | הסקה לכל שלב פעולה | רמת GPU לאימון | מינימום פרקים | פורמט מערך נתונים |
|---|---|---|---|---|---|
| GR00T N1.7 | ~3 B, ~40 M trained during fine-tuning | 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 backbone | 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 |

קרא זאת כהחלטה, לא כטריוויה. ACT ב-20 אלפיות השנייה לכל שלב, רץ על מכונת הרובוט ואתה לא חושב על זה שוב. Pi0.5 ב-485 אלפיות השנייה, בילה שליש שנייה לפני שחבילה עוזבת את הבניין שלך. השוואת מדיניות ו-GR00T N1.7 vs Pi0.5 מוסיפים את צד הדיוק.
GR00T N1.7, GR00T N1.5 ו-Pi0.5 מתחילים מנקודת ביקורת של ספק (nvidia/GR00T-N1.7-3B, nvidia/GR00T-N1.5-3B, lerobot/pi05_base). ACT אינו קיים עד שתאמן אותו למשימה שלך, ולכן אין מה להגיש מרחוק עד להפעלת משימת אימון. ראה ACT ב-SO-100.
שתי ערימות הלקוח-שרת הקיימות
Isaac-GR00T מספק שרת ZeroMQ מסוג בקשה-תגובה; lerobot מספק שרת gRPC הבנוי סביב הסקה אסינכרונית. שניהם מקבלים נקודת ביקורת. רשימת המדיניות הנתמכת של lerobot ב-async_inference/constants.py היא act, smolvla, diffusion, tdmpc, vqbet, pi0, pi05 ו-groot; רשימת הרובוטים שלה היא so100_follower, so101_follower, bi_so_follower ו-omx_follower.
| שרת מדיניות Isaac-GR00T | הסקה אסינכרונית של lerobot | |
|---|---|---|
| נקודת כניסה | 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, מסומן # nosec |
| פורט ברירת מחדל | 5555 | 8080 |
| קשירה ברירת מחדל | 0.0.0.0, כל הממשקים | localhost |
| אימות | api_token נתמך על ידי המחלקה, לא מועבר על ידי ה-CLI | אין |
| פסק זמן לקוח | 15000 ms (PolicyClient timeout_ms) | 2 s פסק זמן לתור תצפיות |
| מודל ביצוע | סינכרוני: חסימה, ואז ביצוע הנתח | אסינכרוני: ביצוע בזמן שהנתח הבא מחושב |
שורת הסריאליזציה חשובה יותר ממה שנראה. ה-MsgSerializer של GR00T מסרב לקבל מטעני ndarray מסוג object-dtype בשני הכיוונים, מכיוון ש-msgpack_numpy היה מעביר אותם אחרת ל-pickle. lerobot מבצעת pickle במקום זאת: policy_server.py קורא ל-pickle.loads על נתוני הבקשה, robot_client.py מבצעת pickle לתצפית שהיא שולחת. ניתן להגנה ברשת מקומית מהימנה, בלתי ניתן להגנה ברגע שהפורט נגיש מהאינטרנט.
נתיב א': שרת המדיניות GR00T של NVIDIA
זהו הנתיב ש-NVIDIA מתעדת עבור חומרת SO-100 ו-SO-101, והנתיב לשימוש אם נקודת הבדיקה שלך נוצרה מתוך examples/finetune.sh עם --embodiment-tag NEW_EMBODIMENT. השלבים מוסיפים את מה שה-README המקורי משמיט: העברת הפורט לרובוט מבלי לחשוף אותו לכל השאר.
- 1התקן את GR00T על תיבת ה-GPU השכורה
מודולי משנה נדרשים, ו-git-lfs חייב להתקיים לפני השיבוט או שקובצי parquet ב-
demo_dataיגיעו כמצביעים. flash-attn ו-TensorRT מגיעים עם ההתקנה המוגדרת כברירת מחדל. המכשול בתמונת pod חדשה:torchcodec0.8.0 הוא ה-backend היחיד הנתמך לווידאו וטוען רק 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אמת מול ה-backbone המגודר
כל נקודת בדיקה של GR00T N1.7, כולל ה-fine-tune שלך, טוענת את
nvidia/Cosmos-Reason2-2Bהמגודר בשימוש הראשון. בקש גישה בדף המודל והתחבר ל-pod, אחרת הטעינה תיכשל עםGatedRepoError.bashuv run huggingface-cli login # or: export HF_TOKEN=<your_token> - 3הפעל את שרת המדיניות
כוון את
--model-pathלספריית נקודות הבדיקה שלך; בנתיב זה השרת מתעלם מ---modality-config-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 למכונת הרובוט
קשור ל-loopback, כפי שצוין לעיל, והעבר את הפורט דרך SSH או רשת בסגנון 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.
נתיב ב': הסקה אסינכרונית של 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), והערכים המתועדים והערכים שנשלחו אינם תואמים.
| פרמטר | ערך בקוד lerobot 0.6.1 | מה הוא עושה | הערה |
|---|---|---|---|
| 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 ו-conservative גם נשלחים. הרישום הוא AGGREGATE_FUNCTIONS ב-configs.py, לא ב-robot_client.py כפי שטוען התיעוד. |
CVE-2026-25874 הוא ביצוע קוד מרחוק לא מאומת בצינור ההסקה האסינכרוני של lerobot: pickle.loads() על נתונים שהתקבלו דרך ערוץ gRPC לא מאומת ללא TLS, הנגיש דרך הקריאות SendPolicyInstructions, SendObservations ו-GetActions. CWE-502, ציון בסיס CVSS 3.1 של 9.8 מ-NVD, ציון בסיס 4.0 של 9.3 מה-CNA המקצה. הרישום מפרט את LeRobot עד 0.5.1 כפגוע ומציין גם את שרת המדיניות וגם את לקוח הרובוט, כך שהמכונה שליד הזרוע שלך נמצאת בטווח. שדרוג אינו הפתרון: הרישום מצטט את בעיה 3047 במעלה הזרם ואת התיקון, PR 3048, שמחליף את pickle ב-safetensors בתוספת JSON, ובתאריך 23 באוגוסט 2026 שניהם עדיין פתוחים. policy_server.py ב-main עדיין קורא ל-pickle.loads על נתוני בקשה בזמן ש-serve() נקשר עם add_insecure_port. קשור ל-loopback ולעולם אל תבצע העברת פורטים ל-8080.
האריתמטיקה שמחליטה אם הקישור שלך מהיר מספיק
אנשים מדלגים על זה ואז מבלים יום שלם ב-. זה לוקח שתי דקות וזה כמעט תמיד מכריע.
מילון התצפיות המפורט בקוד של NVIDIA ב-eval_so100.py מציין מה עובר בחיבור: שני מערכים בצורת (480, 640, 3) בפורמט uint8, שישה ערכי float של מפרקים, ומחרוזת שפה. זה 921,600 בתים לפריימים, 1,843,200 בתים לשתי מצלמות, כ-14.7 מגה-ביט, ואף ערימה לא דוחסת את זה ב-JPEG. החבילה שחוזרת היא כמה עשרות צעדים של 6 ערכי float. המהירות העלאה שלך קובעת הכל, לא המהירות הורדה שלך.
| רוחב פס העלאה | זמן לדחיפת תצפית אחת (14.7 מגה-ביט) | פסיקה עבור זרוע ב-30 פריימים לשנייה |
|---|---|---|
| 10 מגה-ביט/שנייה, העלאה ביתית טיפוסית | ~1.47 s | בלתי שמיש. הזרוע עוצרת בין כל חבילה. |
| 25 Mbit/s | ~0.59 s | איסוף והנחה איטיים בלבד, עם אופק ביצוע ארוך. |
| 50 Mbit/s | ~0.29 s | שמיש למשימות מכוונות. |
| 100 Mbit/s | ~0.15 s | בסדר גמור לאיסוף והנחה, מורגש בתנועה מהירה. |
| 1 ג'יגה-ביט/שנייה סיב אופטי או דאטה-סנטר | ~0.015 s | המודל הופך לצוואר הבקבוק במקום זאת. |
התקציב שעליך לעמוד בו
לקוח GR00T SO-100 הוא סינכרוני: הוא קורא ל-policy.get_action(obs), מבצע את ה-action_horizon הצעדים הראשונים של הנתח ב-30 פריימים לשנייה, ואז קורא שוב. גודל הנתח והאופק הם מספרים שונים: מדריך הפריסה של 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. עקוב אחר הסטייה באותה מידה כמו הממוצע: ריצוד גורם לזרוע לגמגם, לא השהיה ממוצעת.
bashping -c 50 <pod-host> # the mdev column is the number that predicts stutter - 2מדוד את ה-uplink שיש לך, לא את זה שאתה משלם עליו
העלאה ביתית היא בדרך כלל שבריר מההורדה, וזהו המספר בטבלת רוחב הפס לעיל.
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 B פרמטרים על חומרה אמיתית מבלי להחזיק כרטיס שעולה יותר מהזרוע.
- ה-GPU מושכר לפי שעה, כך שנקודת בדיקה שנכשלה עולה כמה דולרים.
- צד הרובוט נשאר קטן: דרייברים של lerobot, שתי מצלמות, יציאה טורית, ואתה מחליף נקודות בדיקה מבלי לגעת בו.
- תצפיות לא דחוסות שולטות בעלות התעבורה, והעלאה ביתית היא האילוץ המגביל.
- ריצוד (Jitter) מזיק יותר מחביון (Latency): קישור עם ממוצע של 40 אלפיות השנייה וקפיצות ל-300 אלפיות השנייה מגמגם, בעוד שקישור יציב של 120 אלפיות השנייה אינו.
- משימות תגובתיות מהירות אינן שורדות את זמן ההלוך-חזור בכל אופק.
- שני השרתים נשלחים ללא אימות בצורת CLI, כך שעבודת המנהור היא באחריותך.
- חיבור שנפל באמצע חבילת נתונים משאיר את הזרוע עם פעולה מיושנת. הוסף כלב שמירה משלך בצד הרובוט.
| משימה | עובד על גבי האינטרנט הציבורי? | למה |
|---|---|---|
| Pick a static object, place it in a bin | כן | שום דבר לא זז בין התצפית לפעולה. |
| Stack blocks at a deliberate pace | כן, באופק פעולה של 16 ומעלה | שגיאות מצטברות לאט מספיק כדי לתקן בחבילת הנתונים הבאה. |
| Open a drawer, insert an object | בדרך כלל | עשיר במגע אך איטי. שים לב לעצירות והתחלות במגע. |
| Follow a moving object | לא | המדיניות פועלת על תצפית בת 300 אלפיות השנייה עד שנייה אחת. |
| Catch, balance, or recover from a slip | לא | חלון התיקון קצר יותר מזמן הלוך-חזור אחד. |
| A 30 Hz synchronous closed loop | לא | התקציב הוא 33 אלפיות השנייה מקצה לקצה. אפילו רשת מקומית מתקשה. |
אם הרצה מרוחקת מגמגמת באותה נקודה בכל פרק, הרשת כנראה אינה הגורם. מדיניות המהססת באותה זווית מפרק בכל פעם היא בדרך כלל בעיית נתונים; ראה את דפי מצבי כשל, בפרט מדיניות שעובדת רק בהגדרה אחת ו-ההפסד יורד אך המדיניות לא עושה כלום.
לעשות זאת בעצמך מול לעשות זאת ב-AY-Robots
- שכור GPU בשוק ספוט והמתן לכמות VRAM מספקת במחיר שמתאים לך.
- התקן CUDA, uv, ffmpeg torchcodec תואם, ואת ערימת GR00T עם תת-מודולים.
- בקש גישה ל-backbone המוגבל `nvidia/Cosmos-Reason2-2B` והצב אסימון על ה-pod.
- משוך את נקודת הביקורת שלך אל ה-pod.
- הפעל את השרת ב-loopback, ולאחר מכן בנה מנהרת SSH ממכונת הרובוט.
- התקן סביבה שנייה על מכונת הרובוט עבור הלקוח והדרייברים.
- התאם את מפתחות המצלמה, שמות המפרקים והוראת השפה למה שנקודת הביקורת ראתה.
- עקוב אחר ה-pod. A100 שנשכח פועל לילה שלם עולה יותר מהניסוי.
חשבון ה-GPU אינו נפסק כשהרובוט עוצר. רוב הכסף שאובד בהסקה מרחוק הולך לשרת שנשאר פעיל לאחר שכולם עזבו. הגדר אזעקה, או בצע אוטומציה לפירוק.
- בחר את המדיניות המאומנת שברצונך להריץ.
- `/api/inference/pod` מספק אוטומטית pod של GPU בענן המשרת מדיניות זו.
- לקוח הרובוט המקומי מדבר עם נקודת קצה זו. נקודות ביקורת בסיסיות הן של הספקים עצמם: `nvidia/GR00T-N1.7-3B`, `nvidia/GR00T-N1.5-3B`, `lerobot/pi05_base`. ל-ACT אין.
- Pods נושאים watchdog לא פעיל ומשמידים את עצמם לאחר תקופת חוסר פעילות, כך ששום דבר לא ממשיך לחייב בשקט.
- אותן פעולות זמינות ממסוף ולסוכני AI, כך שניתן לתסרט את הלולאה.
הקצאה אוטומטית מסירה את עבודת ההתקנה ואת חשבון ה-pod הנשכח, לא את הפיזיקה. הסקה עדיין צריכה לשבת ליד הסרוו למשימות מהירות: לולאת הבקרה היא 20 עד 485 אלפיות השנייה לכל שלב פעולה בהתאם למודל, ונסיעות הלוך ושוב באינטרנט הציבורי בנוסף לכך הופכות מדיניות עובדת למדיניות מהוססת.
- מדריך לקוח עבור הצד המקומי של החיבור
- הרץ את המדיניות הראשונה שלך עבור המדריך המפורט
- 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 GB |
| 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 GB, 1 עד 3 דולר עבור SmolVLA או ACT. סשן הסקה עולה פחות מריצת אימון רק אם עוצרים אותו, ולשם כך נועד ה-idle watchdog. ראו את תיעוד החיובים ואת דף התמחור.

אם אתם מעדיפים שלא תהיה הרשת בלולאה
הסקה מרחוק פותרת בעיית חומרה ויוצרת בעיית חביון. לפעמים התשובה הטובה יותר היא מדיניות שמתאימה לחומרה הקיימת.
- ACT, בערך 80 מיליון פרמטרים ו-20 אלפיות השנייה לצעד פעולה, מינימום 50 אפיזודות, כל כרטיס 24 GB. בהגדרה של משימה יחידה חוזרת, הוא מנצח לעיתים קרובות מודל 3 B מרוחק, מכיוון שהוא לעולם אינו ממתין לחבילה.
- SmolVLA, בערך 450 מיליון פרמטרים ו-245 אלפיות השנייה לצעד פעולה, מינימום 30 אפיזודות. הוא שומר על התניית השפה שחסרה ל-ACT, ותיעוד ה-lerobot מציג אותו בכ-2 GB בזמן הסקה לעומת כ-14 GB עבור PI0.
- ACT vs GR00T N1.7 עבור מחצית הדיוק של הפשרה.
יש גם דרך ביניים: אימון בענן, הערכה מקומית. כוונון עדין דורש כרטיס 80 GB ואינו מתייחס לחביון, ולכן אימון GR00T N1.7 על SO-100 מרחוק אינו שנוי במחלוקת. רק ללולאת ההערכה יש אילוץ זמן אמת; התיעוד האימון ו-מטריצת מודל-וזרוע מכסים את החצי הזה.
עדיין אין זרוע על השולחן?
הפעל SO-100 אמיתי בדפדפן ללא הרשמה, השווה את חמש המדיניות הניתנות לאימון עם מספרי החביון האמיתיים שלהן, או שכר GPU ואמן אחת. שלוש דרכים להתחיל, אף אחת מהן לא דורשת חומרה שאינה בבעלותך.
נסה זאת ללא חומרהשאלות נפוצות
האם אוכל להריץ את GR00T N1.7 על Raspberry Pi אם ה-GPU מרוחק?▾
כן, לשם כך נועד הפיצול בין הלקוח לשרת. ה-Pi מריץ את מנהלי ההתקנים של lerobot, קורא שתי מצלמות ואפיק טורי, ושולח תצפיות לשרת המדיניות; הוא לעולם אינו טוען את המודל. האילוץ עובר מ-VRAM לרוחב פס העלאה: שתי פריימים לא דחוסים של 640x480 RGB הם 1,843,200 בתים לכל קריאה, ואף אחד מהערימות אינו דוחס אותם.
כמה השהיה הרשת מוסיפה בפועל?▾
זמן הלוך ושוב בתוספת זמן העברת תצפיות. זמן ההעברה הוא 14.7 מגה-ביט חלקי רוחב פס ההעלאה שלך: בערך 147 ms בקישור של 100 Mbit/s, ו-1.47 s בקישור של 10 Mbit/s. שניהם מתווספים לזמן ההסקה של המודל עצמו, ש-AY-Robots מפרטת כ-152 ms עבור GR00T N1.7 ו-485 ms עבור Pi0.5. מדוד באמצעות ping ו-iperf3 מול ה-pod, לא מול שרת בדיקת מהירות.
האם הסקה מרוחקת טובה מספיק למשימה אמיתית?▾
עבור משימות איסוף והנחה איטיות ומדויקות, כן. עבור כל דבר תגובתי, לא. מדריך הפריסה של NVIDIA קובע את דרישת הצעד היחיד הסינכרוני בכ-33 ms מקצה לקצה ב-30 FPS, ומציין כי לכידה, רשת, הסקה ועיבוד לאחר מכן חורגים באופן שגרתי מכך גם ללא מעורבות אינטרנט.
באיזו יציאה משתמשים השרתים והאם בטוח לפתוח אותה?▾
PolicyServer של Isaac-GR00T מוגדר כברירת מחדל ליציאה 5555 מעל ZeroMQ וקושר 0.0.0.0 בממשק שורת הפקודה שלו. lerobot מוגדר כברירת מחדל ליציאה 8080 מעל gRPC וקושר localhost. אף אחד מהם אינו בטוח לחשיפה: מחלקת GR00T תומכת ב-api_token אך run_gr00t_server.py לעולם אינו מעביר אחד, ו-lerobot מבצע pickle לנתונים על ערוץ gRPC לא מאובטח, שהוא CVE-2026-25874. קשור ל-loopback והשתמש במנהרת SSH.
האם שדרוג lerobot מתקן את CVE-2026-25874?▾
לא נכון ל-23 באוגוסט 2026. רשומת ה-CVE מפרטת את LeRobot עד 0.5.1 כפגועה ו-PyPI שולחת את 0.6.1, אך בקשת המשיכה שתסיר את ה-pickle מצינור ה-async עדיין פתוחה, ו-policy_server.py ב-main עדיין קורא ל-pickle.loads על נתוני בקשה. התייחס לבידוד רשת כפתרון, לא לעדכון גרסה, והנח שגם הלקוח בצד הרובוט נמצא בתחום ההשפעה.
האם אוכל להשתמש בלקוח ה-async של lerobot עם נקודת ביקורת של GR00T?▾
כן. 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 לנקודת הביקורת שלך. תקבל ביצוע אסינכרוני, שהדוגמה של GR00T SO-100 אינה מיישמת, במחיר של העברת ה-pickle.
הגרסה הקצרה
הסקה מרוחקת עבור 3 B מדיניות היא בעיה הנדסית פתורה עם בעיית פיזיקה בלתי פתורה צמודה. ההנדסה היא שתי פקודות ומנהרת SSH. הפיזיקה היא שתצפית של 1.8 MB צריכה להגיע ל-GPU במדינה אחרת ולחזור לפני שהזרוע נגמרת מפעולות. בצע את החישובים לפני השכרת כל דבר, בחר משימה הסובלת תצפית מיושנת, והרחב את אופק הביצוע במקום לקוות שהקישור ישתפר.
אם עדיין לא הקלטתם מערך נתונים, ו- קודמים, ו- מסביר מה המקליט כותב. הרקע נמצא ב- ו-; ה- מקשר כל מספר ביצועים למקור.
Sources
- NVIDIA Isaac-GR00T: מאגר N1.7 וקובץ README (סף הסקה של 16 GB, התקנה, עמוד שדרה Cosmos-Reason2-2B מגודר, אילוץ FFmpeg)
- run_gr00t_server.py: ה-CLI של שרת המדיניות GR00T, ברירות המחדל של ServerConfig (host 0.0.0.0, port 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: תקציב סינכרוני של 33 ms, עצור-וסע, גודל חתיכת פעולה, סטטוס RTC
- המלצת חומרה של Isaac-GR00T: תדירות הסקה לכל GPU ומינימום 10 הרץ
- מדריך פריסה והסקה של 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 עקב דה-סריאליזציה לא בטוחה ב-LeRobot, מושפע עד 0.5.1
- בלאק, גליקר ולוין, ביצוע בזמן אמת של מדיניות זרימה בחלוקת פעולות (חלוקה בזמן אמת)
- תמחור 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