หน้าทดลองใช้ AY-Robots: สามวิธีในการเริ่มต้นโดยไม่ต้องเป็นเจ้าของหุ่นยนต์ รวมถึงการเช่า GPU สำหรับการอนุมานนโยบาย
GR00T N1.7การอนุมานระยะไกลGPU บนคลาวด์LeRobotSO-100ความหน่วง

รัน GR00T Inference โดยไม่ต้องใช้ GPU ในเครื่อง

AY-Robots ResearchAugust 23, 202619 นาทีในการอ่าน

เครื่องหุ่นยนต์ของคุณไม่มี GPU วางเซิร์ฟเวอร์นโยบาย GR00T บน GPU คลาวด์ที่เช่าไว้ สตรีมกลุ่มการกระทำไปยังแขนหุ่นยนต์ และเรียนรู้ว่าเครือข่ายมีค่าใช้จ่ายเท่าไรสำหรับคุณ

Raspberry Pi เพียงพอที่จะขับเคลื่อน SO-100 ผ่านบัสอนุกรมและดึงเฟรมจากกล้อง USB สองตัว แต่ไม่เพียงพอที่จะรันโมเดลที่มีพารามิเตอร์สามพันล้านตัวอย่าง โมเดลวิสัยทัศน์-ภาษา-การกระทำ: README ของ NVIDIA ระบุว่าการอนุมานของ GR00T N1.7 ต้องใช้ GPU หนึ่งตัวที่มี VRAM 16 GB ขึ้นไป หากต้องการดูว่าเช็คพอยต์ GR00T N1.7 ที่ปรับแต่งแล้วของคุณทำงานอย่างไรบนแขนหุ่นยนต์โดยไม่ต้องซื้อการ์ด ให้วางนโยบายบน GPU คลาวด์ที่เช่าไว้ รักษาลูปหุ่นยนต์ไว้บนเครื่องที่มีพอร์ต USB และส่งข้อมูลการสังเกตและส่วนของการกระทำผ่านเครือข่าย

มันใช้งานได้จริง ไม่ฟรี และราคาไม่ได้กระจายอย่างสม่ำเสมอในแต่ละงาน ด้านล่าง: เซิร์ฟเวอร์นโยบายของ NVIDIA เอง, สแต็กอะซิงโครนัสของ lerobot, การคำนวณที่บอกล่วงหน้าว่าอัปลิงก์ของคุณเร็วพอหรือไม่ และเส้นทางแพลตฟอร์ม ทั้งหมดนี้ได้รับการตรวจสอบกับ Isaac-GR00T main branch (N1.7 GA) และ lerobot 0.6.1 ณ วันที่ 23 สิงหาคม 2026

สิ่งที่คุณต้องรู้

  • GR00T N1.7, GR00T N1.5 และ Pi0.5 เป็นโมเดลที่มีพารามิเตอร์ประมาณ 3 พันล้านตัว ไม่มีตัวใดที่สามารถติดตั้งบนคอนโทรลเลอร์หุ่นยนต์ได้หากไม่มี discrete GPU
  • Isaac-GR00T และ lerobot ทั้งคู่มาพร้อมกับการแบ่งแบบไคลเอนต์-เซิร์ฟเวอร์ คุณไม่จำเป็นต้องเขียนส่วนการขนส่งข้อมูลเอง
  • ข้อมูลการสังเกตเป็นส่วนที่ใช้ต้นทุนการส่งข้อมูลมากที่สุด ไม่ใช่การกระทำ: เฟรม RGB ขนาด 640x480 ที่ไม่บีบอัดสองเฟรมมีขนาด 1,843,200 ไบต์ หรือประมาณ 14.7 Mbit ต่อการเรียกหนึ่งครั้ง และทั้งสองสแต็กก็ไม่ได้บีบอัดข้อมูลเหล่านี้
  • AY-Robots ระบุว่าใช้เวลา 20 ถึง 485 ms ต่อขั้นตอนการกระทำขึ้นอยู่กับโมเดล การเดินทางไปกลับทางอินเทอร์เน็ตจะเพิ่มเข้ามาจากเวลานั้น
  • การอนุมานระยะไกลเหมาะสำหรับงานหยิบและวางที่ช้า ไม่ใช่การเคลื่อนไหวตอบสนองที่รวดเร็ว ขอบเขตการดำเนินการที่ยาวนานขึ้นจะช่วยซื้อเวลาและมีผลต่อความสดใหม่ของข้อมูลการสังเกต
  • เซิร์ฟเวอร์ทั้งสองไม่ปลอดภัยบน IP สาธารณะตามที่จัดส่งมา และ lerobot มี RCE ที่ยังไม่ได้รับการแก้ไข ควรใช้การทำ Tunnel

ทำไมนโยบายจึงไม่สามารถติดตั้งบนเครื่องหุ่นยนต์ได้

นโยบายสองในห้าข้อที่ AY-Robots สามารถฝึกได้ทำงานบนการ์ดเวิร์กสเตชัน ส่วนอีกสามข้อไม่ทำงาน The เวลาแฝงของการอนุมาน คอลัมน์ด้านล่างนี้คือต่อขั้นตอนการดำเนินการ และเป็นตัวเลขที่แข่งขันกับการเดินทางไปกลับของเครือข่ายของคุณ

นโยบายพารามิเตอร์การอนุมานต่อขั้นตอนการดำเนินการระดับ GPU สำหรับการฝึกจำนวนตอนขั้นต่ำรูปแบบชุดข้อมูล
GR00T N1.7~3 B, ~40 M trained during fine-tuning152 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, PaliGemma backbone485 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 policies เปรียบเทียบนโยบายที่ฝึกได้ห้าข้อตามพารามิเตอร์ ระดับ GPU เวลาแฝงของการอนุมาน และจำนวนตอนขั้นต่ำ
แถวห้าแถวเดียวกันบน /policies คอลัมน์เวลาแฝงเป็นตัวตัดสินว่านโยบายจะรอดจากการกระโดดของเครือข่ายหรือไม่

อ่านสิ่งนี้เป็นการตัดสินใจ ไม่ใช่เรื่องเล็กน้อย ACT ที่ 20 มิลลิวินาทีต่อขั้นตอนทำงานบนเครื่องหุ่นยนต์และคุณจะไม่ต้องคิดถึงมันอีกเลย Pi0.5 ที่ 485 มิลลิวินาทีใช้เวลาไปหนึ่งในสามของวินาทีก่อนที่แพ็กเก็ตจะออกจากอาคารของคุณ The การเปรียบเทียบนโยบาย และ GR00T N1.7 vs Pi0.5 เพิ่มด้านความแม่นยำ

ACT ไม่มีโมเดลพื้นฐาน

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 request-reply; 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, อินเทอร์เฟซทั้งหมดlocalhost
การยืนยันตัวตนapi_token supported by the class, not passed by the CLIไม่มี
หมดเวลาไคลเอนต์15000 ms (PolicyClient timeout_ms)2 s observation queue timeout
โมเดลการประมวลผลซิงโครนัส: บล็อก จากนั้นประมวลผลส่วนข้อมูลอะซิงโครนัส: ประมวลผลในขณะที่ส่วนข้อมูลถัดไปกำลังคำนวณ

ลำดับการจัดเก็บข้อมูลมีความสำคัญมากกว่าที่เห็น MsgSerializer ของ GR00T MsgSerializer ปฏิเสธเพย์โหลด ndarray ชนิด object-dtype ทั้งสองทิศทาง เนื่องจาก msgpack_numpy จะส่งต่อให้ pickle แทน lerobot ใช้ pickle แทน: policy_server.py เรียกใช้ pickle.loads กับข้อมูลคำขอ robot_client.py ใช้ pickle กับข้อมูลการสังเกตที่ส่งไป สามารถป้องกันได้ใน LAN ที่เชื่อถือได้ แต่ไม่สามารถป้องกันได้เมื่อพอร์ตสามารถเข้าถึงได้จากอินเทอร์เน็ต

เส้นทาง A: เซิร์ฟเวอร์นโยบาย GR00T ของ NVIDIA เอง

นี่คือเส้นทางที่ NVIDIA จัดทำเอกสารสำหรับฮาร์ดแวร์ SO-100 และ SO-101 และเป็นเส้นทางที่ควรใช้หากจุดตรวจสอบของคุณมาจาก examples/finetune.sh พร้อม --embodiment-tag NEW_EMBODIMENT ขั้นตอนเหล่านี้จะเพิ่มสิ่งที่ README ต้นฉบับละเว้นไป: การส่งพอร์ตไปยังหุ่นยนต์โดยไม่เปิดเผยให้ผู้อื่นทราบ

  1. 1
    ติดตั้ง GR00T บนเครื่อง GPU ที่เช่า

    จำเป็นต้องมี Submodules และ git-lfs ต้องมีอยู่ก่อนการโคลน มิฉะนั้นไฟล์ parquet ใน demo_data จะมาถึงในรูปแบบของพอยน์เตอร์ flash-attn และ TensorRT มาพร้อมกับการติดตั้งเริ่มต้น ข้อควรระวังสำหรับอิมเมจพ็อดใหม่: torchcodec 0.8.0 เป็นแบ็กเอนด์วิดีโอที่รองรับเพียงตัวเดียวและโหลด FFmpeg เวอร์ชัน 4 ถึง 7 เท่านั้น Ubuntu 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 ทุกจุด รวมถึงการปรับแต่งของคุณเอง จะโหลด nvidia/Cosmos-Reason2-2B แบบมีเกตในการใช้งานครั้งแรก ขอสิทธิ์เข้าถึงบนหน้าโมเดลและเข้าสู่ระบบบนพ็อด มิฉะนั้นการโหลดจะล้มเหลวพร้อมข้อความ GatedRepoError

    bash
    uv run huggingface-cli login
    # or:  export HF_TOKEN=<your_token>
  3. 3
    เริ่มเซิร์ฟเวอร์นโยบาย

    ชี้ --model-path ไปยังไดเรกทอรีจุดตรวจสอบของคุณ; บนเส้นทางนั้น เซิร์ฟเวอร์จะละเว้น --modality-config-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 ไปยังเครื่องหุ่นยนต์

    ผูกกับ loopback ดังที่กล่าวไว้ข้างต้น และส่งพอร์ตผ่าน SSH หรือเครือข่ายแบบ WireGuard สิ่งนี้จะให้การเข้ารหัสและการยืนยันตัวตนที่ ZeroMQ socket ไม่มีให้ โดยใช้เวลาประมาณหนึ่งมิลลิวินาที

    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 checkpoint ได้ด้วย

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) และค่าที่ระบุในเอกสารกับค่าที่จัดส่งมาไม่ตรงกัน

พารามิเตอร์ค่าในโค้ด lerobot 0.6.1หน้าที่หมายเหตุ
actions_per_chunkไม่มีค่าเริ่มต้น, จำเป็นจำนวนการกระทำที่ส่งคืนต่อการเรียกตารางในเอกสารระบุ 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 เก่า + 0.7 ใหม่; latest_only, average และ conservative ก็มีให้ใช้งาน. Registry คือ AGGREGATE_FUNCTIONS ใน configs.py ไม่ใช่ robot_client.py ตามที่เอกสารอ้าง
เซิร์ฟเวอร์นโยบาย lerobot มีช่องโหว่ RCE ที่ยังไม่ได้รับการแก้ไข

CVE-2026-25874 คือการเรียกใช้โค้ดจากระยะไกลโดยไม่ได้รับการยืนยันตัวตนในไปป์ไลน์การอนุมานแบบอะซิงโครนัสของ lerobot: pickle.loads() บนข้อมูลที่ได้รับผ่านช่อง gRPC ที่ไม่ได้รับการยืนยันตัวตนและไม่มี TLS ซึ่งสามารถเข้าถึงได้ผ่านการเรียกใช้ SendPolicyInstructions, SendObservations และ GetActions เหล่านี้ CWE-502, CVSS 3.1 คะแนนพื้นฐาน 9.8 จาก NVD, คะแนนพื้นฐาน 4.0 จาก 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's eval_so100.py ระบุสิ่งที่ส่งผ่านสาย: อาร์เรย์สองชุดขนาด (480, 640, 3) ในรูปแบบ uint8, ค่า float ของข้อต่อหกค่า, และสตริงภาษา นั่นคือ 921,600 ไบต์ต่อเฟรม, 1,843,200 ไบต์สำหรับกล้องสองตัว, ประมาณ 14.7 Mbit, และไม่มีสแต็กใดบีบอัดด้วย JPEG ส่วนข้อมูลที่ส่งกลับมาคือค่า float 6 ค่าจำนวนหลายสิบขั้นตอน การอัปโหลดของคุณเป็นตัวตัดสินทุกอย่าง ไม่ใช่การดาวน์โหลดของคุณ

แบนด์วิดท์อัปโหลดเวลาที่ใช้ในการส่งข้อมูลการสังเกตการณ์หนึ่งครั้ง (14.7 Mbit)ผลลัพธ์สำหรับแขนกล 30 FPS
10 Mbit/s, typical home upload~1.47 sใช้งานไม่ได้ แขนกลจะหยุดระหว่างแต่ละส่วนข้อมูล
25 Mbit/s~0.59 sใช้ได้เฉพาะงานหยิบวางที่ช้า และมีช่วงเวลาการทำงานที่ยาวนาน
50 Mbit/s~0.29 sใช้งานได้สำหรับงานที่ต้องใช้ความละเอียด
100 Mbit/s~0.15 sดีสำหรับงานหยิบวาง เห็นได้ชัดเจนในการเคลื่อนไหวที่รวดเร็ว
1 Gbit/s fibre or datacentre~0.015 sโมเดลจะกลายเป็นคอขวดแทน

งบประมาณที่คุณต้องคำนึงถึง

ไคลเอนต์ GR00T SO-100 เป็นแบบซิงโครนัส: โดยจะเรียกใช้ policy.get_action(obs), ดำเนินการ action_horizon ขั้นตอนแรกของส่วนข้อมูลที่ 30 FPS จากนั้นจึงเรียกใช้อีกครั้ง ขนาดส่วนข้อมูลและขอบเขตเป็นตัวเลขที่แตกต่างกัน: คู่มือการปรับใช้ของ NVIDIA แนะนำขนาดส่วนข้อมูลการดำเนินการที่ 16 อย่างน้อย 32 เมื่อรวมกับการแบ่งส่วนข้อมูลแบบเรียลไทม์ ในขณะที่ eval_so100.py มาพร้อมกับขอบเขตการดำเนินการที่ 8 แปดขั้นตอนที่ 30 FPS คือการเคลื่อนไหว 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 Mbit/s, เวลาไปกลับ 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 แบบ end-to-end ที่ 4 ขั้นตอนการลดสัญญาณรบกวนด้วยกล้องหนึ่งตัว บน H100 80GB HBM3: 85.8 ms (11.7 Hz) ใน PyTorch eager, 48.6 ms (20.6 Hz) ด้วย torch.compile, 27.9 ms (35.9 Hz) ด้วย TensorRT full pipeline L40 ในโหมด eager ใช้เวลา 128.3 ms (7.8 Hz) NVIDIA ระบุว่า 10 Hz เป็นค่าต่ำสุดที่แนะนำสำหรับการจัดการทั่วไป และต่ำกว่า 10 Hz เหมาะสำหรับงานที่ช้าและไม่ตอบสนองเท่านั้น อัตราเหล่านี้คืออัตราการ วางแผนใหม่: นโยบาย 10 Hz ยังคงสามารถขับเคลื่อนแขน 30 FPS ผ่านการแบ่งส่วนข้อมูลการดำเนินการได้ กล้องตัวที่สองจะทำให้คุณไปผิดทาง

วัดก่อนเชื่อ

ทุกตัวเลขข้างต้นเป็นเพียงการคาดการณ์ สี่คำสั่งต่อไปนี้จะเปลี่ยนการคาดการณ์ให้เป็นการวัดผลจริง ซึ่งควรดำเนินการก่อนที่จะใช้เวลา pod-hour ไปกับงานที่ไม่สามารถทำสำเร็จได้

  1. 1
    รับค่า round trip ดิบ

    ทดสอบกับ pod โดยตรง ไม่ใช่ CDN สังเกตค่าเบี่ยงเบนให้ใกล้เคียงกับค่าเฉลี่ย: การกระตุกของแขนหุ่นยนต์เกิดจาก jitter ไม่ใช่ค่า latency เฉลี่ย

    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
    อ่านบันทึก latency ของไคลเอนต์เอง

    ไคลเอนต์หุ่นยนต์ lerobot จะบันทึกค่า latency จากเซิร์ฟเวอร์ไปยังไคลเอนต์และเวลา deserialization สำหรับแต่ละ chunk ในเส้นทาง 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 ถูกเช่าเป็นรายชั่วโมง ดังนั้น Checkpoint ที่ล้มเหลวมีค่าใช้จ่ายเพียงไม่กี่ดอลลาร์
  • ฝั่งหุ่นยนต์ยังคงมีขนาดเล็ก: ไดรเวอร์ lerobot, กล้องสองตัว, พอร์ตอนุกรม และคุณสามารถสลับ Checkpoint ได้โดยไม่ต้องแตะต้องมัน
ข้อจำกัด
  • ข้อมูลการสังเกตที่ไม่ได้บีบอัดเป็นต้นทุนหลักในการส่งข้อมูล และการอัปโหลดผ่านอินเทอร์เน็ตบ้านเป็นข้อจำกัดที่สำคัญ
  • Jitter สร้างปัญหามากกว่า Latency: การเชื่อมต่อที่มีค่าเฉลี่ย 40 ms แต่มีค่าสูงสุดถึง 300 ms จะทำให้เกิดการสะดุด ในขณะที่การเชื่อมต่อที่เสถียร 120 ms จะไม่เป็นเช่นนั้น
  • งานที่ต้องตอบสนองอย่างรวดเร็วไม่สามารถทำได้ในการสื่อสารแบบ Round Trip ไม่ว่าจะในระยะเวลาใด
  • เซิร์ฟเวอร์ทั้งสองส่งข้อมูลโดยไม่มีการยืนยันตัวตนในรูปแบบ CLI ดังนั้นคุณต้องจัดการเรื่องการทำ Tunnelling เอง
  • การเชื่อมต่อที่ขาดหายไปกลางคันจะทำให้แขนหุ่นยนต์ค้างอยู่ในสถานะการกระทำที่ล้าสมัย คุณต้องเพิ่ม Watchdog ที่ฝั่งหุ่นยนต์เอง
งานใช้งานได้ผ่านอินเทอร์เน็ตสาธารณะหรือไม่?เหตุผล
หยิบวัตถุที่อยู่นิ่ง วางลงในถังใช่ไม่มีอะไรเคลื่อนไหวระหว่างการสังเกตและการกระทำ
วางบล็อกซ้อนกันด้วยความเร็วที่ตั้งใจใช่ ที่ action_horizon 16 หรือมากกว่าข้อผิดพลาดสะสมช้าพอที่จะแก้ไขได้ใน Chunk ถัดไป
เปิดลิ้นชัก ใส่สิ่งของโดยปกติมีการสัมผัสมากแต่ช้า ระวังการหยุดและไปเมื่อมีการสัมผัส
ติดตามวัตถุที่กำลังเคลื่อนที่ไม่นโยบายจะทำงานบนข้อมูลการสังเกตที่เก่าไปแล้ว 300 ms ถึง 1 วินาที
จับ, ทรงตัว, หรือกู้คืนจากการลื่นไม่ช่วงเวลาในการแก้ไขสั้นกว่าหนึ่ง Round Trip
วงจรปิดแบบซิงโครนัส 30 Hzไม่งบประมาณคือ 33 ms แบบ End-to-End แม้แต่ LAN ก็ยังทำได้ยาก

หากการรันระยะไกลสะดุดที่จุดเดียวกันในทุกๆ Episode เครือข่ายอาจไม่ใช่สาเหตุ นโยบายที่ลังเลที่มุมข้อต่อเดียวกันทุกครั้งมักเป็นปัญหาข้อมูล ดูที่ หน้าโหมดความล้มเหลว, โดยเฉพาะ นโยบายที่ทำงานได้ในบางการตั้งค่าเท่านั้น และ Loss ลดลงแต่นโยบายไม่ทำงาน.

การทำด้วยตัวเองเทียบกับการทำบน AY-Robots

  1. เช่า GPU ในตลาดสปอตและรอ VRAM ที่เพียงพอในราคาที่คุณต้องการ
  2. ติดตั้ง CUDA, uv, ffmpeg torchcodec ที่รองรับ และ GR00T stack พร้อม submodules
  3. ขอสิทธิ์เข้าถึงแบ็คโบน `nvidia/Cosmos-Reason2-2B` แบบ gated และใส่โทเค็นลงใน pod
  4. ดึง เช็คพอยต์ ของคุณไปยัง pod
  5. เริ่มเซิร์ฟเวอร์บน loopback จากนั้นสร้าง SSH tunnel จากเครื่องหุ่นยนต์
  6. ติดตั้งสภาพแวดล้อมที่สองบนเครื่องหุ่นยนต์สำหรับไคลเอนต์และไดรเวอร์
  7. จับคู่คีย์กล้อง ชื่อข้อต่อ และคำสั่งภาษาให้ตรงกับสิ่งที่เช็คพอยต์เห็น
  8. เฝ้าดู pod. A100 ที่ถูกลืมทำงานข้ามคืนมีค่าใช้จ่ายมากกว่าการทดลอง
Pod ที่ไม่ได้ใช้งานคือต้นทุนที่แท้จริง

ค่าใช้จ่าย GPU ไม่ได้หยุดลงเมื่อหุ่นยนต์หยุดทำงาน เงินส่วนใหญ่ที่สูญเสียไปกับการอนุมานระยะไกลมาจากเซิร์ฟเวอร์ที่ยังคงทำงานอยู่หลังจากทุกคนจากไป ตั้งนาฬิกาปลุก หรือตั้งค่าให้ยุบเลิกอัตโนมัติ

หน้า AY-Robots MCP server ที่แสดงรายการการดำเนินการแพลตฟอร์มที่เปิดเผยเป็นเครื่องมือสำหรับ AI agents
หน้า MCP: การจัดเตรียมและการดำเนินการอนุมานที่เปิดเผยเป็นเครื่องมือที่ agent สามารถเรียกใช้ได้

ค่าใช้จ่ายของการอนุมานระยะไกล

มีสองตัวเลขที่สำคัญ: อัตราค่าบริการรายชั่วโมงของการ์ด และระยะเวลาที่คุณปล่อยให้มันทำงาน ตัวเลขแรกมีการเผยแพร่แล้ว; ส่วนตัวเลขที่สองมักทำให้คนประหลาดใจ

การ์ดRunpod community cloudRunpod secure cloudเหมาะสมสำหรับ
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 Hz eager ของ NVIDIA สำหรับ H100 80GB HBM3
L40S 48 GB0.79 USD/h0.99 USD/hสำหรับการอนุมานเท่านั้น สูงกว่าขีดจำกัด 16 GB
RTX 4090 24 GB0.34 USD/h0.74 USD/hSmolVLA, ACT

อัตราเหล่านี้อ่านจากหน้าการกำหนดราคาของ Runpod เมื่อวันที่ 23 สิงหาคม 2026 และตลาดแบบสปอตมีการเปลี่ยนแปลง AY-Robots เสนอราคาสำหรับการรันทั้งหมดแทน: 3 ถึง 6 ชั่วโมงที่ 1.20 ถึง 2.00 USD ต่อชั่วโมงสำหรับระดับ A100 หรือ H100 ประมาณ 4 ถึง 12 USD สำหรับการรัน GR00T หรือ Pi0.5; 2 ถึง 5 ชั่วโมงที่ 0.30 ถึง 0.60 USD ต่อชั่วโมงสำหรับระดับ 24 GB, 1 ถึง 3 USD สำหรับ SmolVLA หรือ ACT เซสชันการอนุมานจะคุ้มค่ากว่าการรันการฝึกอบรมก็ต่อเมื่อคุณหยุดมัน ซึ่งเป็นหน้าที่ของ idle watchdog ดูเอกสารการเรียกเก็บเงิน และ หน้าการกำหนดราคา.

ตารางค่าใช้จ่ายของ AY-Robots ที่แสดงว่าแต่ละนโยบายต้องการ GPU ใด, เวลาและราคาการรันโดยทั่วไป, และจำนวนตอนก่อนที่นโยบายจะใช้งานได้จริง
ตารางค่าใช้จ่ายบน /try: การ์ดที่แต่ละโมเดลต้องการและค่าใช้จ่ายโดยทั่วไปของการรัน

หากคุณไม่ต้องการให้เครือข่ายอยู่ในวงจร

การอนุมานระยะไกลช่วยแก้ปัญหาฮาร์ดแวร์และสร้างปัญหาความหน่วง บางครั้งคำตอบที่ดีกว่าคือการใช้นโยบายที่เหมาะสมกับฮาร์ดแวร์ที่คุณมี

  • ACT, มีพารามิเตอร์ประมาณ 80 ล้านตัว และใช้เวลา 20 มิลลิวินาทีต่อขั้นตอนการดำเนินการ, อย่างน้อย 50 episodes, ใช้การ์ด 24 GB ใดก็ได้ ในการตั้งค่าแบบงานเดียวซ้ำๆ มักจะเอาชนะโมเดล 3 B ระยะไกลได้ เพราะไม่ต้องรอแพ็กเก็ต
  • SmolVLA, มีพารามิเตอร์ประมาณ 450 ล้านตัว และใช้เวลา 245 มิลลิวินาทีต่อขั้นตอนการดำเนินการ, อย่างน้อย 30 episodes มันยังคงรักษาการปรับสภาพภาษาที่ ACT ขาดไป และเอกสารของ lerobot ระบุว่าใช้หน่วยความจำประมาณ 2 GB ในเวลาอนุมาน เทียบกับประมาณ 14 GB สำหรับ PI0
  • ACT vs GR00T N1.7 สำหรับครึ่งหนึ่งของการแลกเปลี่ยนที่เน้นความแม่นยำ

นอกจากนี้ยังมีทางสายกลาง: ฝึกฝนในคลาวด์ ประเมินผลในเครื่อง ต้องการการ์ด 80 GB และไม่สนใจเรื่องความหน่วง ดังนั้น จากระยะไกลเป็นสิ่งที่ไม่มีข้อโต้แย้ง มีเพียงลูปการประเมินผลเท่านั้นที่มีข้อจำกัดด้านเวลาจริง; และ ครอบคลุมส่วนนั้น

ยังไม่มีแขนกลบนโต๊ะใช่ไหม?

ควบคุม SO-100 จริงในเบราว์เซอร์โดยไม่ต้องลงทะเบียน เปรียบเทียบนโยบายที่ฝึกได้ห้าแบบพร้อมตัวเลขความหน่วงจริง หรือเช่า GPU แล้วฝึกฝนหนึ่งในนั้น มีสามวิธีในการเริ่มต้น โดยไม่จำเป็นต้องมีฮาร์ดแวร์ที่คุณไม่ได้เป็นเจ้าของ

ลองใช้โดยไม่ต้องมีฮาร์ดแวร์

คำถามที่พบบ่อย

ฉันสามารถรัน GR00T N1.7 บน Raspberry Pi ได้หรือไม่ หาก GPU อยู่ระยะไกล?

ได้ นั่นคือวัตถุประสงค์ของการแยกส่วนไคลเอนต์-เซิร์ฟเวอร์ Pi จะรันไดรเวอร์ lerobot, อ่านกล้องสองตัวและบัสอนุกรม, และส่งข้อมูลการสังเกตการณ์ไปยังเซิร์ฟเวอร์นโยบาย; มันไม่เคยโหลดโมเดล ข้อจำกัดจะย้ายจาก VRAM ไปยังแบนด์วิดท์อัปโหลด: เฟรม RGB ขนาด 640x480 ที่ไม่บีบอัดสองเฟรมมีขนาด 1,843,200 ไบต์ต่อการเรียก และไม่มีสแต็กใดบีบอัดข้อมูลเหล่านี้

เครือข่ายเพิ่มความหน่วงเท่าใดกันแน่?

เวลาไปกลับบวกกับเวลาถ่ายโอนข้อมูลการสังเกตการณ์ เวลาถ่ายโอนคือ 14.7 Mbit หารด้วยแบนด์วิดท์อัปโหลดของคุณ: ประมาณ 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 แบบ end-to-end ที่ 30 FPS และระบุว่าการจับภาพ, เครือข่าย, การอนุมาน และการประมวลผลภายหลังมักจะเกินกว่านั้นโดยไม่มีอินเทอร์เน็ตเข้ามาเกี่ยวข้อง

เซิร์ฟเวอร์ใช้พอร์ตใดและปลอดภัยที่จะเปิดหรือไม่?

PolicyServer ของ Isaac-GR00T ใช้พอร์ต 5555 ผ่าน ZeroMQ เป็นค่าเริ่มต้น และผูกกับ 0.0.0.0 ใน CLI lerobot ใช้พอร์ต 8080 ผ่าน gRPC เป็นค่าเริ่มต้น และผูกกับ localhost ทั้งสองอย่างไม่ปลอดภัยที่จะเปิดเผย: คลาส GR00T รองรับ api_token แต่ run_gr00t_server.py ไม่เคยส่งค่าใดๆ และ lerobot ใช้ pickle ในการส่งข้อมูลผ่านช่อง gRPC ที่ไม่ปลอดภัย ซึ่งเป็น CVE-2026-25874 ผูกกับ loopback และใช้ SSH tunnel

การอัปเกรด lerobot แก้ไข CVE-2026-25874 ได้หรือไม่?

ยังไม่ถึงวันที่ 23 August 2026 บันทึก CVE ระบุว่า LeRobot ถึงเวอร์ชัน 0.5.1 ได้รับผลกระทบ และ PyPI จัดส่งเวอร์ชัน 0.6.1 แต่ pull request ที่จะลบ pickle ออกจาก async pipeline ยังคงเปิดอยู่ และ policy_server.py บน main ยังคงเรียก pickle.loads บนข้อมูลคำขอ ให้ถือว่าการแยกเครือข่ายเป็นการบรรเทาปัญหา ไม่ใช่การอัปเดตเวอร์ชัน และสมมติว่าไคลเอนต์ฝั่งหุ่นยนต์ก็อยู่ในขอบเขตด้วย

ฉันสามารถใช้ไคลเอนต์ async ของ 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 tunnel ส่วนฟิสิกส์คือข้อมูลการสังเกตการณ์ขนาด 1.8 MB จะต้องไปถึง GPU ในประเทศอื่นและกลับมาก่อนที่แขนจะหมดการกระทำ คำนวณให้ดีก่อนที่จะเช่าอะไร, เลือกงานที่ทนต่อข้อมูลการสังเกตการณ์ที่ล้าสมัยได้, และเพิ่มขอบเขตการดำเนินการแทนที่จะหวังว่าลิงก์จะดีขึ้น

หากคุณยังไม่ได้บันทึกชุดข้อมูล และ มาก่อน และ อธิบายสิ่งที่เครื่องบันทึกเขียนไว้ ข้อมูลพื้นฐานอยู่ใน และ ; เชื่อมโยงตัวเลขเกณฑ์มาตรฐานแต่ละรายการเข้ากับแหล่งที่มา

Sources

Sources

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started