
模型蒸餾解說:以零推理費用運行 Sonnet 品質輸出
模型蒸餾完整指南——如何將大型前沿模型(如 Claude Sonnet)的能力轉移到小型本地模型,以零持續推理費用實現相當的品質。
你上個月的 Claude Sonnet 帳單是 $2,400。這個月會更高,因為你增加了三個新客戶。下個月還會更高。趨勢很明顯,而且指向唯一一個方向:上漲。
模型蒸餾是打破這個循環的工程技術。你把嵌入在大型、昂貴的前沿模型中的知識壓縮成一個小型、本地的模型,在你自己的硬體上以零邊際推理成本運行。不是降低成本。是零成本。
這不是理論。在生產中運行蒸餾模型的團隊報告說,在其特定任務上達到教師模型 85-95% 的品質,推理費用在每月帳目上四捨五入為 $0.00。
蒸餾實際上是什麼
蒸餾是一種訓練技術,大型「教師」模型生成標記輸出,而較小的「學生」模型學習重現這些輸出。學生不需要學習教師知道的一切。它只需要學習你關心的特定任務。
這樣思考:Claude Sonnet 可以寫詩、除錯 Rust 程式碼、摘要醫學研究,以及分類客戶支援票。你只需要它分類客戶支援票。比教師小 50 倍的模型可以非常好地學習那一個任務,因為任務空間足夠窄,以至於一個小模型可以完全覆蓋。
關鍵洞察:前沿模型是標記者,而不是最終產品。 你對 Claude 或 GPT-4o 的每次 API 呼叫都是一個潛在的訓練範例。昂貴的模型一次性完成困難的認知工作。便宜的模型學習無限次地複製那個工作。
為什麼小模型能在狹窄任務上匹敵大模型
這似乎違反直覺。一個 7B 參數的模型怎麼能匹敵一個 200B 以上參數的模型?答案在「狹窄」這個詞上 。
大型語言模型將其參數分配在龐大範圍的能力上。Claude Sonnet 可以討論量子物理、中世紀歷史、TypeScript 泛型和法國烹飪。這些參數中的大多數與你的分類任務無關。
當你在你特定任務的 2,000 個高品質範例上微調小型模型時,你將所有模型的容量集中在一件事上。7B 模型不需要討論量子物理。它需要以 94% 的準確率將支援票分類為 12 個類別。這在專注小型模型的能力範圍內。
來自多個實驗室的研究確認了這種模式。在受約束的任務上——分類、提取、格式化、領域問答——3B-8B 範圍內的微調模型持續實現前沿模型效能的 85-95%。在某些任務上,它們超過了前沿模型,因為微調消除了通用模型有時表現出的不一致性。
蒸餾工作流程
過程有四個階段。每個都很簡單。
第一階段:精確定義你的任務
這是大多數團隊急於完成的步驟,也是最重要的步驟。
定義良好的任務具有:
- 清晰的輸入格式。 模型究竟接收到什麼?一條客戶訊息?一個文件?一個結構化的 JSON 對象?
- 清晰的輸出格式。 模型究竟應該產生什麼?一個類別標籤?一個 JSON 對象?1 到 10 之間的分數?
- 有界範圍。 任務應該足夠窄,使你可以描述完整的輸出空間。「分類到 12 個類別之一」是有界的。「寫一個深思熟慮的回應」不是。
- 可測量的品質。 你需要一種對輸出評分的方法。分類的準確率,提取的 F1 分數,格式化的完全匹配。
如果你無法清楚地定義這四件事,停下來。蒸餾適用於定義良好的任務。模糊的任務產生模糊的結果。
第二階段:生成教師輸出
訓練資料有兩個來源:
生產日誌。 如果你已經在生產中使用 Claude 或 GPT-4o,你有日誌。每個輸入-輸出對都是一個訓練範例。這是最好的資料來源,因為它反映了你真實世界的輸入分佈。
合成生成。 以程式化方式創建多樣化的輸入,並通過教師模型運行它們 。對於支援票分類器,生成涵蓋所有 12 個類別的票變體,包括邊緣案例和模糊輸入。
目標:1,500-3,000 個範例。 這不是筆誤。你不需要數百萬個範例。對於定義良好的狹窄任務,1,500-3,000 個高品質範例足以獲得強大的效能。更多資料有幫助,但對於大多數分類和提取任務,超過 3,000 個範例後回報迅速減少。
第三階段:微調學生模型
選擇你的學生模型。對於大多數任務,Llama 3.3 8B 或 Qwen 2.5 7B 是強大的選擇。它們足夠大,可以處理真實世界的複雜性,足夠小,可以在適度的硬體上運行。
蒸餾的微調配置:
- 方法: LoRA(秩 16-32 對大多數蒸餾任務已足夠)
- 學習率: 2e-4 到 5e-4
- 訓練輪次: 3-5(在第 3 輪後注意過度擬合)
- 批次大小: 4-8
- 訓練時間: 30-90 分鐘,取決於資料集大小和硬體
在 Ertas 上的訓練費用:標準蒸餾運行通常為 $5-15。在你自 己的 GPU 上:30-90 分鐘計算的電費。
第四階段:與教師進行評估
從你的資料集中保留 10-15% 用於評估。在相同的保留輸入上運行教師模型和學生模型。比較輸出。
對於分類任務,你在看準確率。蒸餾良好的模型通常在保留集上與教師達到 90-95% 的一致性。對於提取任務,測量提取字段的 F1 分數。對於格式化任務,測量輸出架構的完全匹配率。
如果學生與教師的得分低於 85%,你可能需要更多訓練資料、更好的資料整理或更大的學生模型。
費用計算
這是蒸餾變得引人注目的地方。讓我們使用真實數字。
情境:每月處理 50,000 次請求的客戶支援分類器。
使用 Claude Sonnet API:
- 平均輸入:200 個 token,平均輸出:50 個 token
- 每次請求費用:約 $0.0019(按每百萬輸入/輸出 token $3/$15 計算)
- 每月費用:$95/月
- 年度費用:$1,140/年
使用在本地運行的蒸餾 Llama 8B:
- 一次性訓練費用:$10-15
- 硬體:在任何具有 8GB 以上 VRAM 的機器上運行,或具有 16GB RAM 的 CPU
- 每月推理費用:$0
- 年度費用:$10-15 總計
盈虧平衡點約為 2 週。之後,每次推理都是免費的。
將此擴展到運行 10 個客戶端模型的機構,每個每月處理 50,000 次請求:
- API 方法:每月 $950,每年 $11,400
- 蒸餾模型:一次性 $100-150,然後每月 $0
這是每年回到你口袋的 $11,250。用於做完全相同的工作。
哪些任務蒸餾效果好(哪些不好)
並非每個任務都是蒸餾的候選者。以下是誠實的評估。
蒸餾效果好的任務
分類。 將輸入分類到預定義的標籤中。支援票、情感、意圖偵測、文件分類。這些是理想的蒸餾目標。微調的小型模型常規地匹配或超越前沿模型,因為輸出空間受約束且定義明確。
提取。 從非結構化文字中提取結構化資料。姓名、日期、金額、地址、產品屬性。模式是可學習的,輸出格式是固定的。
格式化和轉換。 將資料從一種格式轉換為另一種格式。Markdown 到 HTML,自然語言到 SQL(使用受約束的架構),文字到具有定義架構的 JSON。轉換規則是有限且可學習的。
特定領域問答。 在有界知識領域內回答問題,特別是當你可以在提示中嵌入相關背景時。醫學術語查詢、法律條款解釋、產品常見問題回答。
蒸餾效果不好的任務
開放式生成。 撰寫行銷文案、創意內容或長篇文字,其中品質是主觀的。對於小型模型來說,輸出空間太大,無法用有限的訓練資料覆蓋。
複雜的多步驟推理。 需要邏輯演繹鏈、數學證明或跨不同領域的多跳推理的任務。這些依賴於大型模型從海量預訓練中積累的廣泛知識和推理深度。
新穎問題解決。 輸入定期落在訓練分佈之外的任務。如果你的生產輸入與你的訓練資料看起來明顯不同,蒸餾模型將會掙扎。
具有高度可變性的指令遵循。 用戶提供改變預期輸出格式的複雜、多樣指令的任務。蒸餾模型學習固定模式,而不是靈活的指令解釋。
實際例子:蒸餾 Claude Sonnet 用於支援分類
讓我們演練一個具體案例。一個 AI 機構正在為電子商務客戶構建客戶支援系統。系統需要將傳入的票分類到 12 個類別:訂單狀態、退貨、帳單、產品問題、運輸、技術問題、帳戶管理、投訴、讚美、功能請求、合作關係和垃圾郵件。
第一步: 定義 任務。輸入是客戶訊息(10-500 個詞)。輸出是包含類別、置信度分數和一行推理的 JSON 對象。
第二步: 生成訓練資料。使用 Claude Sonnet 對客戶歷史資料中的 2,500 張真實支援票進行分類。另外,生成 500 個涵蓋可能屬於多個類別的模糊票的合成邊緣案例。
第三步: 整理。審查 3,000 個範例。刪除 200 個 Claude 輸出不一致或明顯錯誤的範例。刪除 50 個重複項。最終資料集:2,750 個範例。
第四步: 在 Ertas Studio 中使用 LoRA 微調 Llama 3.3 8B。訓練時間:45 分鐘。費用:$8。
第五步: 在 275 個保留範例上評估。結果:與 Claude Sonnet 在類別分配上 93.1% 的一致性。在他們不一致的案例中,人工審閱顯示微調模型在 40% 的情況下實際上是正確的(Claude 在模糊案例上犯了錯誤,微調模型從整理的訓練資料中學會了更好地處理)。
第六步: 匯出為 GGUF,通過 Ollama 在客戶的伺服器上部署。推理延遲:平均 180ms,相比 Sonnet API 的 800-1,200ms。
結果:更快、更便宜、更一致,完全在客戶的基礎設施上運行。