Como rodar a demo Gemma 4 VLA no NVIDIA Jetson Orin Nano Super: guia completo

Apresentação da Gemma 4 VLA no Jetson Orin Nano Super
A NVIDIA, em parceria com a Hugging Face, disponibilizou uma demonstração da Gemma 4, um modelo multimodal com capacidade Visual Language Agent (VLA), rodando localmente no Jetson Orin Nano Super, uma placa compacta com GPU NVIDIA e 8 GB de RAM. Essa demo mostra a integração de reconhecimento de voz, processamento do modelo de linguagem, visão computacional via webcam e síntese de voz, tudo em um dispositivo embarcado.
A inovação está no fato de que a Gemma 4 decide autonomamente quando precisa usar a visão para responder a uma pergunta, capturando imagens da webcam, interpretando-as e incorporando essa informação na resposta, sem depender de gatilhos fixos ou palavras-chave.
Requisitos e equipamentos necessários
- Hardware: NVIDIA Jetson Orin Nano Super (8 GB RAM), webcam USB (exemplo: Logitech C920), microfone USB integrado à webcam, alto-falante USB e teclado USB para controle (ex: pressionar tecla SPACE).
- Sistema operacional: Linux (distribuição compatível com Jetson).
- Softwares e bibliotecas: Python 3, pacotes básicos de sistema (git, cmake, build-essential, alsa-utils, pulseaudio-utils, v4l-utils, entre outros).
Passo a passo para instalação e execução da demo Gemma 4 VLA
1. Instalar pacotes básicos do sistema
sudo apt update
sudo apt install -y git build-essential cmake curl wget pkg-config \
python3-pip python3-venv python3-dev \
alsa-utils pulseaudio-utils v4l-utils psmisc
ffmpeg libsndfile1
Esses pacotes cobrem ferramentas de compilação, áudio, webcam e ambiente Python.
2. Configurar ambiente Python
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install opencv-python-headless onnx_asr kokoro-onnx soundfile huggingface-hub numpy
3. Otimizar uso de memória RAM (opcional, mas recomendado)
Como o Jetson Orin Nano tem 8 GB, liberar RAM e adicionar swap ajuda a evitar erros de falta de memória durante a execução:
sudo fallocate -l 8G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
sudo systemctl stop docker 2>/dev/null || true
sudo systemctl stop containerd 2>/dev/null || true
pkill -f tracker-miner-fs-3 || true
pkill -f gnome-software || true
free -h
Feche também navegadores, IDEs e outros programas que consumam muita memória.
4. Baixar e servir o modelo Gemma 4 com llama.cpp
Clone e compile o repositório llama.cpp com suporte CUDA para melhor desempenho:
cd ~
git clone https://github.com/ggml-org/llama.cpp.git
cd llama.cpp
cmake -B build \
-DGGML_CUDA=ON \
-DCMAKE_CUDA_ARCHITECTURES="87" \
-DGGML_NATIVE=ON \
-DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release -j4
Depois, baixe o modelo e o arquivo de "vision projector", imprescindível para a funcionalidade visual:
mkdir -p ~/models && cd ~/models
wget -O gemma-4-E2B-it-Q4_K_M.gguf https://huggingface.co/unsloth/gemma-4-E2B-it-GGUF/resolve/main/gemma-4-E2B-it-Q4_K_M.gguf
wget -O mmproj-gemma4-e2b-f16.gguf https://huggingface.co/ggml-org/gemma-4-E2B-it-GGUF/resolve/main/mmproj-gemma4-e2b-f16.gguf
Inicie o servidor llama:
~/llama.cpp/build/bin/llama-server \
-m ~/models/gemma-4-E2B-it-Q4_K_M.gguf \
--mmproj ~/models/mmproj-gemma4-e2b-f16.gguf \
-c 2048 \
--image-min-tokens 70 --image-max-tokens 70 \
--ubatch-size 512 --batch-size 512 \
--host 0.0.0.0 --port 8080 \
-ngl 99 --flash-attn on \
--no-mmproj-offload --jinja -np 1
O parâmetro -ngl 99 carrega todas as camadas do modelo na GPU para máxima performance.
5. Identificar dispositivos de áudio e webcam
Liste microfones disponíveis:
arecord -l
Liste os alto-falantes PulseAudio:
pactl list short sinks
Liste webcams:
v4l2-ctl --list-devices
Teste rápido para gravação e reprodução:
export MIC_DEVICE="plughw:3,0"
export SPK_DEVICE="alsa_output.usb-Generic_USB2.0_Device_20130100ph0-00.analog-stereo"
arecord -D "$MIC_DEVICE" -f S16_LE -r 16000 -c 1 -d 3 /tmp/test.wav
paplay --device="$SPK_DEVICE" /tmp/test.wav
Ouça para confirmar que o áudio está funcionando.
6. Executar a demo Gemma 4 VLA
Com o servidor ativo, ative o ambiente Python e defina variáveis:
source .venv/bin/activate
export MIC_DEVICE="plughw:3,0"
export SPK_DEVICE="alsa_output.usb-Generic_USB2.0_Device_20130100ph0-00.analog-stereo"
export WEBCAM=0
export VOICE="af_jessica"
python3 Gemma4_vla.py
Pressione SPACE para iniciar a gravação, fale sua pergunta e pressione SPACE novamente para parar. A Gemma 4 decide se precisa usar a webcam para responder, interpretando a imagem capturada e respondendo com contexto visual.
Como a Gemma 4 funciona na demo
O pipeline é o seguinte:
- Você fala → Parakeet STT faz a transcrição localmente → Gemma 4 recebe o texto e a definição da ferramenta "look_and_answer"
- Se a pergunta requer visão, Gemma 4 aciona a captura da webcam para análise
- Gemma 4 responde usando o contexto visual e Kokoro TTS sintetiza a fala para o alto-falante
Não há palavras-chave ou lógica fixa; o modelo decide autonomamente quando usar a visão, graças ao suporte nativo a chamadas de ferramentas ativado pelo parâmetro --jinja no servidor llama.
Alternativa para testar Gemma 4 em modo texto
Se quiser experimentar a Gemma 4 sem configurar áudio e webcam, existe uma imagem Docker pronta com llama.cpp compilado para Jetson Orin. Ela roda apenas em modo texto (sem visão):
sudo docker run -it --rm --pull always \
--runtime=nvidia --network host \
-v $HOME/.cache/huggingface:/root/.cache/huggingface \
ghcr.io/nvidia-ai-iot/llama_cpp:latest-jetson-orin \
llama-server -hf unsloth/gemma-4-E2B-it-GGUF:Q4_K_S
Depois, basta usar qualquer cliente compatível com OpenAI para se conectar em http://localhost:8080 e conversar com o modelo.
Dicas para solução de problemas comuns
- Falta de memória: repita os passos de limpeza de RAM e swap, feche programas desnecessários.
- Sem som: confira se a variável
SPK_DEVICEestá correta e corresponde a um sink do PulseAudio real. - Microfone grava silêncio: verifique se
MIC_DEVICEaponta para o dispositivo correto e teste gravação manual. - Primeira execução lenta: normal, pois baixa modelos e gera arquivos de voz; execuções subsequentes são mais rápidas.