多租戶微調:SaaS 中的每個客戶 AI 模型
你的 SaaS 客戶想要了解他們資料的 AI,而不是通用回應。以下是如何使用 LoRA 適配器設計每個租戶的微調模型——包含真實存儲計算、費用分解和可擴展到數百個租戶的服務架構。
你的 SaaS 客戶想要了解他們的資料的 AI。不是你的訓練資料。不是你所有租戶的混合平均。他們的術語、他們的工作流程、他們的邊緣案例。
服務 80 家律師事務所的法律科技平台有 80 種不同的詞彙表。服務 50 個電子商務品牌的支援平台有 50 個不同的產品目錄、語調指南和升級政策。服務 30 個診所的醫療保健 SaaS 有 30 種不同的文件風格和專科特定縮寫。
通用 AI 給出通用答案。而通用答案是你的客戶在每次反饋調查中不斷要求「更好的 AI」的原因。
解決方法不是更好的提示。而是每個租戶的模型——這比你想象的更實際。
三種架構模式
為 SaaS 產品添加租戶感知微調恰好有三種方法。每種在費用、隔離和品質上做出不同的權衡。
模式 1:共享微調
你將所有租戶的訓練資料合並到一個資料集中,並微調一個單一模型。每個租戶都訪問同一個模型。
工作原理:
- 從所有租戶聚合訓練範例
- 在組合資料集上微調一個模型
- 所有 API 請求路由到同一個模型端點
優點: 簡單。一個模型需要管理,一個部署需要監控,一個微調需要執行。存儲費用最低——你只運行一個模型。
缺點: 模型學習的是所有租戶的平均值。如果租戶 A 使用「客戶」而租戶 B 使用「用戶」表示同一件事,模型學習的是模糊的中間值。更糟糕的是,租戶 A 的資料影響租戶 B 的回應。對於受監管的行業,這是一個合規問題。
何時有效: 當你的租戶是同質的時——相同的行業、相似的資料、相似的詞彙。如果你正在為牙科診所構建 SaaS,而它們都以類似的方式記錄程序,共享微調可能就足夠了。
模式 2:共享基礎上的每個租戶 LoRA 適配器
你一次微調一個基礎模型(或直接使用),然後為每個租戶創建一個小型 LoRA 適配器。在推理時,你加載基礎模型加上租戶的適配器。
工作原理:
- 部署一個基礎模型(例如 Llama 3.1 8B 或 Qwen 2.5 7B)
- 只使用那個租戶的資料為每個租戶微調 LoRA 適配器
- 在請求時,根據租戶 ID 加載基礎模型 + 正確的適配器
優點: 每個租戶都獲得真正理解其資料的模型。存儲很小——LoRA 適配器根據秩和目標模塊為 50-200MB,相比之下完整模型為 4-14GB。訓練快速且便宜。資料隔離是絕對的:租戶 A 的資料永遠不會接觸租戶 B 的適配器。
缺點: 你需要適配器熱交換基礎設施。在適配器之間切換時有一個小的延遲費用(冷交換通常為 50-200ms)。
何時有效: 這是大多數 SaaS 產品的正確答案。我們為 90% 的多租戶 AI 用例推薦這種架構。
模式 3:每個租戶的完整微調
你為每個租戶微調一個完整的模型。每個租戶獲得自己完全獨立的模型。
工作原理:
- 為每個租戶微調一個單獨的模型
- 獨立部署和服務每個模型
- 在模型層 ,租戶之間沒有共享基礎設施
優點: 最大隔離。最大定制化。每個模型可以是不同的大小、不同的基礎、不同的量化。你可以給企業租戶 A 一個 70B 模型,給初創租戶 B 一個 7B 模型。
缺點: 存儲和計算費用隨租戶數量線性擴展。管理 100 個獨立的模型部署是一個運營噩夢。每個租戶的微調費用高 10-50 倍。
何時有效: 擁有大量資料集(10 萬以上範例)、嚴格資料隔離要求和相匹配預算的企業客戶。想想銀行、國防承包商、大型醫院網絡。
存儲計算
這是決定通常自我做出的地方。以下是每種模式在不同租戶數量下的原始存儲費用:
| 租戶數 | 共享微調 | 每租戶 LoRA | 每租戶完整(7B Q4) | 每租戶完整(13B Q5) |
|---|---|---|---|---|
| 1 | 4-5 GB | 4-5.2 GB | 4-5 GB | 9-10 GB |
| 10 | 4-5 GB | 4.5-7 GB | 40-50 GB | 90-100 GB |
| 50 | 4-5 GB | 6.5-15 GB | 200-250 GB | 450-500 GB |
| 100 | 4-5 GB | 9-25 GB | 400-500 GB | 900-1,000 GB |
| 500 | 4-5 GB | 29-105 GB | 2-2.5 TB | 4.5-5 TB |
計算:秩 64 針對注意力層的 LoRA 適配器運行 50-200MB。Q4 量化的完整 7B 模型約為 4-5GB 。在 100 個租戶時,每個租戶 LoRA 花費你 5-20GB 總計(一個基礎模型加上 100 個適配器)。每個租戶的完整微調至少花費 400-500GB。
這僅在存儲上就有 20-50 倍的差異。而存儲是便宜的部分。
服務架構:適配器熱交換如何工作
只有在可以快速交換適配器時,每個租戶的 LoRA 模式才有效。以下是架構。
請求流程
傳入請求
→ 從身份驗證 token / 標頭提取 tenant_id
→ 檢查適配器緩存(內存中的 LRU)
→ 如果已緩存:路由到基礎模型 + 緩存適配器
→ 如果未緩存:從磁碟/S3 加載適配器(50-200ms)
→ 運行推理
→ 返回回應
使用 Ollama 運行
Ollama 支援在基礎模型上加載 LoRA 適配器。設置:
-
一個基礎模型在內存中。 一次加載你的基礎模型(例如
llama3.1:8b-q5_K_M)。它保持常駐。這花費約 6GB 的 VRAM。 -
磁碟上的適配器文件。 在目錄結構中存儲每個租戶的
.gguf適配器文件:/models/adapters/{tenant_id}/adapter.gguf -
請求路由。 你的 API 網關提取
tenant_id,選擇正確的適配器路徑,並創建引用基礎模型加上適配器的 Modelfile。 -
適配器緩存。 在 LRU 緩存中保持最近使用的適配器。對於大多數 SaaS 產品,80% 的流量來自 20% 的租戶。持有 10-20 個適配器的緩存以零交換延遲處理大多數請求。
延遲預算
| 操作 | 時間 |
|---|---|
| 租戶 ID 提取 | 低於 1ms |
| 緩存命中(適配器已加載) | 低於 1ms |
| 緩存未命中(從本地磁碟加載適配器) | 50-200ms |
| 緩存未命中(從 S3/對象存儲加載適配器) | 200-500ms |
| 推理(7B 模型,100 個 token 回應) | 500-2,000ms |
對於緩存的適配器,每個租戶的開銷可以忽略不計。對於冷交換,你一次添加 50-500ms——那個租戶的後續請求命中緩存。
擴展策略
- 少於 50 個租戶: 單個 GPU 服務器。所有適配器適合內存或緩存,交換速度快。
- 50-200 個租戶: 兩個 GPU 服務器,按 tenant_id 進行一致性哈希。每個服務器處理租戶的子集,改善緩存命中率。
- 200 個以上租戶: 帶 GPU 節點的 Kubernetes 集群。根據租戶活動模式預熱適配器。大多數 SaaS 產品永遠不會達到這一層。
資料隔離和合規
這是每個租戶 LoRA 適配器對共享微調的決定性勝利。