A página de teste da AY-Robots: três maneiras de começar sem possuir um robô, incluindo alugar uma GPU para inferência de políticas
GR00T N1.7Inferência RemotaGPU na NuvemLeRobotSO-100Latência

Executar Inferência GR00T Sem uma GPU Local

AY-Robots ResearchAugust 23, 202619 min de leitura

Sua máquina robótica não possui GPU. Coloque o servidor de políticas GR00T em uma GPU de nuvem alugada, transmita blocos de ações para o braço e descubra exatamente o custo da rede para você.

Uma Raspberry Pi é suficiente para controlar um através de um barramento serial e extrair quadros de duas câmeras USB. Não é suficiente para executar um modelo de três bilhões de parâmetros : o README da NVIDIA indica a inferência do GR00T N1.7 em uma GPU com 16 GB ou mais de VRAM. Para ver o que seu checkpoint faz no braço robótico sem comprar uma placa, coloque a política em uma GPU de nuvem alugada, mantenha o loop do robô na máquina com as portas USB e envie observações e blocos de ação pela rede.

Funciona, não é gratuito, e o preço não é distribuído uniformemente entre as tarefas. Abaixo: o próprio servidor de políticas da NVIDIA, a pilha assíncrona do lerobot, a aritmética que diz antecipadamente se seu uplink é rápido o suficiente e a rota da plataforma. Tudo isso verificado em relação ao branch principal do Isaac-GR00T (N1.7 GA) e lerobot 0.6.1 em 23 de agosto de 2026.

O que você precisa saber

  • GR00T N1.7, GR00T N1.5 e Pi0.5 são modelos de aproximadamente 3 bilhões de parâmetros. Nenhum deles se encaixa em um controlador de robô sem uma GPU discreta.
  • Isaac-GR00T e lerobot ambos fornecem uma divisão cliente-servidor. Você não escreve o transporte.
  • As observações dominam o custo da rede, não as ações: dois quadros RGB 640x480 não compactados são 1.843.200 bytes, cerca de 14.7 Mbit por chamada, e nenhuma das pilhas os compacta.
  • AY-Robots lista de 20 a 485 ms por etapa de ação por modelo. As viagens de ida e volta pela internet se somam a isso.
  • A inferência remota é adequada para tarefas lentas de 'pick-and-place', não para movimentos reativos rápidos. Um horizonte de execução mais longo ganha tempo e custa a frescura da observação.
  • Nenhum dos servidores é seguro em um IP público como fornecido, e o do lerobot contém um RCE não corrigido. Faça um túnel.

Por que a política não caberá na máquina do robô

Duas das cinco políticas que a AY-Robots pode treinar rodam em uma placa de workstation, três não. A coluna abaixo é por etapa de ação, e esse é o número que compete com o tempo de ida e volta da sua rede.

PolíticaParâmetrosInferência por etapa de açãoNível de GPU para treinamentoMínimo de episódiosFormato do conjunto de dados
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
A página de políticas da AY-Robots comparando as cinco políticas treináveis por parâmetros, nível de GPU, latência de inferência e mínimo de episódios
As mesmas cinco linhas em /policies. A coluna de latência decide se uma política sobrevive a um salto de rede.

Leia isso como uma decisão, não como curiosidade. a 20 ms por etapa, roda na máquina do robô e você nunca mais pensa nisso. a 485 ms, gastou um terço de segundo antes que um pacote saia do seu edifício. A e adicionam o lado da precisão.

ACT não tem modelo base

GR00T N1.7, GR00T N1.5 e Pi0.5 começam a partir de um checkpoint de fornecedor (nvidia/GR00T-N1.7-3B, nvidia/GR00T-N1.5-3B, lerobot/pi05_base). ACT não existe até que você o treine em sua própria tarefa, então não há nada para servir remotamente até que um trabalho de treinamento tenha sido executado. Veja ACT no SO-100.

As duas pilhas cliente-servidor que já existem

Isaac-GR00T fornece um servidor ZeroMQ de requisição-resposta; lerobot fornece um servidor gRPC construído em torno de inferência assíncrona. Ambos aceitam um GR00T checkpoint. A lista de políticas suportadas pelo lerobot em async_inference/constants.py é act, smolvla, diffusion, tdmpc, vqbet, pi0, pi05 e groot; sua lista de robôs é so100_follower, so101_follower, bi_so_follower e omx_follower.

Isaac-GR00T PolicyServerlerobot async inference
Ponto de entradagr00t/eval/run_gr00t_server.pypython -m lerobot.async_inference.policy_server
TransporteZeroMQ REQ/REPgRPC, add_insecure_port / insecure_channel
Serializaçãomsgpack + msgpack_numpy, allow_pickle=False enforcedpickle.dumps / pickle.loads, marked # nosec
Porta padrão55558080
Bind padrão0.0.0.0, todas as interfaceslocalhost
Autenticaçãoapi_token suportado pela classe, não passado pela CLInenhum
Tempo limite do cliente15000 ms (PolicyClient timeout_ms)2 s de tempo limite da fila de observação
Modelo de execuçãosíncrono: bloqueia, depois executa o chunkassíncrono: executa enquanto o próximo chunk é computado

A linha de serialização importa mais do que parece. O GR00T's MsgSerializer recusa payloads ndarray de tipo de objeto em ambas as direções, porque o msgpack_numpy os passaria para o pickle. O lerobot usa pickle em vez disso: policy_server.py chama pickle.loads nos dados da requisição, robot_client.py serializa a observação que envia. Defensável em uma LAN confiável, indefensável uma vez que a porta é acessível pela internet.

Rota A: Servidor de política GR00T próprio da NVIDIA

Este é o caminho que a NVIDIA documenta para o hardware SO-100 e SO-101, e o que deve ser usado se o seu checkpoint veio de examples/finetune.sh com --embodiment-tag NEW_EMBODIMENT. Os passos adicionam o que o README original omite: levar a porta ao robô sem expô-la a todos os outros.

  1. 1
    Instalar o GR00T na máquina GPU alugada

    Submódulos são necessários, e o git-lfs deve existir antes do clone ou os arquivos parquet em demo_data chegarão como ponteiros. flash-attn e TensorRT vêm com a instalação padrão. A armadilha em uma imagem de pod nova: torchcodec 0.8.0 é o único backend de vídeo suportado e carrega apenas FFmpeg 4 a 7. Ubuntu 25.10 e 26.04 vêm com FFmpeg 8, então o GR00T falha com Could not load libtorchcodec. Instale um FFmpeg abaixo de 8 e coloque suas bibliotecas em 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
    Autenticar-se contra o backbone restrito

    Cada checkpoint GR00T N1.7, incluindo o seu próprio fine-tune, carrega o modelo restrito nvidia/Cosmos-Reason2-2B no primeiro uso. Solicite acesso na página do modelo e faça login no pod, ou o carregamento falhará com um GatedRepoError.

    bash
    uv run huggingface-cli login
    # or:  export HF_TOKEN=<your_token>
  3. 3
    Iniciar o servidor de política

    Aponte --model-path para o seu diretório de checkpoint; nesse caminho, o servidor ignora --modality-config-path, que é lido apenas no caminho de replay. Omita --model-path e passe --dataset-path mais --execution-horizon em vez disso para uma ReplayPolicy que reproduz ações gravadas, a maneira mais barata de provar que a fiação funciona.

    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
    Tunelar a porta 5555 para a máquina do robô

    Vincule ao loopback, como acima, e transporte a porta via SSH ou uma malha estilo WireGuard. Isso fornece a criptografia e autenticação que o socket ZeroMQ não oferece, por cerca de um milissegundo.

    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
    Executar o cliente do robô ao lado dos servos

    O cliente precisa de seu próprio ambiente uv: ele quer os drivers de robô do lerobot, não a pilha de treinamento. eval_so100.py importa so100_follower, so101_follower e koch_follower, então passe o --robot.type que corresponde ao seu braço (o README original usa so101_follower). As chaves da câmera devem corresponder ao treinamento: o adaptador lê exatamente front e wrist, e trocá-las mostra à política a visão errada.

    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"
Dois padrões que podem causar problemas

run_gr00t_server.py usa --host 0.0.0.0 por padrão, vinculando todas as interfaces: em um pod com um IP público, isso é um endpoint de inferência aberto. E a classe PolicyServer aceita um api_token e o valida por requisição, mas run_gr00t_server.py nunca passa um, então o servidor CLI não é autenticado, independentemente da sua configuração. Vincule a 127.0.0.1 e crie um túnel. Um ZMQError: Address already in use significa que a porta 5555 está em uso; passe --port.

Rota B: inferência assíncrona com lerobot

lerobot resolve um problema diferente. Em vez de bloquear o robô enquanto o modelo pensa, o cliente continua processando a fila que já possui enquanto o servidor calcula o próximo chunk. Isso é chunking de ações levado adiante, a pilha assíncrona introduzida com SmolVLA. Funciona também com um checkpoint 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
Servidor de política na GPU, cliente robô na máquina com as portas USB

O servidor inicia vazio: ele não sabe qual política serve até que o primeiro handshake do cliente o informe, o que é conveniente em um pod alugado. Os dois parâmetros que decidem se o braço se move suavemente são actions_per_chunk e chunk_size_threshold (a documentação do lerobot chama o segundo de g, em referência ao artigo SmolVLA), e os valores documentados e os valores fornecidos não concordam.

ParâmetroValor no código lerobot 0.6.1O que fazNota
actions_per_chunksem padrão, obrigatórioAções retornadas por chamadaA tabela da documentação lista 50; o campo da dataclass não tem padrão, então a CLI exige um valor
chunk_size_threshold0.5Taxa de preenchimento da fila na qual ou abaixo da qual o cliente envia uma nova observaçãoA tabela da documentação diz 0.7; o código e o próprio exemplo da documentação dizem 0.5
fps30Taxa de controle do cliente, define environment_dt = 1/fpsDiminua se a fila continuar esvaziando
inference_latency1/30 s (33.3 ms)Latência de inferência alvo no servidorUm alvo, não uma medição
obs_queue_timeout2 sQuanto tempo o servidor espera na fila de observaçãoUm uplink lento aparece aqui primeiro
aggregate_fn_nameweighted_averageComo as regiões de chunk sobrepostas são mescladas0.3 antigo + 0.7 novo; latest_only, average e conservative também são fornecidos. O registro é AGGREGATE_FUNCTIONS em configs.py, não robot_client.py como a documentação afirma
O servidor de políticas lerobot tem um RCE sem patch

CVE-2026-25874 é uma execução remota de código não autenticada no pipeline de inferência assíncrona do lerobot: pickle.loads() em dados recebidos por um canal gRPC não autenticado sem TLS, acessível através das chamadas SendPolicyInstructions, SendObservations e GetActions. CWE-502, pontuação base CVSS 3.1 de 9.8 da NVD, pontuação base 4.0 de 9.3 da CNA atribuída. O registro lista LeRobot até 0.5.1 como afetado e nomeia tanto o servidor de políticas quanto o cliente robô, então a máquina ao lado do seu braço está no escopo. A atualização não é a solução: o registro cita o problema upstream 3047 e o patch, PR 3048, que troca pickle por safetensors mais JSON, e em 23 de agosto de 2026 ambos ainda estão abertos. policy_server.py no main ainda chama pickle.loads em dados de requisição enquanto serve() se liga com add_insecure_port. Ligue ao loopback e nunca faça o encaminhamento de porta 8080.

A aritmética que decide se sua conexão é rápida o suficiente

As pessoas pulam esta parte e depois passam um dia em . Leva dois minutos e é quase sempre decisivo.

O dicionário de observação comentado em eval_so100.py da NVIDIA diz o que vai para o fio: dois arrays de forma (480, 640, 3) em uint8, seis floats de junta, uma string de linguagem. Isso é 921.600 bytes por quadro, 1.843.200 bytes para duas câmeras, cerca de 14.7 Mbit, e nenhuma pilha o compacta em JPEG. O bloco que retorna são algumas dezenas de passos de 6 floats. Seu upload decide tudo, não seu download.

Largura de banda de uploadTempo para enviar uma observação (14.7 Mbit)Veredito para um braço de 30 FPS
10 Mbit/s, upload doméstico típico~1.47 sInutilizável. O braço para entre cada bloco.
25 Mbit/s~0.59 sApenas pick-and-place lento, com um longo horizonte de execução.
50 Mbit/s~0.29 sViável para tarefas deliberadas.
100 Mbit/s~0.15 sBom para pick-and-place, visível em movimento rápido.
Fibra de 1 Gbit/s ou datacenter~0.015 sO modelo se torna o gargalo.

O orçamento que você precisa encaixar

O cliente GR00T SO-100 é síncrono: ele chama policy.get_action(obs), executa os primeiros action_horizon passos do chunk a 30 FPS, então chama novamente. O tamanho do chunk e o horizonte são números diferentes: o guia de implantação da NVIDIA recomenda um tamanho de chunk de ação de 16, pelo menos 32 quando combinado com chunking em tempo real, enquanto eval_so100.py entrega um horizonte de execução de 8. Oito passos a 30 FPS são 267 ms de movimento por chamada, e todo o resto tem que caber nisso.

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
Exemplo prático: uplink de 100 Mbit/s, 30 ms de tempo de ida e volta, GR00T N1.7

Aumentar o horizonte é a solução bruta e não é gratuita: o braço age com base em uma observação que agora está antiga. A solução baseada em princípios é o chunking em tempo real (RTC), que calcula o próximo chunk enquanto o atual está em execução, congela as ações garantidas para serem executadas e preenche o restante; o artigo sobre RTC relata que é robusto a atrasos de inferência sem necessidade de retreinamento. Verifique primeiro a situação disso. A NVIDIA marca o RTC como experimental, uma primitiva de modelo de baixo nível acessível através de action_head.get_action(..., options={"rtc_overlap_steps": ..., "rtc_frozen_steps": ...}), não conectado ao Gr00tPolicy ou ao caminho servidor-cliente, onde options não é usado, sem testes e sem exemplo. Através de um servidor de política, você obtém execução assíncrona, não RTC.

O que o modelo custa antes da rede

A NVIDIA faz benchmarks do GR00T N1.7 de ponta a ponta em 4 etapas de denoising com uma câmera. Em uma H100 80GB HBM3: 85.8 ms (11.7 Hz) em PyTorch eager, 48.6 ms (20.6 Hz) com torch.compile, 27.9 ms (35.9 Hz) com o pipeline completo TensorRT. Uma L40 em modo eager leva 128.3 ms (7.8 Hz). A NVIDIA considera 10 Hz o mínimo recomendado para manipulação típica, e abaixo de 10 Hz adequado apenas para tarefas lentas e não reativas. Essas são taxas de replanejamento: uma política de 10 Hz ainda pode acionar um braço de 30 FPS através do chunking de ações. Uma segunda câmera o leva na direção errada.

Meça antes de confiar

Cada número acima é uma previsão. Quatro comandos o transformam em uma medição, que vale a pena executar antes de dedicar uma hora de pod a uma tarefa que nunca funcionaria.

  1. 1
    Obtenha o tempo de ida e volta bruto

    Contra o pod, não uma CDN. Observe o desvio tão de perto quanto a média: o jitter faz um braço gaguejar, não a latência média.

    bash
    ping -c 50 <pod-host>
    # the mdev column is the number that predicts stutter
  2. 2
    Meça o uplink que você tem, não o que você paga

    O upload residencial é geralmente uma fração do download, e é o número na tabela de largura de banda acima.

    bash
    # on the pod
    iperf3 -s
    
    # on the robot machine, -R omitted so this measures upload
    iperf3 -c <pod-host> -t 30
  3. 3
    Leia o log de latência do próprio cliente

    O cliente de robô lerobot registra a latência do servidor para o cliente e o tempo de desserialização para cada chunk. Na rota B, você não precisa de ferramentas externas.

    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
    Observe a fila de ações esvaziar

    Passe --debug_visualize_queue_size=True e o cliente plotará o tamanho da fila em tempo de execução. Se ele atingir zero repetidamente, você está sem orçamento: diminua o fps, aumente actions_per_chunk ou aumente chunk_size_threshold para que as observações sejam enviadas com mais frequência.

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

Para que a inferência remota realmente serve

Política em uma GPU alugada, braço na sua mesa
Vantagens
  • Você pode avaliar uma política de 3 bilhões de parâmetros em hardware real sem possuir uma placa que custe mais do que o braço.
  • A GPU é alugada por hora, então um checkpoint falho custa alguns dólares.
  • O lado do robô permanece pequeno: drivers lerobot, duas câmeras, uma porta serial, e você troca checkpoints sem tocá-lo.
Compromissos
  • Observações não compactadas dominam o custo de transmissão, e o upload residencial é a restrição limitante.
  • O jitter prejudica mais do que a latência: um link com média de 40 ms e picos de 300 ms engasga onde um link estável de 120 ms não.
  • Tarefas reativas rápidas não sobrevivem à viagem de ida e volta em qualquer horizonte.
  • Ambos os servidores são enviados sem autenticação em formato CLI, então o trabalho de tunelamento é seu.
  • Uma conexão perdida no meio de um chunk deixa o braço executando uma ação obsoleta. Adicione seu próprio watchdog no lado do robô.
TarefaFunciona pela internet pública?Por quê
Pegar um objeto estático, colocá-lo em uma caixaSimNada se move entre a observação e a ação.
Empilhar blocos em um ritmo deliberadoSim, com action_horizon 16 ou maisErros acumulam-se lentamente o suficiente para serem corrigidos no próximo chunk.
Abrir uma gaveta, inserir um objetoGeralmenteRico em contato, mas lento. Observe paradas e arranques no contato.
Seguir um objeto em movimentoNãoA política age com base em uma observação de 300 ms a 1 s de idade.
Pegar, equilibrar ou recuperar de um escorregãoNãoA janela de correção é menor do que uma viagem de ida e volta.
Um loop fechado síncrono de 30 HzNãoO orçamento é de 33 ms de ponta a ponta. Mesmo uma LAN tem dificuldades.

Se uma execução remota engasga no mesmo ponto em cada episódio, a rede provavelmente não é a causa. Uma política que hesita no mesmo ângulo de junta toda vez é geralmente um problema de dados; veja as páginas de modos de falha, em particular uma política que só funciona em uma configuração e a perda diminui, mas a política não faz nada.

Fazer você mesmo vs fazer na AY-Robots

  1. Alugue uma GPU em um mercado spot e espere por VRAM suficiente a um preço que lhe agrade.
  2. Instale CUDA, uv, um torchcodec ffmpeg aceitável e a pilha GR00T com submódulos.
  3. Solicite acesso ao backbone restrito `nvidia/Cosmos-Reason2-2B` e coloque um token no pod.
  4. Puxe seu checkpoint para o pod.
  5. Inicie o servidor em loopback e, em seguida, construa um túnel SSH a partir da máquina do robô.
  6. Instale um segundo ambiente na máquina do robô para o cliente e os drivers.
  7. Combine as chaves da câmera, os nomes das juntas e a instrução de linguagem com o que o checkpoint viu.
  8. Monitore o pod. Uma A100 esquecida rodando durante a noite custa mais do que o experimento.
O pod ocioso é o custo real

A conta da GPU não para quando o robô para. A maior parte do dinheiro perdido em inferência remota vai para um servidor que permaneceu ativo depois que todos se foram. Defina um alarme ou automatize a desativação.

A página do servidor MCP da AY-Robots listando as operações da plataforma expostas como ferramentas para agentes de IA
A página MCP: operações de provisionamento e inferência expostas como ferramentas que um agente pode chamar.

Quanto custa uma sessão de inferência remota

Dois números importam: a taxa horária da placa e por quanto tempo você a deixa funcionando. O primeiro é publicado; o segundo surpreende as pessoas.

PlacaRunpod community cloudRunpod secure cloudAdequado para
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/hO mesmo, um pouco mais rápido
H100 PCIe 80 GB1.99 USD/h2.89 USD/hNível mais rápido; o valor de 11,7 Hz da NVIDIA é para uma H100 80GB HBM3
L40S 48 GB0.79 USD/h0.99 USD/hApenas inferência, acima do limite de 16 GB
RTX 4090 24 GB0.34 USD/h0.74 USD/hSmolVLA, ACT

Essas taxas foram lidas na página de preços da Runpod em 23 de agosto de 2026, e os mercados spot são voláteis. A AY-Robots, em vez disso, cota uma execução completa: 3 a 6 horas a 1,20 a 2,00 USD por hora no nível A100 ou H100, cerca de 4 a 12 USD para uma execução GR00T ou Pi0.5; 2 a 5 horas a 0,30 a 0,60 USD por hora no nível de 24 GB, 1 a 3 USD para SmolVLA ou ACT. Uma sessão de inferência supera uma execução de treinamento em custo apenas se você a interromper, para o que serve o watchdog de inatividade. Veja os documentos de faturamento e a página de preços.

A tabela de custos da AY-Robots mostrando qual GPU cada política precisa, tempo de execução e preço típicos, e episódios antes que uma política seja útil
A tabela de custos em /try: qual placa cada modelo precisa e quanto uma execução geralmente custa.

Se você preferir não ter a rede no circuito

A inferência remota resolve um problema de hardware e cria um problema de latência. Às vezes, a melhor resposta é uma política que se adapta ao hardware que você possui.

  • ACT, aproximadamente 80 M parâmetros e 20 ms por passo de ação, 50 episódios mínimo, qualquer placa de 24 GB. Em uma configuração de tarefa única repetitiva, frequentemente supera um modelo remoto de 3 B, porque nunca espera por um pacote.
  • SmolVLA, aproximadamente 450 M parâmetros e 245 ms por passo de ação, 30 episódios mínimo. Mantém o condicionamento de linguagem que falta ao ACT, e a documentação do lerobot o coloca em cerca de 2 GB no tempo de inferência contra aproximadamente 14 GB para PI0.
  • ACT vs GR00T N1.7 para a metade da precisão da troca.

Há também um caminho intermediário: treinar na nuvem, avaliar localmente. Fine-tuning precisa da placa de 80 GB e não se importa com a latência, então treinar GR00T N1.7 em um SO-100 remotamente é incontestável. Apenas o loop de avaliação tem uma restrição de tempo real; a documentação de treinamento e a matriz de modelo e braço cobrem essa metade.

Ainda sem braço na mesa?

Controle um SO-100 real no navegador sem necessidade de cadastro, compare as cinco políticas treináveis com seus números de latência reais, ou alugue uma GPU e treine uma. Três maneiras de começar, nenhuma exigindo hardware que você não possui.

Experimente sem hardware

Perguntas frequentes

Posso executar o GR00T N1.7 num Raspberry Pi se a GPU for remota?

Sim, é para isso que serve a divisão cliente-servidor. O Pi executa os drivers lerobot, lê duas câmaras e um barramento serial, e envia observações para o servidor de política; ele nunca carrega o modelo. A restrição passa da VRAM para a largura de banda de upload: dois frames RGB 640x480 não comprimidos são 1.843.200 bytes por chamada, e nenhuma das pilhas os comprime.

Quanta latência a rede realmente adiciona?

Tempo de ida e volta mais tempo de transferência da observação. O tempo de transferência é de 14.7 Mbit dividido pela sua largura de banda de upload: aproximadamente 147 ms numa ligação de 100 Mbit/s, 1.47 s numa ligação de 10 Mbit/s. Ambos se somam ao tempo de inferência próprio do modelo, que a AY-Robots lista como 152 ms para GR00T N1.7 e 485 ms para Pi0.5. Meça com ping e iperf3 contra o pod, não um servidor de teste de velocidade.

A inferência remota é boa o suficiente para uma tarefa real?

Para tarefas lentas e deliberadas de 'pick-and-place', sim. Para qualquer coisa reativa, não. O guia de implementação da NVIDIA estabelece o requisito de passo único síncrono em aproximadamente 33 ms de ponta a ponta a 30 FPS, e observa que a captura, rede, inferência e pós-processamento rotineiramente excedem isso sem envolvimento da internet.

Que porta os servidores usam e é seguro abri-la?

O PolicyServer do Isaac-GR00T usa a porta 5555 por padrão via ZeroMQ e vincula 0.0.0.0 na sua CLI. O lerobot usa a porta 8080 por padrão via gRPC e vincula localhost. Nenhum é seguro para expor: a classe GR00T suporta um api_token, mas run_gr00t_server.py nunca passa um, e o lerobot serializa dados via um canal gRPC inseguro, o que é CVE-2026-25874. Vincule ao loopback e use um túnel SSH.

A atualização do lerobot corrige o CVE-2026-25874?

Não a partir de 23 de agosto de 2026. O registo CVE lista LeRobot até 0.5.1 como afetado e o PyPI distribui 0.6.1, mas o pull request que removeria o pickle do pipeline assíncrono ainda está aberto, e policy_server.py no main ainda chama pickle.loads nos dados da requisição. Trate o isolamento de rede como a mitigação, não uma atualização de versão, e assuma que o cliente do lado do robô também está no escopo.

Posso usar o cliente assíncrono do lerobot com um checkpoint GR00T?

Sim. O lerobot 0.6.1 lista groot em SUPPORTED_POLICIES juntamente com act, smolvla, diffusion, tdmpc, vqbet, pi0 e pi05, e tanto so100_follower quanto so101_follower estão em SUPPORTED_ROBOTS. Passe --policy_type=groot e aponte --pretrained_name_or_path para o seu checkpoint. Você obtém execução assíncrona, que o exemplo GR00T SO-100 não implementa, ao custo do transporte pickle.

A versão resumida

A inferência remota para uma política de 3 B política é um problema de engenharia resolvido com um problema de física não resolvido anexado. A engenharia são dois comandos e um túnel SSH. A física é que uma observação de 1.8 MB tem que chegar a uma GPU noutro país e voltar antes que o braço fique sem ações. Faça as contas antes de alugar qualquer coisa, escolha uma tarefa que tolere uma observação desatualizada e aumente o horizonte de execução em vez de esperar que a ligação melhore.

Se ainda não gravou um conjunto de dados, grave seu primeiro conjunto de dados e o guia de configuração do SO-100 vêm primeiro, e a entrada do formato de conjunto de dados LeRobot explica o que o gravador escreve. O contexto está em modelos de visão-linguagem-ação e o trabalho de política de flow-matching; a entrada da arena liga cada número de benchmark a uma fonte.

Sources

Sources

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started