
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ítica | Parâmetros | Inferência por etapa de ação | Nível de GPU para treinamento | Mínimo de episódios | Formato do conjunto de dados |
|---|---|---|---|---|---|
| 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 |

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.
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 PolicyServer | lerobot async inference | |
|---|---|---|
| Ponto de entrada | gr00t/eval/run_gr00t_server.py | python -m lerobot.async_inference.policy_server |
| Transporte | ZeroMQ REQ/REP | gRPC, add_insecure_port / insecure_channel |
| Serialização | msgpack + msgpack_numpy, allow_pickle=False enforced | pickle.dumps / pickle.loads, marked # nosec |
| Porta padrão | 5555 | 8080 |
| Bind padrão | 0.0.0.0, todas as interfaces | localhost |
| Autenticação | api_token suportado pela classe, não passado pela CLI | nenhum |
| Tempo limite do cliente | 15000 ms (PolicyClient timeout_ms) | 2 s de tempo limite da fila de observação |
| Modelo de execução | síncrono: bloqueia, depois executa o chunk | assí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.
- 1Instalar 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_datachegarão como ponteiros. flash-attn e TensorRT vêm com a instalação padrão. A armadilha em uma imagem de pod nova:torchcodec0.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 comCould not load libtorchcodec. Instale um FFmpeg abaixo de 8 e coloque suas bibliotecas emLD_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')" - 2Autenticar-se contra o backbone restrito
Cada checkpoint GR00T N1.7, incluindo o seu próprio fine-tune, carrega o modelo restrito
nvidia/Cosmos-Reason2-2Bno primeiro uso. Solicite acesso na página do modelo e faça login no pod, ou o carregamento falhará com umGatedRepoError.bashuv run huggingface-cli login # or: export HF_TOKEN=<your_token> - 3Iniciar o servidor de política
Aponte
--model-pathpara o seu diretório de checkpoint; nesse caminho, o servidor ignora--modality-config-path, que é lido apenas no caminho de replay. Omita--model-pathe passe--dataset-pathmais--execution-horizonem vez disso para uma ReplayPolicy que reproduz ações gravadas, a maneira mais barata de provar que a fiação funciona.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 - 4Tunelar 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 - 5Executar 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.pyimporta so100_follower, so101_follower e koch_follower, então passe o--robot.typeque corresponde ao seu braço (o README original usa so101_follower). As chaves da câmera devem corresponder ao treinamento: o adaptador lê exatamentefrontewrist, e trocá-las mostra à política a visão errada.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 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.
# 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=TrueO 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âmetro | Valor no código lerobot 0.6.1 | O que faz | Nota |
|---|---|---|---|
| actions_per_chunk | sem padrão, obrigatório | Ações retornadas por chamada | A tabela da documentação lista 50; o campo da dataclass não tem padrão, então a CLI exige um valor |
| chunk_size_threshold | 0.5 | Taxa de preenchimento da fila na qual ou abaixo da qual o cliente envia uma nova observação | A tabela da documentação diz 0.7; o código e o próprio exemplo da documentação dizem 0.5 |
| fps | 30 | Taxa de controle do cliente, define environment_dt = 1/fps | Diminua se a fila continuar esvaziando |
| inference_latency | 1/30 s (33.3 ms) | Latência de inferência alvo no servidor | Um alvo, não uma medição |
| obs_queue_timeout | 2 s | Quanto tempo o servidor espera na fila de observação | Um uplink lento aparece aqui primeiro |
| aggregate_fn_name | weighted_average | Como as regiões de chunk sobrepostas são mescladas | 0.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 |
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 upload | Tempo 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 s | Inutilizável. O braço para entre cada bloco. |
| 25 Mbit/s | ~0.59 s | Apenas pick-and-place lento, com um longo horizonte de execução. |
| 50 Mbit/s | ~0.29 s | Viável para tarefas deliberadas. |
| 100 Mbit/s | ~0.15 s | Bom para pick-and-place, visível em movimento rápido. |
| Fibra de 1 Gbit/s ou datacenter | ~0.015 s | O 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.
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 staleAumentar 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.
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.
- 1Obtenha 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.
bashping -c 50 <pod-host> # the mdev column is the number that predicts stutter - 2Meç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 - 3Leia 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.
textReceived action chunk for step #240 | Latest action: #232 | Incoming actions: 240:289 | Network latency (server->client): 187.44ms | Deserialization time: 3.10ms - 4Observe a fila de ações esvaziar
Passe
--debug_visualize_queue_size=Truee 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.bashpython -m lerobot.async_inference.robot_client \ ... \ --debug_visualize_queue_size=True
Para que a inferência remota realmente serve
- 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.
- 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ô.
| Tarefa | Funciona pela internet pública? | Por quê |
|---|---|---|
| Pegar um objeto estático, colocá-lo em uma caixa | Sim | Nada se move entre a observação e a ação. |
| Empilhar blocos em um ritmo deliberado | Sim, com action_horizon 16 ou mais | Erros acumulam-se lentamente o suficiente para serem corrigidos no próximo chunk. |
| Abrir uma gaveta, inserir um objeto | Geralmente | Rico em contato, mas lento. Observe paradas e arranques no contato. |
| Seguir um objeto em movimento | Não | A política age com base em uma observação de 300 ms a 1 s de idade. |
| Pegar, equilibrar ou recuperar de um escorregão | Não | A janela de correção é menor do que uma viagem de ida e volta. |
| Um loop fechado síncrono de 30 Hz | Não | O 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
- Alugue uma GPU em um mercado spot e espere por VRAM suficiente a um preço que lhe agrade.
- Instale CUDA, uv, um torchcodec ffmpeg aceitável e a pilha GR00T com submódulos.
- Solicite acesso ao backbone restrito `nvidia/Cosmos-Reason2-2B` e coloque um token no pod.
- Puxe seu checkpoint para o pod.
- Inicie o servidor em loopback e, em seguida, construa um túnel SSH a partir da máquina do robô.
- Instale um segundo ambiente na máquina do robô para o cliente e os drivers.
- Combine as chaves da câmera, os nomes das juntas e a instrução de linguagem com o que o checkpoint viu.
- Monitore o pod. Uma A100 esquecida rodando durante a noite custa mais do que o experimento.
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.
- Escolha a política treinada que você deseja executar.
- `/api/inference/pod` provisiona automaticamente um pod de GPU na nuvem que serve essa política.
- O cliente robô local se comunica com esse endpoint. Os checkpoints base são dos próprios fornecedores: `nvidia/GR00T-N1.7-3B`, `nvidia/GR00T-N1.5-3B`, `lerobot/pi05_base`. ACT não tem nenhum.
- Os pods possuem um watchdog de ociosidade e se destroem após um período de inatividade, para que nada continue cobrando silenciosamente.
- As mesmas operações estão disponíveis a partir de um terminal e para agentes de IA, para que o loop possa ser roteirizado.
O auto-provisionamento remove o trabalho de configuração e a conta do pod esquecido, não a física. A inferência ainda precisa estar próxima dos servos para tarefas rápidas: o loop de controle é de 20 a 485 ms por etapa de ação, dependendo do modelo, e as viagens de ida e volta pela internet pública, além disso, transformam uma política funcional em uma hesitante.
- Guia do cliente para o lado local da conexão
- Execute sua primeira política para o passo a passo
- CLI e servidor MCP para a versão roteirizada
- Documentos de segurança

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.
| Placa | Runpod community cloud | Runpod secure cloud | Adequado para |
|---|---|---|---|
| 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 | O mesmo, um pouco mais rápido |
| H100 PCIe 80 GB | 1.99 USD/h | 2.89 USD/h | Nível mais rápido; o valor de 11,7 Hz da NVIDIA é para uma H100 80GB HBM3 |
| L40S 48 GB | 0.79 USD/h | 0.99 USD/h | Apenas inferência, acima do limite de 16 GB |
| RTX 4090 24 GB | 0.34 USD/h | 0.74 USD/h | SmolVLA, 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.

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 hardwarePerguntas 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
- NVIDIA Isaac-GR00T: Repositório N1.7 e README (piso de inferência de 16 GB, instalação, backbone Cosmos-Reason2-2B restrito, restrição FFmpeg)
- run_gr00t_server.py: o CLI do servidor de política GR00T, padrões do ServerConfig (host 0.0.0.0, porta 5555) e o caminho do ReplayPolicy
- server_client.py: PolicyServer e PolicyClient, limite allow_pickle=False do MsgSerializer, api_token, timeout_ms
- eval_so100.py: o cliente de política SO-100, padrões do EvalConfig e o loop de controle síncrono
- Exemplo Isaac-GR00T SO100/SO101: conversão de conjunto de dados, ajuste fino e comandos de avaliação em loop fechado
- Guia de Implantação no Mundo Real do Isaac-GR00T: o orçamento síncrono de 33 ms, stop-and-go, tamanho do bloco de ação, status RTC
- Recomendação de Hardware Isaac-GR00T: frequência de inferência por GPU e o mínimo de 10 Hz
- Guia de Implantação e Inferência Isaac-GR00T: resultados de benchmark de latência por componente
- LeRobot: Tutorial de Inferência Assíncrona (PolicyServer, RobotClient, a tabela de parâmetros documentada)
- lerobot async_inference/configs.py: Padrões de PolicyServerConfig e RobotClientConfig, registro AGGREGATE_FUNCTIONS
- lerobot async_inference/policy_server.py: pickle.loads em dados de requisição, add_insecure_port, os nomes de chamada gRPC
- lerobot robot_client.py: transporte gRPC, serialização pickle, registro de latência
- CVE-2026-25874: Execução remota de código por desserialização insegura do LeRobot via gRPC, afetado até 0.5.1
- Black, Galliker e Levine, Execução em Tempo Real de Políticas de Fluxo de Agrupamento de Ações (agrupamento em tempo real)
- Preços de GPU Runpod: taxas horárias de nuvem comunitária e segura para A100, H100, L40S e 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