如何训练LLM预训练模型及准备数据集:训前准备指南

1. 大模型语言模型训练的几种主流方法
训练大型语言模型(LLM)是一个复杂但回报丰厚的过程。根据不同的需求和资源,我们可以选择多种训练策略。
1.1 从头训练(Pre-training from Scratch)与全参数微调
这种方法指的是在一个大规模的、无标签的文本语料库上,从零开始训练一个全新的语言模型。
- 优点:可以根据特定领域或语言的需求,构建一个高度定制化的模型。
- 缺点:需要巨大的计算资源(数百甚至数千个GPU)、海量的数据和漫长的训练时间。成本极高,通常只有大型科技公司或研究机构能够承担。
1.2 无需训练:Few-shot Prompting
这是一种“即插即用”的方法,不涉及任何模型参数的更新。我们通过在输入中提供少量示例(shots),来引导模型理解任务并给出期望的输出。
- 优点:成本极低,无需训练,上手快。
- 缺点:性能受限于模型本身的泛化能力和Prompt的设计质量,对于复杂任务效果有限。
1.3 微调方案(Fine-tuning)
微调是目前应用最广泛的方法,它利用已经预训练好的模型(Foundation Model),在特定的、小规模的、有标签的数据集上进行进一步训练,以适应新的任务。
1.3.1 SFT (Supervised Fine-tuning)
SFT是最直接的微调方式,它使用高质量的“指令-回答”数据对来训练模型,让模型学会遵循指令并生成相应的回复。
1.3.2 持续预训练 (Continual Pre-training)
当我们的任务领域与原始预训练模型的领域差异较大时(例如,从通用新闻语料到医学文献),可以先在特定领域的无标签数据上进行持续预训练,然后再进行SFT。这有助于模型学习新领域的知识和语言风格。1
专业术语解释:持续预训练 vs. SFT
- 持续预训练 的目标是向模型注入新知识,使用的是无标签的领域文本,学习的是语言模型本身。
- SFT 的目标是教会模型如何遵循指令,使用的是有标签的“指令-回答”数据,学习的是一种“行为模式”。
1.3.3 强化学习:DPO / ORPO
- DPO (Direct Preference Optimization):一种更直接的强化学习方法,它通过“偏好数据”(即哪个回答更好)来优化模型,使其更符合人类的偏好。相比传统的RLHF,DPO更稳定且易于实现。1
- ORPO (Odds Ratio Preference Optimization):DPO的变种,进一步简化了流程,将指令微调和偏好对齐合并为一个阶段,效率更高。1
专业术语解释:DPO
DPO绕过了训练奖励模型的步骤,直接在偏好数据上优化语言模型。它将偏好学习问题转化为一个简单的分类问题,从而使得训练过程更加稳定和高效。
1.3.4 人类反馈强化学习 (RLHF / RLAIF)
- RLHF (Reinforcement Learning from Human Feedback):经典的对齐方法。首先训练一个奖励模型(Reward Model)来识别人类偏好的回答,然后用这个奖励模型作为信号,通过强化学习算法(如PPO)来优化语言模型。
- RLAIF (Reinforcement Learning from AI Feedback):RLHF的变种,使用一个更强大的AI模型来代替人类标注者,为数据提供偏好标签,从而降低成本和加速流程。
专业术语解释:RLHF
RLHF包含三个主要步骤:1. 监督微调一个初始模型;2. 收集人类对模型输出的偏好数据,训练一个奖励模型;3. 使用奖励模型通过强化学习优化初始模型。这个过程复杂但对齐效果好。
1.3.5 PEFT (Parameter-Efficient Fine-tuning)
PEFT旨在通过只微调模型的一小部分参数来降低训练成本。
- LoRA (Low-Rank Adaptation):通过在模型的某些层中注入低秩矩阵来进行微调,训练时只更新这些小矩阵的参数。
- QLoRA:LoRA的升级版,结合了4-bit量化技术,进一步将显存需求降低到惊人的水平,使得在消费级GPU上微调大型模型成为可能。
1.3.6 MoE (Mixture of Experts) 路由微调
MoE模型由多个“专家”子网络和一个“路由器”组成。在微调时,可以针对性地训练特定的专家或路由器,使其在特定任务上表现更出色。3
专业术语解释:MoE
想象一个团队,每个成员都是某个领域的专家。当一个任务来临时,路由器(项目经理)会判断这个任务应该交给哪个专家来处理。MoE模型就是这样工作的,它可以在不显著增加计算量的情况下,极大地扩展模型参数规模。
2. 基于预训练模型的增量微调
2.1 流行的开源预训练模型
| 模型 | 开发者 | 特点 | 官网/链接 |
|---|---|---|---|
| Llama 3 | Meta | 综合性能强,社区生态活跃,是目前最受欢迎的开源模型之一。 | https://ai.meta.com/llama/ |
| Qwen (通义千问) | 阿里巴巴 | 中文能力优秀,模型系列丰富(从1.8B到72B),并有专门的视觉语言模型。 | https://github.com/QwenLM/Qwen |
| DeepSeek | 深度求索 | 代码和数学能力非常突出,其Code系列模型在多个编程基准测试中名列前茅。 | https://www.deepseek.com/ |
| Mistral | Mistral AI | 技术领先,以其稀疏混合专家(SMoE)架构(如Mixtral 8x7B)而闻名,效率高。 | https://mistral.ai/ |
| Gemma | 源自其强大的Gemini模型,技术实力雄厚,提供了多种规模和变体。 | https://ai.google.dev/gemma | |
| ChatGLM | 智谱AI | 在中文处理上表现出色,拥有良好的社区支持和生态。 | https://github.com/THUDM/ChatGLM-6B |
2.2 各微调方案的优缺点及适用场景
| 微调方案 | 优点 | 缺点 | 擅长领域 |
|---|---|---|---|
| SFT | 实现简单,效果立竿见影,是大多数微调任务的起点。 | 需要大量高质量的标注数据,否则模型容易“学坏”。 | 任务导向型对话(客服、助手)、内容摘要、文本分类。 |
| 持续预训练 | 能有效将模型“拉到”新的知识领域,为后续微调打下坚实基础。 | 需要额外的领域语料和大量计算资源,成本较高。 | 专业领域知识注入,如法律、金融、医疗、特定公司文档。 |
| DPO / ORPO | 训练过程更稳定,无需训练独立的奖励模型,效率高。 | 偏好数据的构建需要精细的设计和标注成本。 | 提升模型的安全性、无害性,使其输出更符合人类普遍价值观。 |
| RLHF / RLAIF | 对齐效果的上限更高,能处理更复杂的偏好。 | 流程复杂,包含多个训练阶段,对超参数敏感,训练不稳定。 | 对内容质量、安全性和风格有极高要求的场景,如公共对话机器人。 |
| PEFT (LoRA/QLoRA) | 极大地降低了硬件门槛,使得在消费级GPU上微调大模型成为可能。 | 可能会牺牲少量模型性能,且需要仔细调整LoRA的秩等超参数。 | 个人开发者实验、快速原型验证、特定任务的轻量级定制。 |
| MoE路由微调 | 可以在不显著增加推理成本的情况下,极大扩展模型规模,提升专业性。 | 模型结构复杂,训练和推理框架支持有限,容易出现负载不均。 | 需要模型同时具备多种“专家能力”的复杂多任务场景。 |
2.3 主流微调框架
| 框架 | 开发者 | 优点 | 缺点 |
|---|---|---|---|
| Hugging Face TRL | Hugging Face | 官方支持,与transformers和peft无缝集成,文档完善。 | 抽象层次高,对于底层实现的定制化不够灵活。 |
| LLaMA-Factory | hiyouga (社区) | 一站式UI和CLI,支持海量模型和方法,预设配置丰富,非常易用。1 | 社区驱动,部分功能的稳定性和文档可能不如官方库。 |
| Unsloth | Unsloth AI | 极致的性能优化,能以2倍速度和更少显存进行微调,尤其擅长Llama和Mistral系列。5 | 主要针对性能优化,支持的模型和方法范围相对聚焦。 |
| Axolotl | OpenAccess AI | 基于YAML配置,高度可定制和可复现,支持多GPU和分布式训练。2 | 上手有一定学习曲线,需要熟悉其配置文件的写法。 |
| DeepSpeed | Microsoft | 专注于大规模训练的性能优化,提供了ZeRO等强大的显存优化技术。 | 框架较重,主要面向大规模分布式训练,对于单卡微调不够轻便。 |
2.4 GPU服务器配置建议
微调所需的显存主要取决于模型大小和微调方法。以下是一个基于经验的参考:
| 模型规模 | 微调方法 | 最低显存建议 (单卡) | 推荐GPU型号 |
|---|---|---|---|
| 7B | QLoRA (4-bit) | 8 GB | RTX 3060 / RTX 4060 (12GB+) |
| 7B | LoRA | 24 GB | RTX 3090 / RTX 4090 / A4000 |
| 7B | 全参数微调 | 80 GB | A100 (80GB) / H100 |
| 13B | QLoRA (4-bit) | 16 GB | RTX 3080 (12GB) / RTX 4070 / A10G |
| 13B | LoRA | 40 GB | A100 (40GB) |
| 34B (e.g., Qwen-32B) | QLoRA (4-bit) | 24 GB | RTX 4090 / A6000 |
| 34B | LoRA | 80 GB | A100 (80GB) / H100 |
| 70B | QLoRA (4-bit) | 48 GB | 2x RTX 4090 / A100 (80GB) |
| 70B | LoRA | 160 GB (多卡) | 2x A100 (80GB) / 2x H100 |
省钱小贴士:QLoRA 是个人开发者和小型团队的福音。通过使用4-bit量化,它能将显存需求降低到原来的1/4左右,使得在单张消费级显卡(如RTX 4090)上微调70B模型成为可能。
3. 增量微调的数据集准备:高质量数据的艺术
“Garbage in, garbage out.” 这句话在模型微调中是金科玉律。高质量的数据是决定微调成败的关键。下面我们详细探讨几种主流的数据集格式及其构建方法。
3.1 经典对话格式 (Conversation Format)
这是最基础的SFT数据格式,模拟一问一答。
简单场景示例:
{"conversations": [{ "from": "human", "value": "你好,你叫什么名字?" },{ "from": "gpt", "value": "我是一个大型语言模型,由[你的公司]训练。"}]
}
复杂场景示例(企业客服机器人):
{"conversations": [{ "from": "human", "value": "我的订单(No. 2023092512345)一直显示在处理中,已经三天了,请问是什么情况?" },{ "from": "gpt", "value": "您好,请稍等,我正在为您查询订单(No. 2023092512345)的最新状态... 查询到您的订单由于其中一件商品(商品ID: 8801A)暂时缺货,导致发货延迟。我们预计该商品将在24小时内补货并发出,给您带来不便非常抱歉。作为补偿,我们已将一张10元无门槛优惠券发放到您的账户。"}]
}
3.2 指令格式 (Instruction Format)
这种格式更侧重于让模型理解并完成一个特定任务。
简单场景示例:
{"instruction": "将下面的英文翻译成中文。","input": "Hello, world!","output": "你好,世界!"
}
复杂场景示例(生成商业运营策略):
{"instruction": "你是一位经验丰富的市场分析师。请根据以下信息,为一款新的无糖苏打水产品制定一个社交媒体推广的核心策略。","input": "产品名称:清汽苏打;目标用户:18-30岁,关注健康、注重生活品质的年轻白领;产品特点:0糖0脂0卡,添加真实果汁,口感清爽;预算:50万/月。","output": "好的,基于'清汽苏打'的产品定位和目标用户,我建议以下社交媒体推广策略:\n**核心主题:** ‘轻享生活,无‘腹’担’\n**平台矩阵:**\n1. **小红书 (主阵地):** 邀请健康、健身、美食类KOL进行产品评测和场景化内容植入(如办公室下午茶、运动后补水),发起#清汽苏打健康打卡#话题挑战,激励UGC内容创作。\n2. **抖音/B站:** 制作高质量短视频,内容方向包括:a) 口感ASMR;b) 创意DIY饮品教程;c) 街头采访,突出年轻人对健康饮品的看法。\n3. **微博:** 作为官方信息发布和粉丝互动的主要渠道,定期举办抽奖活动,与相关品牌进行联动,扩大声量。\n**预算分配:** KOL/KOC合作占60%,平台广告投放占30%,内容制作和活动占10%。"
}
3.3 多轮对话格式 (Multi-turn Conversation Format)
多轮对话要求模型具备理解和维持对话上下文的能力,这对于构建真正智能的聊天机器人至关重要。
复杂场景示例(上下文追问与澄清):
{"conversations": [{ "from": "human", "value": "我想为我的团队预订一个会议室,下周三下午。" },{ "from": "gpt", "value": "好的,请问您的团队大概有多少人?我们需要根据人数来确定会议室的大小。" },{ "from": "human", "value": "我们有8个人。" },{ "from": "gpt", "value": "收到。正在查询下周三下午可用的8人会议室... 目前有‘天王星’和‘海王星’两个会议室可用。‘天王星’配备了投影仪和白板,‘海王星’配备了高清视频会议系统。请问您需要哪一个?" },{ "from": "human", "value": "我们需要视频会议功能。" },{ "from": "gpt", "value": "好的,已为您预订下周三下午2点至4点的‘海王星’会议室。预订详情已发送到您的邮箱,请查收。" }]
}
3.4 思维链 (Chain-of-Thought, CoT)
CoT数据通过向模型展示解决问题的详细步骤,来激发其内在的推理能力。这对于需要逻辑、数学或代码能力的任务至关重要。2
复杂场景示例(命理推理/逻辑分析):
{"instruction": "案件:一位女士被发现在反锁的房间内中毒身亡,桌上有一杯有毒的酒和一封遗书。但法医发现,死者的死亡时间早于遗书的书写时间。房间内没有其他人进入的痕迹。请问这最可能是什么情况?请给出你的推理过程。","output": "这是一个经典的逻辑推理问题。我的分析过程如下:\n1. **核心矛盾:** 死亡时间早于遗书书写时间。这意味着死者不可能自己写下遗书。\n2. **关键线索:** 房间是反锁的,没有强行进入的痕迹。这表明凶手(如果存在)是以一种巧妙的方式离开或从未进入房间。\n3. **排除自杀:** 基于第一点,自杀的假设不成立。\n4. **可能的假设:** 他杀。我们需要解释凶手是如何做到“密室杀人”并留下遗书的。\n5. **推理链:** \n a. 凶手在死者进入房间前,就已经在房间里设置好了毒酒。\n b. 凶手通过某种方式诱导或强迫受害者喝下毒酒。\n c. 在受害者死亡后,凶手伪造了遗书。\n d. **如何离开?** ‘反锁’是关键。有些锁具可以在门外用特殊工具(如细线、卡片)操作锁舌,造成从内部反锁的假象。或者,凶手从未离开,而是藏在房间的某个隐蔽角落(如衣柜、床下),等警察进入时趁乱逃走。\n**结论:** 这最可能是一起他杀案件。凶手在杀人后伪造了遗书,并利用特殊的技巧制造了密室的假象。调查的重点应该是检查门锁是否有被操作过的痕迹,以及搜查房间内所有可能的藏身之处。"
}
3.5 不同数据集的适用场景和模型选择
| 数据集类型 | 适合的开源模型 | 典型应用场景 | 备注 |
|---|---|---|---|
| 指令/对话格式 | 所有模型 (Llama, Qwen, ChatGLM等) | 知识问答、企业客服、内容创作、通用AI助手 | 这是最基础、最通用的数据类型,是构建任何对话模型的第一步。 |
| 思维链 (CoT) | 逻辑推理强的模型 (DeepSeek-Code, Llama 3, Qwen-Max) | 数学解题、代码生成与调试、法律案件分析、命理推理 | CoT能显著提升模型在复杂推理任务上的表现,但需要高质量的推理过程数据。 |
| 特定领域数据 | 所有模型 | 商业/运营策略生成、特定写作风格模仿(如模仿某位作家的风格)、金融/医疗/法律等专业问答 | 通过持续预训练或SFT注入领域知识,是模型“专业化”的关键。 |
| 代码生成/解释 | 代码模型 (DeepSeek-Code, CodeLlama, StarCoder) | 编写代码、解释代码逻辑、修复Bug、代码语言翻译 | 需要大量高质量的代码数据对,通常结合了指令和CoT格式。 |
3.6 DPO / ORPO 训练语料构建
偏好数据的核心是 (prompt, chosen, rejected) 三元组。2 构建这类数据的常见流程如下:
- 生成候选: 针对同一个
prompt,使用一个或多个SFT模型生成多个不同的回答。 - 进行标注:
- 人工标注: 标注者根据一系列标准(如真实性、无害性、帮助性、详细程度)来选择一个最佳回答 (
chosen) 和一个较差的回答 (rejected)。 - AI标注 (RLAIF): 使用一个更强大的“教师”模型(如GPT-4o)来自动评估和选择
chosen和rejected,可以极大提高效率。
- 人工标注: 标注者根据一系列标准(如真实性、无害性、帮助性、详细程度)来选择一个最佳回答 (
举例:
{"prompt": "作为一名运营,如何提升APP的日活跃用户(DAU)?","chosen": "提升DAU是一个系统工程,可以从以下四方面着手:1. **优化用户体验**:简化核心流程,减少加载时间,确保APP稳定。2. **增加用户粘性**:建立签到、积分、等级等成长体系,让用户有持续使用的动力。3. **推送精准内容**:基于用户画像和行为,推送个性化的内容或活动,吸引用户打开APP。4. **策划线上活动**:定期举办有吸引力的活动,如挑战赛、节日活动等,并通过Push、短信等渠道触达用户,引导其回归。","rejected": "多做活动,多发优惠券。"
}
3.7 RLHF / RLAIF 训练语料
RLHF的数据通常更复杂,除了 chosen 和 rejected,还可能包含更细致的评分。
- 评分制: 对每个回答从1到5分进行打分,涵盖多个维度(如相关性、流畅性、安全性)。
- 排序制: 对多个(>2个)回答进行排序。
这些数据用于训练一个奖励模型 (Reward Model),这个模型学会了预测人类或教师模型会给哪个回答打更高的分。然后,这个奖励模型会指导SFT模型进行进一步的优化。
3.8 MoE 路由微调语料
MoE微调的关键是让路由器学会将正确的任务分配给正确的专家。因此,数据集需要带有明确的“任务类型”或“领域”标签。
构建策略:
- 定义专家领域: 首先明确每个专家的分工,例如:专家A(数学与代码)、专家B(创意写作)、专家C(金融知识)、专家D(通用对话)。
- 准备领域数据: 收集或生成对应领域的数据集。
- 打上路由标签: 在数据预处理时,为每个样本添加一个元数据字段,指明它应该由哪个专家处理。
举例:
// 样本1:应该路由到专家A(数学与代码)
{"task_type": "coding","instruction": "用Python写一个函数,计算斐波那契数列的第n项。","output": "def fibonacci(n): ..."
}// 样本2:应该路由到专家B(创意写作)
{"task_type": "creative_writing","instruction": "写一首关于秋天的五言绝句。","output": "空山新雨后,天气晚来秋。明月松间照,清泉石上流。"
}
在训练时,路由器会根据 task_type 学习将输入路由到正确的专家,从而实现“专人专事”,提升模型在多任务环境下的综合表现。
4. 特定模型的预训练差异
不同的预训练模型由于其架构和训练数据的差异,在微调时对数据的偏好和要求也不尽相同。理解这些差异,可以帮助我们更有针对性地准备数据,从而最大化微调效果。下面我们以在代码和多模态领域各具特色的 DeepSeek 和 Qwen 为例进行说明。
4.1 DeepSeek:为代码和推理而生
DeepSeek 模型系列,特别是其 Code 模型,在训练时吸收了海量的代码和数学相关数据,使其天生具备强大的逻辑推理能力。因此,在微调 DeepSeek 时,数据准备应侧重于发挥其长处。
-
SFT 数据集(必选):这是所有微调的基础。对于 DeepSeek,即使是通用的SFT数据,也建议尽量与代码、数学、或需要逻辑推理的场景相关。数据格式遵循标准的指令或对话格式即可。
-
DPO 数据集(推荐):当需要模型在特定风格或标准上进行对齐时(例如,生成更安全、更简洁或更符合特定规范的代码),DPO 数据集是必不可少的。你需要准备
(prompt, chosen, rejected)格式的数据,其中chosen的代码/答案比rejected更优。 -
思维链 (CoT) 数据(强烈推荐):这是最大化 DeepSeek 推理能力的关键。1 在微调数据中包含详细的解题步骤或代码实现逻辑,能显著提升模型在复杂问题上的表现。在缺乏真实数据时,甚至可以采用合成数据的方式,利用更强的模型(如GPT-4)来生成高质量的带推理过程的数据。
总结: 微调 DeepSeek 的核心思想是“喂养”它高质量的、包含逻辑和推理过程的数据,从而激活并强化其在代码和数学领域的先天优势。
4.2 Qwen:全能的多模态与混合推理专家
Qwen(通义千问)系列模型由阿里巴巴达摩院开发,其一个显著特点是强大的多模态能力和独特的“混合推理模式”。
-
多模态数据集:对于 Qwen-VL 等视觉语言模型,你可以准备图文并茂的数据集进行微调。例如,输入一张图表图片和相关问题,期望模型能理解图表并回答问题。数据格式通常会将图像和文本编码在一起。
-
混合推理数据集:Qwen-3 引入了一个创新的“思考模式”,允许模型在需要时展现其推理过程(CoT),在不需要时直接给出答案。5 这为数据准备带来了极大的灵活性。你可以构建一个混合数据集,其中一部分是包含详细步骤的 CoT 数据,另一部分是直接的问答对。这有助于训练出一个既能“思考”又能“秒答”的智能模型。
-
通用SFT/DPO数据集:与 DeepSeek 类似,通用的SFT和DPO数据也适用于Qwen,用于注入领域知识和进行偏好对齐。其数据格式与其他模型完全兼容。
总结: 微调 Qwen 的关键在于利用其多模态和混合推理的特性。如果你需要模型处理图像,就准备图文数据;如果你希望模型在“深思熟虑”和“快速响应”之间自由切换,就准备混合推理的数据集。
对比总结
| 特性 | DeepSeek | Qwen |
|---|---|---|
| 核心优势 | 强大的代码和数学推理能力 | 领先的多模态能力和独特的混合推理模式 |
| SFT 数据 | 通用,是基础的微调方式 | 通用,同样是基础 |
| 推理数据 (CoT) | 强烈推荐,尤其是在代码和逻辑任务上,以激发其核心潜力 | 支持且灵活,可以通过混合推理模式控制,数据集可包含CoT和直接问答两种形式 |
| DPO/偏好数据 | 支持,与其他模型类似,用于对齐和提升回答质量 | 支持,同样用于对齐和优化 |
| 多模态数据 | 主要关注文本,尤其是代码和数学 | 核心特性,支持图文对等多种格式的数据进行微调 |
| 数据准备关键点 | 确保代码/逻辑的准确性,构建高质量的思维链 | 平衡推理和非推理样本的比例,准备高质量的图文数据 |
