Guia prático: deploy de VLM open-source no NVIDIA Jetson com vLLM + Live WebUI

Se você quer rodar um Vision-Language Model (VLM) na borda (edge) — com GPU, câmera e uma interface web pra testar em tempo real — este passo a passo é uma rota bem objetiva usando NVIDIA Jetson + vLLM + Live VLM WebUI. A base é o tutorial oficial publicado no blog da Hugging Face em parceria com a NVIDIA (link no fim).

O que você vai conseguir ao final

  • Baixar o checkpoint FP8 do NVIDIA Cosmos Reasoning 2B via NGC
  • Subir um endpoint estilo OpenAI em http://localhost:8000/v1 com vLLM
  • Conectar a webcam ao Live VLM WebUI e testar em tempo real

Pré-requisitos (sem isso dá dor de cabeça)

  • Jetson compatível: AGX Thor / AGX Orin / Orin Super Nano
  • JetPack: 6 (Orin) ou 7 (Thor)
  • NVMe SSD: ~5 GB (pesos) + ~8 GB (imagem do container vLLM)
  • Conta NGC (grátis) pra baixar modelo e/ou container

Passo a passo (resumo fiel + com atalhos práticos)

1) Instale e configure o NGC CLI

Crie um diretório de trabalho e instale o NGC CLI (ARM64). Depois, rode ngc config set e informe sua API Key.

mkdir -p ~/Projects/CosmosReasoning
cd ~/Projects/CosmosReasoning

# baixe o instalador arm64 (veja o link mais recente no site da NVIDIA, se necessário)
wget -O ngccli_arm64.zip https://api.ngc.nvidia.com/v2/resources/nvidia/ngc-apps/ngc_cli/versions/4.13.0/files/ngccli_arm64.zip
unzip ngccli_arm64.zip
chmod u+x ngc-cli/ngc
export PATH="$PATH:$(pwd)/ngc-cli"

ngc config set

2) Baixe o modelo (FP8) via NGC

cd ~/Projects/CosmosReasoning
ngc registry model download-version "nim/nvidia/cosmos-reason2-2b:1208-fp8-static-kv8"

Guarde o caminho completo gerado (ele vai ser montado no container como volume).

3) Baixe a imagem do vLLM apropriada pro seu Jetson

Thor:

docker pull nvcr.io/nvidia/vllm:26.01-py3

AGX Orin / Orin Super Nano:

docker pull ghcr.io/nvidia-ai-iot/vllm:r36.4-tegra-aarch64-cu126-22.04

4) Suba o servidor vLLM (endpoint em 8000)

No host, defina o caminho do modelo e libere cache (ajuda quando você está no limite de memória):

MODEL_PATH="$HOME/Projects/CosmosReasoning/cosmos-reason2-2b_v1208-fp8-static-kv8"
sudo sysctl -w vm.drop_caches=3

Rode o container e, dentro dele, sirva o modelo.

Config “confortável” (Thor / AGX Orin)

vllm serve /models/cosmos-reason2-2b \
  --max-model-len 8192 \
  --media-io-kwargs '{"video": {"num_frames": -1}}' \
  --reasoning-parser qwen3 \
  --gpu-memory-utilization 0.8

Espere aparecer algo como: Uvicorn running on http://0.0.0.0:8000

Config “apertada” (Orin Super Nano)

Esse é o ponto que mais derruba gente: aqui o modelo precisa de limites agressivos (contexto curto, 1 request por vez, etc.).

vllm serve /models/cosmos-reason2-2b \
  --host 0.0.0.0 \
  --port 8000 \
  --trust-remote-code \
  --enforce-eager \
  --max-model-len 256 \
  --max-num-batched-tokens 256 \
  --gpu-memory-utilization 0.65 \
  --max-num-seqs 1 \
  --enable-chunked-prefill \
  --limit-mm-per-prompt '{"image":1,"video":1}' \
  --mm-processor-kwargs '{"num_frames":2,"max_pixels":150528}'

5) Verifique se o endpoint está vivo

Antes de plugar UI/câmera, confirme que o servidor está respondendo:

curl http://localhost:8000/v1/models

6) Conecte o Live VLM WebUI (webcam → VLM)

Suba a interface e configure o API Base URL como http://localhost:8000/v1, refresque os modelos e selecione o Cosmos Reasoning 2B.

3 insights práticos (o que realmente muda seu resultado)

  1. Separe “subir o modelo” de “usar com câmera”. Primeiro confirme /v1/models e um teste de chat; só depois pluga a WebUI. Isso reduz muito o tempo de debug.
  2. No Orin Super Nano, o limite não é “o modelo”, é a memória. Se travar/der OOM, reduza --gpu-memory-utilization (ex.: 0.55), corte --max-model-len (ex.: 128) e mantenha --max-num-seqs 1.
  3. Para “tempo real” de verdade, ajuste a WebUI. No Orin, use respostas curtas (max tokens ~100–150) e aumente o intervalo de frames (60+). Menos é mais.

Pergunta: você usaria um VLM rodando no Jetson pra quê primeiro — monitoramento, automação em loja/fábrica, robótica ou algo 100% diferente?

Ver o tutorial original (com todos os comandos)

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *