在 Jetson Orin Nano Super 上運行 Gemma 4 VLA 示範
本教學展示如何在 Jetson Orin Nano 上部署 Gemma 4 作為視覺語言動作(VLA)模型,讓模型能根據對話情境自主決定何時拍攝並解讀影像來回答你的問題。
Jetson Orin Nano Super 上的 Gemma 4 VLA 演示
按下空白鍵(SPACE)開始錄音,再次按下空白鍵停止。這是一個簡單的 VLA(視覺-語言-動作模型):模型會根據你提問的語境自行決定是否採取行動,無需關鍵字觸發,也沒有硬編碼的邏輯。如果你的問題需要 Gemma 「睜開眼睛」,她會決定拍攝照片、進行解讀,並結合該語境回答你。她不是在描述圖片,而是利用她所看到的內容來回答你的實際問題。
老實說,這能在 Jetson Orin Nano 上運行確實令人印象深刻。:)
獲取程式碼
本教學的完整腳本託管在 GitHub 上,位於我的 Google_Gemma 倉庫中,就在 Gemma 2 演示的旁邊:
👉 github.com/asierarranz/Google_Gemma
使用以下任一方式獲取(擇一即可):
你只需要那個單一檔案(Gemma4_vla.py)。它會在首次運行時從 Hugging Face 下載 STT/TTS 模型和語音資產。
硬體
我們使用的設備:
並不侷限於這些特定設備,任何 Linux 能識別的網路攝影機、USB 麥克風和 USB 喇叭應該都可以運作。
步驟 1:系統套件
在全新的 Jetson 上,讓我們安裝基礎組件:
只有在你選擇原生編譯 llama.cpp 路線(步驟 4 中的選項 A)時才需要 build-essential 和 cmake。其餘套件用於音訊、攝影機和 Python。
步驟 2:Python 環境
步驟 3:釋放 RAM(選填但建議執行)
注意:此步驟可能並非絕對必要。但我們正在這塊 8 GB 的開發板上運行一個相當強大的模型,因此預留一些空間會讓整個體驗更流暢,特別是如果你在此之前一直在運行 Docker 或其他大型程式。
這些只是對我來說效果良好的命令,如果對你有幫助請儘管使用。
增加 Swap 交換空間
Swap 不會加速推理,但它在模型加載期間充當安全網,以免你在關鍵時刻因記憶體不足(OOM)而被系統強制終止程序。
關閉佔用記憶體的程式
關閉瀏覽器分頁、IDE 視窗以及任何不需要的東西。每一 MB 都至關重要。
如果你打算在步驟 4 中使用 Docker 路線,顯然不要在這裡停止 Docker,你會需要它。但仍請關閉其他東西。
RAM 依然不足?
根據我們的測試,完成上述清理後,Q4_K_M(原生編譯)和 Q4_K_S(Docker)在 8 GB 板子上運行良好。但如果你有其他無法關閉的程式且記憶體依然吃緊,你可以降一級使用 Q3 量化版,同樣的模型,雖然稍微沒那麼聰明,但明顯更輕量。只需在步驟 4 中更換檔名:
不過老實說,如果可以的話,請堅持使用 Q4_K_M。它是效能與品質的最佳平衡點。
步驟 4:啟動 Gemma 4 服務
在啟動演示之前,你需要一個正在運行的 llama-server 並加載 Gemma 4。我們將在 Jetson 上原生編譯 llama.cpp,這能提供最佳效能,並能完全控制 VLA 演示所需的視覺投影器(vision projector)。
編譯 llama.cpp
下載模型和視覺投影器
mmproj 檔案是視覺投影器。沒有它 Gemma 就看不見,所以請勿跳過。
啟動伺服器
值得一提的一個參數:-ngl 99 告訴 llama-server 將模型的所有層都推送到 GPU 上(99 只是代表「模型擁有的所有層」)。如果你遇到記憶體問題,可以降低該數字,將較少的層卸載到 GPU,其餘留在 CPU。不過對於此配置,所有層都放在 GPU 應該沒問題。
驗證是否啟動成功
從另一個終端機執行:
如果你收到 JSON 回傳,就代表成功了。
步驟 5:尋找你的麥克風、喇叭和攝影機
麥克風
尋找你的 USB 麥克風。在我們的案例中,C920 顯示為 plughw:3,0。
喇叭
這會列出你的 PulseAudio 輸出裝置(sinks)。選擇與你的喇叭匹配的一個,它會是一個又長又醜的名字,如 alsa_output.usb-....。在我的例子中是 alsa_output.usb-Generic_USB2.0_Device_20130100ph0-00.analog-stereo,但你的會有所不同。
網路攝影機
通常是索引 0(即 /dev/video0)。
快速測試
如果你能聽到自己的聲音,就準備好了。
步驟 6:運行演示
確保步驟 4 的伺服器正在運行,然後執行:
首次啟動時,腳本會下載 Parakeet STT、Kokoro TTS 並生成語音提示的 WAV 檔。這需要一分鐘,然後你就可以開始了。
如果你想跳過音訊設置並直接測試 LLM 路徑,也有純文字模式:
更換語音
Kokoro 內建多種語音。可以使用以下指令切換:
一些不錯的選擇:af_jessica, af_nova, am_puck, bf_emma, am_onyx。
運作原理
該腳本向 Gemma 4 僅公開了一個工具:
當你提問時:
這裡沒有關鍵字匹配。模型會自行決定何時需要觀察。這就是 VLA 的部分。
llama-server 上的 --jinja 參數啟用了這項功能,它激活了 Gemma 原生的工具調用(tool-calling)支持。
疑難排解
伺服器記憶體不足:請再次執行步驟 3 的清理工作。關閉所有程式。這個模型可以放入 8 GB,但你必須保持環境整潔。
沒有聲音:檢查 pactl list short sinks 並確保 SPK_DEVICE 與真實的輸出裝置匹配。
麥克風錄製到靜音:使用 arecord -l 再次確認,然後手動測試錄音。
首次運行緩慢:這是正常的。它正在下載模型並生成語音提示。第二次運行就會很快。
環境變數
加碼:只想在文字模式下嘗試 Gemma 4?
如果你不在意完整的 VLA 演示,只想在 Jetson 上試用 Gemma 4 而不想編譯任何東西,Jetson AI Lab 提供了一個預編譯好 llama.cpp 的 Docker 鏡像:
一行指令,無需編譯,-hf 會在首次運行時從 Hugging Face 下載 GGUF。使用任何相容 OpenAI 的客戶端訪問 http://localhost:8080 即可開始聊天。
注意:此 Docker 路徑僅限文字。它不會加載視覺投影器,因此無法與上述 VLA 演示配合使用。如需完整的攝影機體驗,請堅持使用步驟 4 的原生編譯。
希望你喜歡這個教學!如果你有任何問題或想法,歡迎隨時聯繫。:)
Asier Arranz | NVIDIA
本文提到的模型 2
更多來自此作者的內容
如何利用合成人格將韓國 AI 代理落地於真實人口統計
利用合成數據構建快速多語言 OCR 模型
社群
· 註冊或登入以發表評論
本文提到的模型 2
相關文章