微调的吸引力:超越 RAG 的局限
大型语言模型 (LLM) 的快速发展为定制这些强大的工具以适应特定任务和数据集开辟了令人兴奋的可能性。微调,即在一个较小的、特定领域的数据集上进一步训练预训练模型的过程,已成为检索增强生成 (RAG) 方法的一个引人注目的替代方案,特别是在处理专有或内部代码库和文档时。RAG 系统虽然有价值,但通常难以完全捕捉专门代码库或内部文档的细微差别和复杂性。它们依赖于从更大的语料库中检索相关信息,这可能会限制对特定上下文模式和关系的理解。另一方面,微调提供了使模型更深入地理解目标领域的潜力,从而产生更准确和相关的输出。
为微调调整代码的过程涉及将其转换为合适的格式,通常是一系列输入-输出对或结构化数据表示。这种转换所需的工作量可能会因代码库的复杂性和组织结构而异。然而,包括 Hugging Face 库和示例脚本在内的多种工具和技术可以显著简化此过程。
驾驭微调领域:挑战与考量
虽然微调具有巨大的潜力,但承认固有的挑战和权衡至关重要:
- 模型版本依赖性: 微调会将您绑定到基础模型的特定版本。升级到较新的模型可能需要重复微调过程,这可能会产生额外的时间和资源成本。
- 持续微调: 随着底层代码库的发展,微调模型可能会过时。持续微调虽然理想,但会带来一系列操作复杂性。
- 微调的炼金术: 尽管该领域取得了进展,但微调仍然保留了一定的艺术成分。获得最佳结果通常需要实验和仔细的参数调整。
- 生命周期管理: 管理微调模型的实际方面,包括数据更新、模型版本控制和服务基础设施,带来了重大挑战,尤其是在大型组织中。
微调实战:真实用例
尽管存在这些挑战,微调已在不同领域找到了成功的应用:
- 内部知识管理: 大型组织正在利用微调来增强其内部知识库。通过在专有代码、文档和工作流程上训练模型,他们可以创建理解组织特定上下文的智能助手。
- 预测性流程指导: 在复杂的工作流程中,微调模型可以预测流程中的后续步骤,指导用户完成复杂的任务。例如,可以开发软件来根据用户当前的活动突出显示用户界面 (DOM) 中的相关部分。这种情况下的微调通常涉及大量的 JSON 和 DOM 数据。
- 代码补全和生成: 微调,尤其是像 ‘fill in the middle’ 这样的技术,可以显著提高集成开发环境 (IDE) 中的代码补全能力。该过程通常涉及从文件中提取一段代码,并让 AI 预测缺失的部分。
- 金融、法律和医疗保健应用: 对数据隐私和准确性要求严格的行业越来越多地采用微调。这些应用包括:
- 交易和实时数据分析
- 标题解析和信号创建
- 医疗诊断和文档处理
- 模型蒸馏: 微调可用于将更大、更强大的模型的知识提炼成更小、更高效的模型。这对于在资源受限的设备上部署模型特别有用。
- 来自人类反馈的强化学习 (RLHF) 和直接偏好优化 (DPO): 拥有大量用户反馈数据的组织可以利用 DPO 等微调技术来使模型与用户偏好保持一致。
- 视觉语言模型 (VLM): 微调在增强 VLM 的能力方面被证明是无价的,特别是在以下任务中:
- 从结构化文档(表格、报告)中提取数据
- 改进图像理解和分析
- 促进 VLM 产生精确和结构化的输出
关于视觉语言模型的说明:
在桌面应用程序中使用小型、量化的视觉模型(2B-7B 参数)是一个特别有趣的发展。虽然原始图像理解能力可能不会因为轻量级的 LORA 微调而发生巨大变化,但引出结构化、详细和上下文相关输出的能力得到了显著增强。这种微调允许较小的模型可靠地产生符合下游应用程序期望的输出。
微调策略和技术
可以采用多种策略和技术来优化微调过程:
- 低秩自适应 (LoRA): LoRA 是一种内存高效的微调技术,它只关注更新模型参数的一小部分。这允许即使在资源受限的硬件上也能微调更大的模型。
- 量化: 降低模型参数的精度(例如,降至 4 位)可以显著减少内存占用和计算需求,使微调更容易实现。
- 聊天模板选择: 选择合适的聊天模板对于确保微调模型在对话环境中有效交互至关重要。许多用户忽略了这一步,导致性能欠佳。
- 广义秩保持优化 (GRPO): GRPO 是一种强大的推理微调技术,特别是在缺少标记的 ‘思维链’ 数据时。它允许仅使用输入和输出以及自定义奖励函数进行微调。
- 模型合并: 像 TIES(在 mergekit 中引入)这样的技术允许合并基础模型、微调模型(阶段模型)和聊天模型的权重。这可以创建一个最终模型,保留所有三个模型的优点。
- 迭代微调: 对于搜索应用程序,迭代地向 LLM 提供代码块或文档可以提高性能。这种方法可以缓解 ‘大海捞针’ 问题,即 LLM 在处理非常大的上下文时会遇到困难。
硬件和基础设施考量
微调的硬件要求取决于模型的大小和所选技术:
- 单 GPU: 对于较小的模型和实验,单个消费级 GPU(例如 4090、5090)可能就足够了。但是,训练仍然可能需要几个小时。
- 基于云的 GPU: RunPod、Vast.ai 和 Google Colab 等在线服务提供对高性能 GPU(例如 H100)的租用访问。对于较大的模型或较长的训练运行,这通常是最具成本效益的选择。
- 多 GPU 和多节点扩展: 虽然可行,但扩展到多个节点或 GPU 通常比在具有更大和更多 GPU 的单台机器中扩展更复杂。
- Apple Silicon (Mac): 具有充足统一内存(例如 128GB)的 Mac 可用于训练 LORA 适配器,尽管速度比 NVIDIA GPU 慢。
推理和部署
一旦模型经过微调,将其部署以进行推理就会带来一系列自身的考虑因素:
- 自托管: 自托管允许更大的控制和定制,但需要管理基础设施。像 vLLM(用于推理)和隧道解决方案(例如基于 SSH 的)这样的工具可以简化这个过程。
- 无服务器 LoRA 提供商: 像 Together AI 这样的服务提供 LoRA 适配器的无服务器部署,无需管理基础设施,并且通常除了基本模型价格外不产生额外费用。
- 量化模型: 部署微调模型的 4 位量化版本可以显著降低推理成本和资源需求。
- OpenAI 和 Google Cloud: 这些平台还提供微调和推理服务,提供可扩展和托管的解决方案。
成本因素
微调的成本可能会因所选方法而异:
- 租用 GPU: 租用 A100 GPU 几个小时的费用可能在两位数美元范围内。这是微调的一次性成本。
- 推理成本: 使用生成的模型运行推理可能会产生持续的成本,对于生产应用程序,每月可能达到数百或数千美元。
- 免费/低成本选项: Google Colab 提供免费的 GPU 时间(有限制),Kaggle 每周提供 30 个免费小时。这些平台适用于实验和较小规模的微调。
微调的未来
微调领域正在迅速发展。随着模型变得更有能力和效率,以及工具和技术不断改进,微调有望变得更加易于访问和具有影响力。对工具调用和结构化输出生成等任务的更好支持的开发将进一步增强微调在实际应用中的实用性。更易于访问的微调的趋势,特别是对于较小的模型、QLoRA 和 GRPO,为个人和较小的团队进行实验和创新开辟了可能性。