大模型什么时候应该进行微调
在当前的企业级人工智能应用中,经常遇到一个核心问题:如何选择合适的技术路径来实现业务目标。是直接使用闭源大模型的 API(如 ChatGPT、Claude),还是基于开源模型进行微调?许多公司在评估 LLM 托管和部署解决方案时,往往忽略了这一决策背后的成本、性能与数据隐私权衡。
本文将基于实际应用场景,深入分析何时应该使用封闭 API,何时需要进行模型微调,以及两者之间的技术边界。
封闭 API 的适用场景与局限
对于大多数通用型任务,尝试实现 ChatGPT API 通常是第一步。例如,您想总结文档、回答常见问题,或者在网站上安装聊天机器人。通常你会发现,ChatGPT 在多语言任务和通用知识问答上表现得相当不错。
成本考量
人们普遍认为这些模型太贵了。但以 0.002 美元/1K 代币的价格计算,您可以至少在 100 个样本上进行测试,并评估 LLM 是否适合您的特定应用程序。事实上,在每天数千次 API 调用或在该范围内的情况下,ChatGPT API 的成本往往比自行搭建自定义开源模型的托管基础设施更便宜。自建需要承担 GPU 硬件成本、运维人力、电力及网络开销。
RAG 架构的补充作用
一种常见的说法是,假设您想要回答有关数千或数万份内部文档的问题。在这种情况下,仅根据此数据训练或微调开源模型并向微调模型询问有关此数据的问题,并不一定是最优解。事实证明,这并不像听起来那么简单,因为维护高质量的数据集和训练流程本身就有门槛。
但 ChatGPT 有一个简单的解决方案可以回答包含大量上下文中的问题,即检索增强生成(RAG)。
其基本逻辑是将所有文档作为小文本块存储在向量数据库中。向模型提供所有必要信息以回答问题的问题已从模型架构转移到包含文档块的数据库。然后可以通过计算问题和文档块之间的相似性来找到相关文档。这通常是通过将块和问题转换为词嵌入向量,并计算块和问题之间的余弦相似度,最后仅选择高于特定阈值的块作为相关上下文来完成的。
最后,问题和上下文可以组合成如下提示,并输入 LLM API:
prompt = f"回答问题。上下文:{context} \n 问题:{question}"
您可能会问 - 为什么不将整个文档和问题输入提示中,而不是将其分成多个块?我们将文档分成块而不是将所有文档合并到一个提示中的原因是因为 LLM 对最大输入和输出长度有一定的限制。对于 ChatGPT,这是 4096 个令牌,或者大约 6-7 页文本。当答案明显存在于这些文档中时,将文档卸载到数据库并使用封闭的 LLM API 进行查询可能会很有效。
但在很多情况下,这些可能会产生次优结果。例如,如果您希望模型就某个利基主题提供专家观点,例如推测美国经济的财务前景,或者需要遵循特定的公司写作风格,单纯的 RAG+API 可能无法满足需求。
特定领域的大模型需求
好的,您尝试过 ChatGPT 或 BARD — 但您不喜欢它。答案有点不对劲。例如,您询问 ChatGPT:
'美国经济的通胀可能会持续多久?'
它返回了:
作为人工智能语言模型,我无法确定地预测未来,尤其是对于复杂的经济系统。不过,我可以为您提供一些信息和观点,可能有助于您了解当前的情况。
通货膨胀是一种复杂的现象,可能由多种因素引起,例如需求增加、供应限制……
不幸的是,这对你来说还不够好。当然,您可以向 ChatGPT 提供一些有关美联储主席杰罗姆·鲍威尔声明的最新消息。但这并不能为您提供与您交谈时所获得的同样丰富的领域经验。想想成为某个领域的专家需要什么。虽然其中一部分是阅读有关该主题的书籍,但也有很多是与该领域的主题专家互动,并从经验中学习。虽然 ChatGPT 接受过大量金融书籍的培训,但它可能还没有接受过顶级金融专家或其他特定领域专家的培训。那么如何才能让大模型成为金融领域的'专家'呢?这就是微调的用武之地。
大模型微调技术详解
在讨论微调 LLM 之前,我们先谈谈微调像 BERT 这样的小型语言模型,这在 LLM 之前很常见。对于像 BERT 和 RoBERTa 这样的模型,微调相当于传递一些上下文和标签。任务定义明确,例如从上下文中提取答案,或将电子邮件分类为垃圾邮件与非垃圾邮件。
然而,大型语言模型(LLM)之所以风靡一时,是因为它们可以通过改变你构建提示的方式无缝地执行多个任务,并且你拥有类似于与另一端的人交谈的体验。我们现在想要的是将大模型微调为某个学科的专家,并像'人'一样参与对话。这与在特定任务上微调 BERT 等模型有很大不同。
微调方法演进
最早的开源突破之一是斯坦福大学的一组研究人员对 7B LLaMA 模型进行了微调,他们将其称为 Alpaca,在 52K 指令上的价格不到 600 美元。不久之后,Vicuna 团队发布了 130 亿参数的模型,达到了 ChatGPT 质量的 90%。
最近,MPT-7B 转换器发布,可以摄取 65k 代币,是 ChatGPT 输入大小的 16 倍!培训从头开始,历时 9.5 天,花费 20 万美元。作为特定领域大模型的示例,彭博社发布了一个类似 GPT 的模型 BloombergGPT,该模型专为金融而构建,并且也是从头开始训练的。
最近在培训和微调开源模型方面取得的进展只是中小型公司通过定制大模型丰富其产品的开始。那么,您如何决定何时需要微调或培训整个特定领域的大模型?
全量微调 vs 参数高效微调 (PEFT)
- 全量微调 (Full Fine-tuning): 更新模型的所有参数。这需要大量的显存和算力,通常用于训练基础模型或需要深度适应特定领域分布的场景。成本较高,周期较长。
- LoRA (Low-Rank Adaptation): 冻结预训练模型权重,在旁路添加可训练的低秩矩阵。这种方法极大地减少了可训练参数量,使得在消费级显卡上微调大模型成为可能。目前业界的主流选择。
- QLoRA: 在 LoRA 基础上引入量化技术,进一步降低显存需求,支持在单张 24GB 显存的显卡上微调 7B 甚至更大模型。
数据准备策略
获得正确的指令需要仔细考虑。对于十万条左右的指令来说,微调模型并不是很昂贵,但数据质量至关重要。
- 指令格式: 采用 Alpaca 风格的 JSONL 格式,包含
instruction,input,output字段。 - 数据清洗: 去除噪声、重复数据,确保输出内容的准确性和安全性。
- 领域适配: 收集行业内的专业术语、案例库、合规要求文档,构建高质量的 SFT (Supervised Fine-Tuning) 数据集。
决策矩阵:何时选择微调
首先,重要的是要清楚地确定您所在领域的闭源 LLM API 的局限性,并证明让客户能够以极低的成本与该领域的专家聊天。
选择微调的时机
- 私有数据安全: 如果数据涉及高度敏感的商业机密或个人隐私,无法上传至第三方 API,必须本地化部署并微调。
- 特定风格与语气: 需要模型模仿特定的品牌语调、法律措辞或医疗报告格式,微调能更好地固化这种风格。
- 长期成本优化: 如果 API 调用量巨大且稳定,长期来看,自建微调模型的成本可能低于按 Token 付费的 API 费用。
- 幻觉抑制: 在垂直领域,通用模型容易产生幻觉。通过微调注入领域知识,可以显著减少错误信息的生成。
这让我想到了从头开始完全训练大模型的案例。是的,这很容易花费数十万美元,但如果你提出一个可靠的案例,投资者会很乐意参与。在最近接受 IBM 采访时,Hugging Face 首席执行官 Clem Delangue 评论说,很快,定制的大模型可能会像作为专有代码库很常见,也是在行业中保持竞争力的重要组成部分。
实施建议与最佳实践
评估指标
在微调完成后,不能仅依赖 Loss 下降来判断效果。应建立多维度的评估体系:
- 自动化评测: 使用 BLEU, ROUGE, Perplexity 等指标。
- 人工评测: 邀请领域专家对生成内容进行打分,关注准确性、流畅度和安全性。
- 基准测试: 在 MMLU, GSM8K 等公开基准上对比微调前后的表现。
部署与推理
微调后的模型通常需要针对生产环境进行优化:
- 量化: 使用 INT8 或 INT4 量化技术,减少显存占用,提升推理速度。
- 服务化: 使用 vLLM, TGI 等高性能推理框架,支持高并发请求。
- 监控: 建立日志系统,监控 Token 消耗、响应延迟及异常输入。
要点总结
应用于特定领域的大模型在行业中可能非常有价值。有增加成本和可定制性的 3 个级别:
- 闭源 API + 文档嵌入数据库: 第一个解决方案可能是最容易上手的,考虑到 ChatGPT API 的高质量 - 甚至可能为您提供足够好的(如果不是最好的)性能。而且很便宜!适合快速验证原型和通用任务。
- 微调 LLM: 微调 LLaMA 类模型的最新进展表明,在某些领域获得类似于 ChatGPT 的基准性能需要约 500 美元(基于 LoRA)。如果您有一个包含约 50-100k 指令或对话的数据库来微调基线模型,那么这可能是值得的。适合需要特定风格、私有数据或长期降本的场景。
- 从头开始训练: 正如 LLaMA 和更新的 MPT-7B 模型所示,这需要大约 100-200k 的成本,并且需要一两周的时间。适合拥有海量数据资源、追求极致性能差异化的头部企业。
现在您已经掌握了知识 - 继续构建您的自定义领域特定 LLM 应用程序!在选择技术路线时,请务必结合业务目标、数据敏感度及长期成本预算进行综合评估。


