Back to blog
    Llama 3 微調:從資料準備到部署的完整指南
    llama-3fine-tuningloraqlorametadeploymentollamalocal-inference

    Llama 3 微調:從資料準備到部署的完整指南

    使用 LoRA/QLoRA 微調 Meta 的 Llama 3 模型的實用指南。涵蓋模型變體選擇、資料格式化、訓練配置、評估方法,以及使用 Ollama 和 llama.cpp 進行本地部署。

    EErtas Team·

    Llama 3 是目前最廣泛使用的開源模型系列之一。它有出色的指令遵循能力,有多種大小可供選擇,並且可以在消費者硬體上部署——這使它成為大多數微調項目的優秀起點。

    本指南涵蓋了在 Llama 3 上微調的實際步驟,從選擇正確的模型變體到在本地部署最終結果。

    選擇正確的模型變體

    Llama 3 有幾個版本。以下是根據使用案例選擇哪個版本:

    Llama 3.1 8B

    最適合: 大多數微調項目。這是甜蜜點——能力足夠強大,可以在指令遵循和任務特定行為上很好地微調,同時小到足以在消費者 GPU 上訓練並在標準硬體上推理。

    微調所需資源: 帶有 16-24 GB VRAM 的單個 GPU(RTX 3090、RTX 4090)使用 QLoRA;帶 40 GB 以上 VRAM 的多個 GPU 使用全 LoRA。

    推理所需資源: 4-bit 量化後的 Apple Silicon Mac(16 GB 以上)、Linux 機器配備消費者 GPU,或任何支援 Ollama 的硬體。

    Llama 3.1 70B

    最適合: 需要超出 8B 能力的任務——複雜推理、細微差別的寫作風格遷移、高準確率的知識任務。

    微調所需資源: 多個高端 GPU 或雲端 GPU(80 GB 以上 VRAM 用於 QLoRA)。不適合本地微調——在 Ertas 等平台上使用雲端 GPU。

    何時選擇 8B 而非 70B: 對於分類、提取、格式化和大多數生成任務,正確微調的 8B 模型達到可比的準確率,成本只是 70B 的一小部分。先從 8B 開始;只有在無法達到準確率目標時才升級到 70B。

    資料準備

    選擇聊天格式 vs 指令格式

    Llama 3.1 使用特定的聊天模板格式:

    <|begin_of_text|><|start_header_id|>system<|end_header_id|>
    
    你是一個有用的助手。<|eot_id|><|start_header_id|>user<|end_header_id|>
    
    用戶消息在這裡<|eot_id|><|start_header_id|>assistant<|end_header_id|>
    
    助手回應在這裡<|eot_id|>
    

    實際上: 使用 JSONL 格式,讓微調平台處理模板格式化。Ertas Studio 自動應用正確的 Llama 3 聊天模板。

    你的 JSONL 訓練資料應如下所示:

    {"messages": [{"role": "system", "content": "你是一個客戶支援代理。"}, {"role": "user", "content": "如何重置我的密碼?"}, {"role": "assistant", "content": "要重置你的密碼,請點擊登入頁面的「忘記密碼」,輸入你的電子郵件,然後查看重置連結。"}]}
    {"messages": [{"role": "user", "content": "提取公司名稱:Apple Inc. 昨天宣布..."}, {"role": "assistant", "content": "{\"company\": \"Apple Inc.\"}"}]}

    訓練資料的數量和品質

    最低限度: 100 個範例用於簡單的行為更改(語氣、格式)。

    推薦: 1,000-5,000 個範例用於真正的任務特定微調。超過這個數量,你通常看到的是邊際改進,除非你的任務特別複雜。

    品質重要性: 100 個高品質、多樣化的範例通常優於 1,000 個重複或低品質的範例。品質包括:

    • 多樣的輸入(不僅僅是同一類型問題的變體)
    • 一致的輸出風格和格式
    • 正確的標記(分類任務中沒有標記錯誤)
    • 覆蓋你想要在其上表現良好的邊緣案例

    LoRA 配置

    Llama 3.1 8B 的推薦配置:

    參數推薦值備注
    LoRA rank16對大多數任務合適;複雜任務使用 32
    Alpha32通常設置為 rank 的 2 倍
    學習率2e-4帶餘弦調度
    批次大小4根據 VRAM 調整
    Epochs3監控驗證損失以避免過擬合
    目標模塊q_proj, v_proj添加 k_proj, o_proj 以提高容量

    Rank 的選擇: Rank 16 是良好的起點。如果你的任務涉及複雜的推理或大量的風格遷移,嘗試 rank 32。更高的 rank 提高容量但增加過擬合的風險,並且需要更多記憶體。

    訓練技巧

    監控過擬合

    訓練損失和驗證損失都應該下降。如果訓練損失繼續下降但驗證損失上升,你在過擬合:

    • 減少 epochs
    • 增加 dropout(Ertas 中的 lora_dropout: 0.1
    • 在訓練集中增加資料多樣性
    • 減少 rank

    Ertas Studio 在訓練期間顯示兩個損失曲線——密切關注它們。

    學習率敏感性

    Llama 3 對學習率相對敏感。如果你看到:

    • 訓練不穩定(損失激增): 降低學習率(2e-5 而非 2e-4)
    • 緩慢收斂: 略微提高學習率或增加 epochs
    • 輸出降解(格式崩潰): 學習率可能太高,或者訓練資料中有不一致的範例

    黃金法則: 從 2e-4 開始,如果訓練不穩定則降低。

    評估

    定量評估

    在保留評估集(不在訓練中的 10-20% 數據)上評估:

    • 分類任務: 準確率、F1 分數、每個類別的精確率/召回率
    • 生成任務: ROUGE 分數(與參考輸出比較),或 BERTScore 用於更細微的相似度
    • 提取任務: 精確匹配率、F1 分數(允許部分匹配)

    定性評估

    定量指標並不能告訴你一切。手動審查 50-100 個輸出:

    • 格式是否一致?
    • 語氣是否正確?
    • 模型是否正確處理邊緣案例?
    • 有沒有幻覺模式(錯誤但聽起來合理的輸出)?

    在你查看輸出樣本之前,不要相信準確率數字。高準確率有時會掩蓋系統性失敗模式。

    部署

    使用 Ollama

    # 安裝 Ollama
    brew install ollama  # macOS
    # 或: curl -fsSL https://ollama.ai/install.sh | sh  # Linux
    
    # 創建指向你的 GGUF 的 Modelfile
    echo "FROM ./llama3-finetuned.Q5_K_M.gguf" > Modelfile
    
    # 導入模型
    ollama create my-llama3 -f Modelfile
    
    # 運行
    ollama run my-llama3

    Ollama 暴露了 OpenAI 相容的 API(localhost:11434/v1),因此任何使用 OpenAI 客戶端庫的應用程式都可以無縫切換到你的本地模型。

    使用 llama.cpp

    對於最大控制,直接使用 llama.cpp:

    # 構建 llama.cpp(Apple Silicon 上帶 Metal 支援)
    cmake -B build -DLLAMA_METAL=ON
    cmake --build build --config Release
    
    # 運行你的微調模型
    ./build/bin/llama-cli \
      -m ./llama3-finetuned.Q5_K_M.gguf \
      -n 512 \
      --temp 0.7 \
      -p "你的提示在這裡"

    llama.cpp 比 Ollama 更底層,但讓你對批次大小、線程和推理參數進行精細控制。

    量化選擇

    從 Ertas 匯出你的微調模型時,選擇適合你的硬體的量化:

    • Q4_K_M: 8-16 GB 記憶體——最小的文件大小,對大多數任務的準確率影響很小
    • Q5_K_M: 24 GB 記憶體——品質和大小之間的最佳平衡
    • Q8_0: 32 GB 以上記憶體——接近全精度品質

    使用 Ertas Studio 工作流程

    1. 將 JSONL 訓練資料上傳到 Ertas
    2. 選擇 Llama 3.1 8B(或 70B,如果需要)作為基礎模型
    3. 配置 LoRA 參數(或使用默認值)
    4. 開始訓練——通常 8B 模型在 1,000 個範例下需要 20-40 分鐘
    5. 監控訓練面板中的損失曲線
    6. 下載為 GGUF(你的目標量化等級)
    7. 用 Ollama 部署或直接用 llama.cpp

    Ship AI that runs on your users' devices.

    Ertas 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