本系列主要分享一下大模型微调相关的基本概念,包括大模型(GPT)训练流程、微调(SFT)方法&分类&框架&最佳实践、强化学习(RLHF),最后则是分享了如何训练垂直领域大模型。
一、 大模型训练流程
1、ChatGPT 是如何炼成的
ChatGPT 是如何炼成的,或者说如何训练出一个大模型?
GPT 训练流程图如下:
图中的 Reward Modeling 和 Reinforcement Learning 可以看做一步,即 RLHF,因此训练一个大模型一般可以分为三步:
1)预训练(Pre Training,PT):
这一阶段是模型训练的基础,利用海量数据、大量算力通过无监督训练得到基座模型。
- 海量数据:一般按 T 计算,最少也是几百 G,数据通常包括从互联网上收集的大规模文本语料库,模型通过学习如何预测下一个词或 token
- 大量算力:一般是上万块 GPU、时间则是按月计算
- Llama 2 是在 2 万亿个 token 上训练的,Llama 2 70B 需要 1720320 GPU 小时
- Llama 3 在 24K GPU 集群上训练,使用了 15T 的数据
- 预训练后的模型具备强大的语言生成能力,但由于它主要是无监督训练的结果,可能不会直接适应具体的任务(如问答、对话),需要进一步的微调。
2)监督微调(Supervised Fine-Tuning, SFT):
这一阶段则是对基座模型进行微调,让模型能够适用特定任务,最终得到一个 SFT 模型。
- 微调的目的是让模型更好地理解特定任务的需求。例如,通过使用对话数据集对模型进行微调,可以让模型在遇到问题时生成更相关的答案,而不是简单地生成与问题相似的文本。
- 这些问答对话由人类准备的,通常是有标签的,包含了问题和答案对,或者其他特定任务的数据。
3)强化学习(Reinforcement Learning from Human Feedback, RLHF):
这一阶段通过引入人类反馈(或者基于人类反馈训练的奖励模型)进一步优化模型的生成质量,使其生成的回答更符合用户的期望和人类的价值观。
- Helpful:判断模型遵循用户指令以及推断指令的能力。
- Honest:判断模型产生幻觉( 编造事实)的倾向。
- Harmless:判断模型的输出是否适当、是否诋毁或包含贬义内容。
- 一般根据 3H 原则进行打分:
- 由于直接从人类获取反馈的成本较高,通常会先训练一个奖励模型(Reward Model,RM)来代替人类打分,这样可以在 RL 的框架下进行大规模的自动优化。
预训练由于对算力和数据需求都比较大,因此一般玩家不会涉及到预训练,更多的是基于开源的基础模型(LLama、Baichuan、Qwen、ChatGLM…)做微调、强化学习以满足自身需求。
2、模型名称各部分的含义
以 Qwen1.5-14B-Chat-GQPT-Int4
为例,可以分为 5 个部分,具体含义如下图:
5 个参数含义如下:
- 模型系列:一般一个公司、组织的模型都会归属于同一个系列
比如阿里的 Qwen 系列、Meta 的 Llama 系列,智普的 Chatglm 系列 - 模型版本:一个系列的模型也会有多个版本,一般是有大更新时才会更新
比如 Qwen 系列就存在 Qwen、Qwen1.5、Qwen2 三个系列 - 参数量:一般为 xx B,B 为单位,表示 10 亿参数
比如 7B 则是有 70 亿参数,72B 则是 720 亿参数
这个只是一个大致范围,比如 68 亿、72 亿参数的模型一般也叫做 7B - 微调:开源模型为了能够直接使用,一般会提供经过问答任务微调的版本,即 Chat 模型
- 量化:为了降低内存占用有的也会提供量化版本,比如大模型一般使用 FP32/FP16 精度,即一个参数占 4 或者 2 字节,而量化则是将权重参数使用更低精度的格式来存放,比如量化为 FP8 则是只需要 1 字节,Int4 则只需要 4 位。
我们需要注意的就是是否经过微调、量化:
- 基座模型:不带任意后缀,或者 -Base 后缀,就是预训练后未经过微调的原始模型
比如 Qwen1.5、Llama3 - SFT 模型:带特定领域任务后缀,比如 xxx-chat,就是对基座模型做了问答任务微调。
比如 Qwen1.5-Chat、Baichuan2-Chat - 量化模型:它通过将模型中的高精度浮点数参数转换为低精度的整数参数来减少模型的存储和计算需求。这样做可以显著降低模型的内存占用,加快推理速度,并减少能耗。量化可以带来显著的效率提升,但也可能引入一些精度损失
- GGUF:GGUF(以前称为 GGML)是一种量化方法,允许用户使用 CPU 来运行 LLM,但也可以将其某些层加载到 GPU 以提高速度。
- GQPT:GPTQ 是一种 4 位量化的训练后量化(PTQ)方法,主要关注 GPU 推理和性能。
- AWQ:是一种新格式(激活感知权重量化),它是一种类似于 GPTQ 的 量化方法。AWQ 和 GPTQ 作为方法有几个不同之处,但最重要的是 AWQ 假设并非所有权重对 LLM 的性能都同等重要。也就是说在量化过程中会跳过一小部分权重,这有助于减轻量化损失。所以他们的论文提到了与 GPTQ 相比的可以有显著加速,同时保持了相似的,有时甚至更好的性能。
- …
如何选择合适的模型?
- 如果是直接部署推理,建议选择 Chat 模型,如果资源不够则选择量化版本。
- 如果要做增量预训练、微调等操作则建议使用基座模型。