邊緣 LLM 推理:透過 React Native 執行本地 LLM
Hugging Face 已發布一份技術指南,說明如何在使用 React Native 的行動設備上實作本地 Large Language Model (LLM) 推理。透過利用 llama.rn(llama.cpp 的繫結),開發者可以構建從 Hugging Face Hub 下載 GGUF 模型並在設備上完全執行的應用程式,確保資料隱私和離線功能。
行動裝置的模型選擇與量化
成功的邊緣推理取決於平衡模型大小與量化,以匹配設備硬體限制。
模型大小指引
- 小型模型 (1-3B 參數): 建議用於大多數行動設備以降低延遲。
- 中型模型 (4-7B 參數): 適合高端設備;在較舊的硬體上可能導致效能下降。
- 大型模型 (8B+ 參數): 通常過於耗費資源,除非進行大量量化(例如 Q2_K 或 Q4_K_M)。
GGUF 量化格式
量化可減少模型大小和記憶體需求。該指南強調了三種主要格式:
- 舊版量化 (Q4_0, Q4_1, Q8_0): 使用每個區塊的一個或兩個縮放常數的基本方法;現在大多被取代。
- K-量化 (Q3_K_S, Q5_K_M 等): 混合量化,將更多位元分配給關鍵層以提高準確度。
- I-量化 (IQ2_XXS, IQ3_S 等): 受 QuIP 啟發,提供更小的檔案大小,適合計算能力高但記憶體有限的設備。
推薦的行動裝置模型
- SmolLM2-1.7B-Instruct
- Qwen2-0.5B-Instruct
- Llama-3.2-1B-Instruct
- DeepSeek-R1-Distill-Qwen-1.5B
技術實作架構
該應用程式使用 React Native 構建,允許使用單一程式碼基礎來針對 iOS 和 Android。核心技術棧包括:
llama.rn: 提供載入和運行 GGUF 檔案所需的llama.cpp繫結。react-native-fs: 管理設備的本地檔案系統,以在DocumentDirectoryPath中存儲下載的模型。axios: 處理向 Hugging Face Hub 發送的 API 請求,以獲取可用的模型檔案。
模型生命週期工作流程
- 探索:應用程式查詢 Hugging Face Hub API 以尋找包含
.gguf檔案的儲存庫。 - 下載:選定的模型透過 HTTPS 下載並使用
react-native-fs儲存在本地。 - 初始化:來自
llama.rn的initLlama函數會載入模型到具有特定參數的上下文(例如n_ctx: 2048、n_gpu_layers: 1)。 - 推理:
context.completion方法處理對話歷史,並基於一組停止詞生成回應,以防止無限制生成。
進階功能以提升使用者體驗
除了基本聊天功能外,該指南概述了幾項優化,以改善行動使用者體驗:
- 增量生成:在
context.completion內使用回調函數,逐個串流 token,而不是等待完整回應。 - 思考過程可視化:對於如 DeepSeek-R1 這樣的推理模型,應用程式會識別特殊 token 以隔離模型內部的「思考」,允許使用者切換推理鏈的可見性。
- 效能追蹤:利用
CompletionResult物件的timings屬性來顯示predicted_per_second指標。 - 自動捲動:透過程式化控制
ScrollView來保持最新 token 可見,除非使用者手動向上捲動。
調試與開發
開發透過 Metro 打包器管理,除錯透過 Chrome DevTools 進行。關鍵除錯步驟包括在終端機中使用 j 鍵啟動除錯器,並在「來源」分頁設定斷點。針對建置問題,該指南建議清除 Metro 快取(npm start --reset-cache)或清除原生建置(Android 使用 ./gradlew clean,iOS 使用 pod install)。