
安全回滚微调模型:部署策略指南
部署了重新训练的模型却出了问题?了解 blue-green、canary 和 shadow 部署策略,让您在几秒内(而不是几小时)回滚微调模型。
你在周一部署了重新训练的模型。评估套件通过了。延迟看 起来正常。团队很有信心。
到了周三,支持工单翻了一倍。客户反馈 AI "不再理解"他们的请求。一个之前运行完美的分类任务现在有 30% 的误分类率。有人问:我们多快能回滚?
如果答案是"让我找到旧模型文件,然后想办法重新加载它「,你有一个部署问题。如果答案是」30秒,我翻转一下配置",你有一个部署策略。
本文介绍三种部署策略,让回滚变得快速、安全且日常化。
为什么微调模型部署会失败
在讨论回滚之前,了解部署为何会出问题是有帮助的。微调模型在生产环境中失败有四个一致的原因:
对近期数据过拟合。你用上个月的数据重新训练。这些数据过度代表了某个模式。模型对该模式变得非常擅长,但对其他一切都变差了。你的评估套件没有发现,因为测试集有相同的分布偏差。
评估缺口。你的测试套件覆盖了 85% 的真实使用场景。另外 15% 包括边缘情况、罕见类别和新颖措辞,旧模型通过泛化能力来处理。新模型在微调过程中失去了这种泛化能力。评估说"通过"。生产环境却不这么认为。
分布漂移。你收集训练数据和部署之间,生产数据发生了变化。新产品功能、新客户群体、季节性模式。模型是为上一季度的现实训练的。
基础模型不兼容。你更新了基础模型(比如从 Llama 3.1 到 Llama 3.2)并应用了现有的 LoRA 适配器。适配器是为旧基础模型训练的。权重不对齐。输出以微妙、难以检测的方式退化。
这些故障各有不同的修复方法。但它们都有相同的紧急需求:尽快恢复旧模型到生产环境。
策略 1:Blue-Green 部署
Blue-green 部署是最简单的策略,也是你应该首先实施的。
工作原理
你维护两个模型槽位:blue 和 green。在任何时候,一个是"活跃的「(服务生产流量),一个是」待命的"(已加载并就绪但未服务)。
当你部署新模型时:
- 将新模型加载到待命槽位
- 对待命槽位运行冒烟测试 — 10-20 个代表性提示
- 将路由配置切换到新槽位
- 旧模型保持在之前的槽位中已加载
当你需要回滚时:
- 将路由配置切回旧槽位
- 完成
回滚时间:不到 10 秒。 这是一个配置变更,不是模型重新加载。
实现方式
对于基于 Ollama 的部署,这意味着运行两个模型实例。你的应用程序根据配置标志路由到其中一个:
# Config: model_routing.yaml
active_slot: "green"
blue:
model: "customer-support-v2.1"
endpoint: "localhost:11434"
green:
model: "customer-support-v2.2"
endpoint: "localhost:11435"
回滚就是将 active_slot 从 "green「 改为 」blue" 并重新加载配置。无需模型加载。无需文件交换。无需停机。
权衡
代价是内存。你需要足够的 RAM 来同时保持两个模型加载。对于 Q4 量化的 7B 模型,大约需要 8-10 GB。对于大多数部署服务器来说,这是可以管理的。对于内存预算紧张的边缘部署,考虑后面描述的适配器回滚方法。
Blue-green 适合以下情况:你有足够的内存,你想要最快的回滚速度,部署频率不高,维护两个已加载的模型是实际可行的。
策略 2:Canary 部署
Canary 部署在问题影响所有用户之前捕获它。你不是一次性切换 100% 的流量,而是逐步增加。
工作原理
- 在生产模型旁边部署新模型
- 将 5% 的流量路由到新模型
- 监控关键指标 2 小时
- 如果指标稳定,增加到 25%
- 再监控 4 小时
- 如果指标仍然稳定,提升到 100%