微调可以调整模型的权重,以更好地适应特定任务或领域,从而帮助我们更充分地利用预训练的大型语言模型。这意味着你能够以比纯粹的提示工程更低的成本和延迟获得更高质量的结果。在本文中,我们将简要介绍大型语言模型的微调原理,以及如何使用云基础设施实现最先进的微调技术。
为什么要对大型语言模型进行微调?
成本效益
与提示相比,微调通常可以更有效且更高效地引导大型语言模型的行为。在一组示例上训练模型不仅可以缩短精心设计的提示,还可以节省宝贵的输入标记,同时不会牺牲质量。另外,你可以使用一个更小的模型,这反过来会降低延迟和推断的成本。
例如,与 GPT-3.5 这类的现成模型相比,经过微调的 Llama 7B 模型在每个标记基础上的成本效益更高(约为 50 倍),并且性能相当。
常见用例
微调尤其适合强调基本模型中的固有知识、自定义响应的结构或语调,或教模型特定领域的指令。常见的用例包括:
- 结构化输出:生成结构化数据,如 JSON 或 HTML。
- 风格一致:生成独特风格的文本,比如模仿特定媒体或企业高管的语气。
- 领域特有的指令:企业文件的分类、法律文档分析等。
对于需要将附加知识嵌入基本模型的任务,例如引用企业文件,检索增强生成(Retrieval Augmented Generation,RAG)这类的技术可能更合适。你还可以结合使用微调与 RAG 系统,通过微调省却提示标记,而 RAG 为添加输入上下文提供了空间。

通过云端平台微调
微调最大的问题之一通常是基础设施开销,因为准备训练所需的 GPU 就需要耗费不少精力和成本。无服务器云计算平台能够帮助你轻松在云中运行代码,只需几行代码即可附加按需付费的 GPU。
许多开源项目提供了用于微调大型语言模型的即用模板,例如针对 Llama 2 和 Mistral 的微调仓库。这些模板简化了环境配置和依赖管理。
微调步骤详解
1. 选择基础模型
可供我们选择的大型语言模型有很多,每个都有其独特的优势和劣势。许多模型声称在各种基准测试中是'市场上最好的开源大型语言模型',但实际上你可能需要尝试多个模型,才能确定哪个最适合自己的用例。每个开源模型家族通常还会提供多个不同大小的模型,例如 Llama 2 7B 与 Llama 2 70B。
除了这些基础模型外,还有在特定数据集上进一步微调的模型。例如 Code Llama 作为基础模型可能比普通 Llama 2 更合适,因为前者已经过微调,能够生成结构化输出。我们可以利用这些已经过微调的模型尝试进一步的微调。
2. 准备数据集
数据集的质量是否与你希望大型语言模型执行的任务密切关联对于成功微调至关重要。你可以根据微调策略和上述基础模型的选择,按照不同的说明来格式化这个数据集。常见的结构是 JSONL 或 CSV 文件,你可以通过其对象键轻松获取数据。
为了评估训练运行的效果,你应该将数据集分割为训练集和验证集。
A. 创建提示
在大多数情况下,数据集中的每个样本在传递到模型之前都必须转换为带有指令的字符串提示。在提示中加入指令有助于引导模型根据给定的输入生成最佳输出。每个训练样本最终的结构大致如下:
Instruction: [指令内容]
Input: [输入内容]
Output: [期望输出]
请注意,在推理模型的微调时,提示必须使用的模板与训练过程中使用的模板相同,这样才能获得最佳结果。
B. 添加特殊 Token(可选)
你可能希望在创建提示时加入特殊 token,这些 token 对于模型和任务来说有着特定含义的符号。在微调时,这些 token 可作以下用途:
- 标记响应的开始和结束。
- 分隔列表中的多个项。
- 突出显示输入或输出的特定部分。
特殊 token 有两种类型:


