Back to blog
    Llama 3.2 行動應用:微調與裝置端部署
    LlamaMetafine-tuningmobile AIGGUFLoRAsegment:mobile-builder

    Llama 3.2 行動應用:微調與裝置端部署

    在行動應用中使用 Meta Llama 3.2 1B 和 3B 模型的完整指南。使用 LoRA 微調、匯出至 GGUF,以及透過 llama.cpp 在 iOS 和 Android 上部署。

    EErtas Team·

    Meta 的 Llama 3.2 包含專為行動和邊緣部署設計的 1B 和 3B 模型。這些不是縮小版的附帶產品。它們是專門為裝置端推論而打造的,從較大的 Llama 3.1 模型蒸餾而來,在符合行動記憶體預算的同時保留了強大的能力。

    本指南涵蓋完整的流程:選擇合適的大小、在你的資料上微調、匯出至 GGUF,以及在 iOS 和 Android 上部署。

    為什麼選擇 Llama 3.2 用於行動端

    Llama 3.2 1B 和 3B 在行動部署方面有幾個優勢:

    專為行動設計: 不同於那些被壓縮的大型模型,這些模型從一開始就是在考慮行動限制的情況下訓練的。架構針對有限硬體上的快速推論進行了最佳化。

    強大的基礎能力: 使用 9 兆 tokens 訓練。3B 模型在 MMLU 上得分 63.4,在 IFEval(指令遵循)上得分 77.4,使其與一年前 2-3 倍大小的模型具有競爭力。

    最大的生態系統: Llama 擁有所有開源模型系列中最大的社群。比任何替代方案都有更多的微調指南、更多的 GGUF 轉換、更多的工具支援,以及更多的生產部署範例。

    128K 上下文: 1B 和 3B 都支援 128K token 的上下文視窗。對於行動端,你很少會使用超過 2-4K,但如果需要,長上下文是可用的。

    選擇 1B 還是 3B

    因素1B3B
    GGUF Q4 大小約 600MB約 1.7GB
    推論時 RAM約 800MB約 2.2GB
    裝置覆蓋率4GB+(90% 的手機)6GB+(65% 的手機)
    生成速度(旗艦機)35-50 tok/s18-30 tok/s
    分類準確率(微調後)90-94%93-96%
    聊天品質(微調後)適合簡短回應適合多輪對話
    摘要能力尚可良好

    選擇 1B 的時機: 你的任務是分類、標記、自動完成、智慧建議或短文本生成。你希望最大化裝置覆蓋率。

    選擇 3B 的時機: 你的任務是對話式聊天、摘要、內容草擬或複雜的指令遵循。你的使用者擁有較新的裝置。

    使用 LoRA 微調

    LoRA(Low-Rank Adaptation,低秩適應)是行動模型的標準微調方法。LoRA 不修改所有模型權重,而是訓練小型的適配器矩陣來調整模型行為。適配器大小為 50-200MB,在 GGUF 匯出前合併到基礎模型中。

    訓練資料格式

    Llama 3.2 使用特定的聊天範本。你的訓練資料應遵循此格式:

    {
      "messages": [
        {"role": "system", "content": "You are a travel assistant for TripHelper app."},
        {"role": "user", "content": "What's the best time to visit Kyoto?"},
        {"role": "assistant", "content": "March-April for cherry blossoms or November for autumn foliage. Both are peak seasons, so book 2-3 months ahead."}
      ]
    }

    每個訓練範例都是一段對話。如果你的應用程式使用系統提示詞,請包含它。如果你的功能是對話式的,請包含多輪對話範例。

    資料需求

    任務最少範例數建議範例數訓練時間(LoRA)
    分類200500-1,00015-30 分鐘
    簡短問答3001,000-2,00030-60 分鐘
    聊天5002,000-5,0001-3 小時
    摘要3001,000-3,0001-2 小時

    LoRA 超參數

    Llama 3.2 行動微調的標準設定:

    參數1B3B
    LoRA 秩(r)16-3216-64
    LoRA alpha32-6432-128
    學習率2e-41e-4
    訓練輪數3-52-4
    批次大小4-82-4
    目標模組q_proj, v_proj, k_proj, o_proj相同

    較高的秩可以捕捉更多領域特定知識,但會增加適配器大小和訓練時間。對於大多數行動使用場景,秩 16-32 就足夠了。

    匯出至 GGUF

    訓練完成後,流程如下:

    1. 將 LoRA 適配器合併到基礎模型權重中
    2. 轉換為 GGUF 格式
    3. 量化至 Q4_K_M(或你的目標等級)
    4. 在你的評估集上驗證量化後的模型

    GGUF 檔案是你發送到裝置的最終產出物。它在單一檔案中包含完整的模型,llama.cpp 可以直接載入。

    像 Ertas 這樣的平台處理端到端流程:

    上傳訓練資料、選擇 Llama 3.2 1B 或 3B 作為基礎模型、設定 LoRA 參數(或使用預設值)、在雲端 GPU 上訓練,並直接匯出為 GGUF。無需命令列工具、無需 GPU 設定、無需轉換腳本。

    在 iOS 上部署

    與 llama.cpp 整合

    透過 Swift Package Manager 或作為已編譯的框架將 llama.cpp 加入你的 iOS 專案。載入 GGUF 模型並執行推論:

    import llama
    
    let modelPath = Bundle.main.path(forResource: "model", ofType: "gguf")!
    let params = llama_model_default_params()
    let model = llama_load_model_from_file(modelPath, params)
    
    // 設定推論參數
    var contextParams = llama_context_default_params()
    contextParams.n_ctx = 2048
    contextParams.n_threads = 4
    let context = llama_new_context_with_model(model, contextParams)

    Metal GPU 加速

    llama.cpp 在 iOS 上自動使用 Metal 進行 GPU 加速推論。將 n_gpu_layers 設定為模型的總層數,以將所有計算卸載到 GPU:

    var modelParams = llama_model_default_params()
    modelParams.n_gpu_layers = 32 // 將所有層卸載到 Metal

    這在近期的 llama.cpp 版本中預設啟用,相比純 CPU 推論提供 30-50% 的速度提升。

    在 Android 上部署

    與 llama.android 整合

    使用 llama.cpp 專案中的 llama.android 函式庫。它透過 JNI 提供 Kotlin 綁定:

    val model = LlamaModel()
    model.load(modelPath, nThreads = 4, nGpuLayers = 32)
    
    // 串流生成
    model.generate(prompt) { token ->
        runOnUiThread { appendToUI(token) }
    }

    Vulkan GPU 加速

    在 Android 上,llama.cpp 支援 Vulkan 在 Snapdragon、Tensor 和其他晶片組上進行 GPU 加速。透過將 nGpuLayers 設定為模型的層數來啟用。

    授權條款

    Llama 3.2 使用 Meta 的 Llama 社群授權協議。重點如下:

    • 商業使用: 允許
    • 修改: 允許(包括微調)
    • 散布: 允許
    • 7 億月活躍用戶門檻: 如果你的產品或服務月活躍用戶超過 7 億,你需要向 Meta 取得特別授權
    • 署名: 必要

    對於絕大多數行動應用程式,該授權是完全寬鬆的。7 億月活躍用戶的條款僅適用於最大的平台。

    端到端時程

    步驟持續時間備註
    準備訓練資料1-5 天取決於資料可用性
    使用 LoRA 微調30 分鐘 - 3 小時取決於 GPU,建議使用雲端訓練
    匯出至 GGUF10-30 分鐘大多數平台自動化處理
    整合 llama.cpp1-2 天一次性設定
    測試與評估1-3 天在目標裝置上測試
    總計3-10 天首次部署;後續迭代更快

    首次部署耗時最長,因為需要整合 llama.cpp。之後,模型更新(重新訓練、重新匯出 GGUF)只需數小時,而非數天。

    Ship AI that runs on your users' devices.

    Early bird pricing starts at $14.50/mo — locked in for life. Plans for builders and agencies.

    Ship AI that runs on your users' devices.

    Early bird pricing starts at $14.50/mo — locked in for life. Plans for builders and agencies.

    Keep reading