跳到主要内容

孤儿适配器难题:当你的微调模型寿命超过其基础模型时

· 阅读需 14 分钟
Tian Pan
Software Engineer

一名高级工程师在六个月前离职了。她负责管理用于路由客户支持工单的分类器适配器——这是一个基于 847 个手动标注样本训练的 32 秩 LoRA,挂载在一个还有 43 天就要停用的基础模型上。没人记得为什么从最初的 2,000 个样本中选出了这 847 个。训练数据存在一个 S3 存储桶里,由于其生命周期策略,超过一年的对象会被自动清除。她的笔记本电脑已被抹除。那个微调笔记本(notebook)中有一个单元格调用了一个预处理函数,该函数是从她个人的 dotfiles 仓库导入的,而现在那个仓库是私有的。

这就是“孤儿适配器”(Orphan Adapter)——一个比其维护者、数据甚至其所基于的基础模型寿命更长的微调模型。它存在于你的生产栈中,路由着真实的流量,而团队中没人能重新构建它。停用邮件并没有制造这场危机,它只是揭露了危机。

参数高效微调(PEFT)本应是廉价且可丢弃的。LoRA 的核心卖点是你不需要承诺进行全面的重新训练——你只需交付一个小的增量(delta),快速迭代,然后将其扔掉。但在实践中,适配器像任何其他承重构件一样不断累积。它们被固定下来,在配置中命名,在评估(evals)中被引用,然后被遗忘。微调成本低的特性是真实的,但“重新构建成本低”的假设却并非如此。

为什么适配器寿命比开发者长

微调模型很容易产生,而这恰恰使得它们很容易被遗弃。基础模型的升级是罕见且引人注目的——整个团队都会阅读停用通知。适配器的重建则是频繁且隐形的——能复现它的人通常是那个季度刚好负责该项目的人。在两年的时间里,经历三次基础模型迁移和四次团队重组后,所有权逐渐消失,而适配器却仍在处理流量。

具体的失效模式是,适配器承载了一个组织未跟踪的依赖:基础模型版本。在某个模型上微调的 LoRA 适配器不能直接应用于另一个模型而不进行重新训练,因为低秩增量(low-rank deltas)是在基础模型的权重空间中定义的。当该基础模型退役时,其上构建的每个适配器都会变成必须从源码重建的产物。这里的“源码”意味着精确的训练数据、精确的训练代码、精确的超参数以及精确的随机种子。丢失其中任何一项,“重新训练”就会变成“在截稿压力下,凭感觉近似、祈祷并重新部署”。

OpenAI 的历史证明了这种迭代有多激进。最初的 GPT-3 基础模型——ada、babbage、curie、davinci——在 2024 年 1 月被关闭。在这些模型上训练的微调版本在那一刻起就彻底无法访问了。替代的基础模型 babbage-002 和 davinci-002 在 2024 年 10 月停止接受新的微调任务。Anthropic 现在承诺对公开发布的模型提供至少 60 天的通知,这比其他方案有所改进,但对于任何非平凡的任务,这依然压缩了重建和重新验证的时间线。两个月的时间并不充裕,不足以找回不在岗的负责人、恢复训练数据,并针对一套参照旧模型校准的评估套件重新验证行为。

没人配备人力的生命周期错配

基础模型的生命周期通常以季度或几年为单位。微调项目的生命周期以周为单位。团队重组的生命周期以月为单位。默认情况下,这三个时钟是不同步的。如果组织将微调视为一次性事件而非持续循环,最终就会得到一批所有权早已过期的适配器,即使适配器本身仍在运行。

这种组织“异味”(org smell)非常明显:当你问“谁拥有这个适配器?”时,真实的答案是“两年前发布它的那个团队,但其中两个人走了,第三个人现在在另一个产品线”。这不是人员问题,而是生命周期设计问题。适配器需要按照基础模型的进度表进行维护,但人员配置模型却是按照项目的进度表划分的。在这种约束下,每个适配器最终都会变成孤儿。

这种模式在不同公司不断重复,因为生产适配器的动力是强烈且局部的——团队想要特定的行为,微调能让他们最快达成目标;而维护适配器的动力则是分散且遥远的。没人会因为成功地针对新基础模型重新训练了一个两年前的适配器、并保证行为不变而获得晋升。他们晋升是因为发布了最初的版本。

与基础模型生命周期挂钩的重训节奏

解决办法是停止将适配器重训视为由停用邮件触发的被动事件。相反,应明确地将适配器重训与基础模型的生命周期挂钩,使重新验证(re-qualification)成为团队熟知的常规操作。

一个可行的节奏如下。一旦新的基础模型层级正式发布(GA),基于上一层级构建的所有适配器都会进入“影子重建”(shadow rebuild)状态。自动化作业会使用其提交的数据集在新的基础上重新训练每个适配器,针对两个版本运行适配器的行为评估套件,并标记超出设定阈值的偏差。重建并不会立即替换生产环境——它提供了一个早期信号,表明适配器可以在停用时限倒计时之前完成迁移。

这只有在新的基础模型到来时,三个先决条件已经具备的情况下才有效。每个适配器的训练数据必须伴随持久的哈希值(hash)进行存储,并且其保留策略要长于最现实的基础模型生命周期——而不是存在一个默认会清除数据的存储桶中。训练代码必须提交到版本控制系统中,并在适配器的元数据中记录精确的提交哈希,而不是存在个人笔记本里。超参数、随机种子和环境依赖必须被固定在重训作业无需人工解释即可读取的规范(spec)中。

做得好的组织会将每个适配器视为拥有一份“重建配方(rebuild recipe)”——这是一个自给自足的可执行规范,可以在任何机器上根据提交的输入重新创建适配器。这份配方会通过实际运行而非仅凭检查来定期测试。如果一个适配器的重建配方六个月没运行过,就默认为已损坏,直到被证明完好。因为预处理代码、数据路径和依赖版本的无声腐蚀是默认状态。

行为指纹测试套件

加载中…
References:Let's stay in touch and Follow me for more thoughts and updates