邊緣 LLM 推理:透過 React Native 執行本地 LLM

Hugging Face 已發布一份技術指南,說明如何在使用 React Native 的行動設備上實作本地 Large Language Model (LLM) 推理。透過利用 llama.rnllama.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 請求,以獲取可用的模型檔案。

模型生命週期工作流程

  1. 探索:應用程式查詢 Hugging Face Hub API 以尋找包含 .gguf 檔案的儲存庫。
  2. 下載:選定的模型透過 HTTPS 下載並使用 react-native-fs 儲存在本地。
  3. 初始化:來自 llama.rninitLlama 函數會載入模型到具有特定參數的上下文(例如 n_ctx: 2048n_gpu_layers: 1)。
  4. 推理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)。

Sources