Gemma 4 VLA 在 Jetson Orin Nano Super 上的演示

Hugging Face Blog 工具

摘要

NVIDIA 与 Hugging Face 发布实操演示,展示 Gemma 4 作为视觉-语言-动作模型在 Jetson Orin Nano Super 上完整运行,使用本地语音转文字/文字转语音及网络摄像头输入。

暂无内容
查看原文 导出为 Word 导出为 PDF
查看缓存全文

缓存时间: 2026/04/22 20:23

在 Jetson Orin Nano Super 上体验 Gemma 4 VLA 演示

来源:https://huggingface.co/blog/nvidia/gemma4
返回文章列表(https://huggingface.co/blog)


与 Gemma 4 对话,她会自己判断是否需要通过摄像头“看”一眼再回答你。全部在 Jetson Orin Nano Super 本地运行。

你说 → Parakeet STT → Gemma 4 → [必要时摄像头] → Kokoro TTS → 扬声器

按空格录音,再按空格结束。这是一个极简 VLA:模型根据你的问题上下文自行决定是否调用视觉,无需关键词、无硬编码逻辑。如果问题需要“睁眼”,她会拍照、理解并据此回答——不是描述图片,而是用看到的内容回答你的真实问题。
而且,这居然能在 Jetson Orin Nano 上跑起来,确实挺惊艳的 :)


获取代码

完整脚本放在 GitHub 我的 Google_Gemma 仓库,与 Gemma 2 演示并列:
👉 github.com/asierarranz/Google_Gemma(https://github.com/asierarranz/Google_Gemma)

任选其一:

# 方案 1:克隆整个仓库
git clone https://github.com/asierarranz/Google_Gemma.git
cd Google_Gemma/Gemma4

# 方案 2:只下载脚本
wget https://raw.githubusercontent.com/asierarranz/Google_Gemma/main/Gemma4/Gemma4_vla.py

单文件 Gemma4_vla.py 即可,首次运行会自动从 Hugging Face 拉取 STT/TTS 模型与音色资源。


硬件清单

  • NVIDIA Jetson Orin Nano Super(8 GB)
  • Logitech C920 摄像头(自带麦克风)
  • USB 扬声器
  • USB 键盘(按空格用)

设备不挑,Linux 能认的 USB 摄像头/麦克风/扬声器都行。


步骤 1:系统依赖

新系统先装基础包:

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

build-essentialcmake 仅在本地编译 llama.cpp(步骤 4 方案 A)时需要,其余用于音视频与 Python。


步骤 2: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:释放内存(可选但推荐)

8 GB 板子跑大模型,清理一下更丝滑。

加交换文件

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

浏览器、IDE 统统关掉,每一 MB 都值钱。

若步骤 4 用 Docker,别停 Docker,其余照旧杀。

还是吃紧?

Q4_K_M(本地)/Q4_K_S(Docker)在 8 GB 上清理后稳稳运行。实在紧张就降一档 Q3

gemma-4-E2B-it-Q3_K_M.gguf   # 替换 Q4_K_M

能跑 Q4 就别降,智商差距明显。


步骤 4:启动 Gemma 4 服务

需先跑起 llama-server 并加载视觉投影文件。

本地编译 llama.cpp

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

下载模型与视觉投影

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

mmproj 是视觉投影,缺了它模型就“瞎”。

启动服务

~/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

-ngl 99 把所有层扔 GPU,内存吃紧可改小。
--jinja 开启 Gemma 原生工具调用,是 VLA 关键。

验证服务

curl -s http://localhost:8080/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model":"gemma4","messages":[{"role":"user","content":"Hi!"}],"max_tokens":32}' \
  | python3 -m json.tool

返回 JSON 即成功。


步骤 5:确认麦克风、扬声器、摄像头

麦克风

arecord -l

找到 USB 麦克,如 plughw:3,0

扬声器

pactl list short sinks

选对应 USB 扬声器的冗长名字,如 alsa_output.usb-Generic_USB2.0_Device_20130100ph0-00.analog-stereo

摄像头

v4l2-ctl --list-devices

通常 /dev/video0

快速测试

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

能听到自己声音就 OK。


步骤 6:运行演示

确保步骤 4 的服务已跑,然后:

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

首次会下载 Parakeet STT、Kokoro TTS 并生成音色文件,稍等即可。

  • 空格 → 开始录音
  • 说话提问
  • 空格 → 结束录音

纯文本模式(跳过音频):

python3 Gemma4_vla.py --text

切换音色

export VOICE="am_puck"
python3 Gemma4_vla.py

推荐音色:af_jessicaaf_novaam_puckbf_emmaam_onyx


工作原理

脚本只给 Gemma 4 注册了一个工具:

{
  "name": "look_and_answer",
  "description": "Take a photo with the webcam and analyze what is visible."
}

流程:

  1. 本地语音转文字(Parakeet STT)
  2. Gemma 收到文本+工具定义
  3. 需视觉时自动调用 look_and_answer,脚本拍照回传
  4. Gemma 结合图像回答,Kokoro 朗读

无关键词匹配,模型自行判断何时“睁眼”——这就是 VLA。
--jinja 标志激活了 Gemma 的原生工具调用能力。


常见问题

  • 服务 OOM:重做步骤 3 清理,关浏览器。
  • 没声音:检查 SPK_DEVICE 是否填对。
  • 麦克录不到:用 arecord -l 确认设备并手动测试。
  • 首次启动慢:正常,下载模型+生成音色,第二次飞快。

环境变量

变量默认值说明
LLAMA_URLhttp://127.0.0.1:8080/v1/chat/completionsllama-server 地址
MIC_DEVICEplughw:3,0ALSA 录音设备
SPK_DEVICEalsa_output.usb...analog-stereoPulseAudio 播放 sink
WEBCAM0摄像头索引 /dev/videoN
VOICEaf_jessicaKokoro 音色

附:只想纯文本体验 Gemma 4?

懒得编译?Jetson AI Lab 提供了现成 Docker 镜像,已预装 llama.cpp:

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

一行命令,纯文本聊天,访问 http://localhost:8080 即可。
注意:该镜像不含视觉投影,无法跑 VLA 演示。要摄像头体验请用步骤 4 的本地编译方案。


祝你玩得开心!有问题或想法欢迎交流 :)

Asier Arranz | NVIDIA

相似文章

Gemma 4 视觉

Reddit r/LocalLLaMA

Gemma 4 的视觉表现受默认 token 预算过低拖累;在 llama.cpp 中将 --image-max-tokens 提到 2240,可解锁顶尖 OCR 与细节识别,代价是额外占用约 14 GB 显存。

google/gemma-4-31B-it-assistant

Hugging Face Models Trending

Google DeepMind 发布了 Gemma 4,这是一个开源权重的多模态模型家族,支持文本、图像、视频和音频,具备增强的推理和编码能力,并通过多令牌预测(MTP)实现高达 2 倍的解码速度提升。