模型微調與部署
前言
大模型很強,但它不懂你的業務。 GPT-4 能寫詩、能寫程式,但它不知道你公司的產品術語、不瞭解你行業的專業規範。微調(Fine-tuning)就是讓通用大模型「學會」你的專業知識的過程——就像給一個博學的通才做崗前培訓,讓它變成你的領域專家。
這篇文章會帶你學什麼?
學完這章後,你將獲得:
- 流程認知:掌握從資料準備到模型上線的完整微調流水線
- 資料工程:瞭解微調資料的格式要求和品質標準
- 高效微調:理解 LoRA 等參數高效微調技術的原理和優勢
- 模型壓縮:掌握量化技術如何讓大模型在消費級硬體上執行
- 部署實踐:瞭解模型服務的主流架構和選型策略
| 章節 | 內容 | 核心概念 |
|---|---|---|
| 第 1 章 | 微調流水線 | 資料→訓練→評估→部署 |
| 第 2 章 | 訓練資料 | 資料格式、品質控制 |
| 第 3 章 | LoRA 微調 | 低秩適配、參數高效 |
| 第 4 章 | 模型量化 | FP16、INT8、INT4 |
| 第 5 章 | 模型部署 | 推理服務、API 閘道器 |
0. 全景圖:為什麼需要微調?
大語言模型的訓練分為兩個階段:預訓練和微調。預訓練是在海量通用資料上學習語言能力,微調是在特定任務資料上學習專業能力。
打個比方:預訓練像是上大學——學習通識知識,什麼都懂一點;微調像是入職培訓——針對具體崗位學習專業技能。
什麼時候需要微調?
- 特定輸出格式:需要模型始終以固定 JSON 格式輸出
- 專業領域知識:醫療、法律、金融等領域的專業術語和規範
- 語言風格遷移:讓模型用特定的語氣、風格回答(如客服話術)
- 小眾語言支援:提升模型在特定語言上的表現
- 成本最佳化:用小模型微調替代大模型呼叫,降低推理成本
1. 微調流水線:從資料到上線的完整旅程
微調不是「把資料丟給模型就完事」。它是一個嚴謹的工程流程,每個環節都會影響最終效果。
微调流水线演示
点击每个阶段,了解微调的完整流程
微调的第一步是选择一个合适的预训练基座模型。基座模型已经在海量数据上学习了通用的语言能力,我们要做的是在此基础上进行"专业化训练"。
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2-7B")微調的五個階段
- 資料準備:收集、清洗、標註訓練資料,這是最耗時也最關鍵的環節
- 模型選擇:選擇合適的基座模型(Base Model),如 Llama 3、Qwen、Mistral
- 訓練配置:設定學習率、batch size、epoch 數等超參數
- 訓練執行:在 GPU 上執行訓練,監控 loss 曲線和評估指標
- 評估上線:在測試集上評估效果,通過後部署為 API 服務
| 階段 | 關鍵動作 | 常見陷阱 |
|---|---|---|
| 資料準備 | 清洗、去重、格式化 | 資料品質差導致模型「學壞」 |
| 模型選擇 | 評估基座模型能力 | 模型太大訓練不動,太小效果差 |
| 訓練配置 | 調整超參數 | 學習率過高導致災難性遺忘 |
| 訓練執行 | 監控 loss 和指標 | 過擬合、訓練不收斂 |
| 評估上線 | A/B 測試、灰度發布 | 測試集洩漏導致評估虛高 |
2. 訓練資料:微調效果的天花板
在微調中有一句老話:「Garbage in, garbage out」。訓練資料的品質直接決定了微調效果的上限。100 條高品質資料的效果,往往好過 10000 條低品質資料。
训练数据格式演示
切换不同格式,了解微调数据的组织方式
最常见的微调数据格式。每条数据包含一个指令(instruction)、可选的输入(input)和期望的输出(output)。适合训练通用助手类模型。
微調資料的三種常見格式
- 指令格式(Instruction):最常用的格式,包含 instruction(指令)、input(輸入)、output(期望輸出)三個欄位。適合訓練模型遵循指令。
- 對話格式(Chat):多輪對話形式,包含 system、user、assistant 角色的訊息列表。適合訓練聊天機器人。
- 補全格式(Completion):簡單的 prompt-completion 對,適合文字生成、程式碼補全等場景。
3. LoRA:用 1% 的參數實現 90% 的效果
全量微調(Full Fine-tuning)需要更新模型的所有參數——對於一個 70B 參數的模型,這意味著需要數百 GB 的視訊記憶體和大量的 GPU 算力。對大多數團隊來說,這不現實。
LoRA(Low-Rank Adaptation)提供了一個優雅的解決方案:凍結原始模型參數,只訓練一組新增的低秩矩陣。這些矩陣的參數量通常只有原模型的 0.1%~1%,但能達到接近全量微調的效果。
LoRA 低秩适配原理演示
理解 LoRA 如何用极少参数实现高效微调
LoRA 的核心思想
原始模型的權重矩陣 W 是一個巨大的矩陣(如 4096×4096)。LoRA 不直接修改 W,而是在旁邊加一個「旁路」:W' = W + BA,其中 B 和 A 是兩個小矩陣(如 4096×8 和 8×4096)。訓練時只更新 B 和 A,原始 W 保持不變。
- 秩(Rank):r 值越大,表達能力越強,但參數量也越多。通常 r=8~64 就夠用
- 合併部署:訓練完成後,可以把 BA 合併回 W,推理時零額外開銷
4. 模型量化:讓大模型「瘦身」
一個 70B 參數的模型,如果用 FP32(32 位浮點數)儲存,需要 280GB 視訊記憶體——沒有幾塊頂級 GPU 根本跑不起來。量化(Quantization)技術透過降低數值精度來壓縮模型體積,讓大模型能在消費級硬體上執行。
模型量化演示
拖动滑块,直观感受不同精度下的模型体积、速度与质量变化
FP32(32位浮点数)是模型训练时的默认精度。每个参数用 32 位存储,精度最高但体积最大。通常只在训练阶段使用,推理时很少直接使用 FP32。
量化的核心權衡
量化本質上是精度換空間的權衡。FP32 → FP16 幾乎無損,INT8 有輕微損失,INT4 會有明顯但通常可接受的品質下降。關鍵是找到你場景下的最佳平衡點。
- FP16(半精度):體積減半,品質幾乎無損,是訓練和推理的預設選擇
- INT8(8 位整數):體積再減半,品質損失很小,適合大多數推理場景
- INT4(4 位整數):體積僅為 FP32 的 1/8,品質有一定損失,適合資源受限場景
5. 模型部署:從實驗室到生產環境
模型訓練好了,量化壓縮了,最後一步是把它部署成可供呼叫的服務。模型部署不只是「把模型跑起來」,還涉及並行處理、負載均衡、成本控制等工程問題。
模型服务架构演示
点击不同部署方案,对比其特点与适用场景
将模型封装为 RESTful API 或 gRPC 服务,通过 HTTP 请求调用。适合需要实时响应的在线应用,如聊天机器人、智能客服、内容生成等。是目前最主流的部署方式。
三種主流部署方案
- API 服務商:直接使用 OpenAI、Anthropic 等廠商的 API。零維運,按 token 付費,適合快速驗證和中小規模使用。
- 自託管推理服務:用 vLLM、TGI 等框架在自己的 GPU 伺服器上部署。成本可控,資料不出域,適合有隱私要求或大規模呼叫的場景。
- Serverless 推理:使用 AWS SageMaker、Replicate 等平台,按請求付費,自動擴縮容。適合流量波動大的場景。
總結
模型微調與部署是讓大模型從「通用工具」變成「專業助手」的關鍵環節。從資料準備到模型上線,每一步都需要工程化的思考和實踐。
回顧本章的關鍵要點:
- 微調是崗前培訓:讓通用模型學會特定領域的知識和行為模式
- 資料品質決定上限:100 條高品質資料勝過 10000 條低品質資料
- LoRA 是效率之王:用不到 1% 的參數實現接近全量微調的效果
- 量化是部署利器:INT4 量化讓 70B 模型在單卡上執行成為可能
- 部署方案因地制宜:快速驗證用 API,大規模用自部署,波動大用 Serverless
延伸閱讀
- Hugging Face PEFT 文件 - 參數高效微調庫官方文件
- vLLM 文件 - 高效能 LLM 推理引擎
- Unsloth - 2x 加速的 LoRA 微調框架
- GGUF 格式說明 - llama.cpp 使用的量化模型格式
- OpenAI Fine-tuning Guide - OpenAI 官方微調指南