原文:https://zhuanlan.zhihu.com/p/6345302826
一、基本步骤
训练llm,基本分为三步:pretrain -> sft(chat model) -> dpo/RLHF(helpful & Safety). 辅助的环节:数据处理,评估
二、模型结构
目前比较成熟,一般采用 gpt架构,Llama/Llama2
• Transformer-Decoder结构
• PreLayerNorm-RMSNorm
Paper :Root Mean Square Layer Normalization Abs :https ://proceedings.neurips.cc/paper_files/paper/2019/file/1e8a19426224ca89e83cef47f1e7f53b-Paper.pdf
Paper :GLU Variants Improve Transformer Abs :https ://arxiv.org/pdf/2002.05202v1.pdf
在模型结构不改变的情况下,模型的优化主要在于 分词、参数选择、训练数据,同时也包括对attention方法的选择
优化方法需进行实验评估效果,或直接采用他人较好的方法
训练数据
训练阶段
说明
常见数据集
pre-train(continual-train)
收集、整理清洗,分类筛选,多语言无需特别加工,主要是数据分布合理,质量保障
C4(T5),RedPajama,Pile,Wudao,ROOTS(BLOOM)
sft
指令微调,数据需要人工加工,已经有一些公开数据集了主要目的是让机器学会一些思考、回答问题的方法
RLHF
需要单独组织,人工整理数据主要目的是在回答的helpful、safety等方面符合人类标准
https://github.com/anthropics/hh-rlhf/blob/master/README.md
Tokenizer(分词器)
分词器把句子切分为一个一个的token,作为模型的输入。
通常情况下,Tokenizer有三种粒度:word/char/subword。
llm使用的 Tokenizer 一般为subword。常见的方法有:
以下为几个LLM的Tokenizer的情况:
模型
训练数据量
模型参数
训练数据范围
词表大小
分词算法
分词器(Tokenizer)后端
LLaMA
1T~1.4T tokens(其中,7B/13B使用1T,33B/65B使用1.4T)
7B~65B
以英语为主要语言的拉丁语系
32000
BBPE
基于SentencePiece工具实现
ChatGLM-6B
约 1T tokens
6B
中英双语
130528
BBPE
基于SentencePiece工具实现
Bloom
1.6TB预处理文本,转换为 350B 唯一 tokens
300M~176B
46种自然语言,13种编程语言
250680
BBPE
HuggingFace 的 tokenizers (类SentencePiece)
五、训练耗时
主要计算耗时在pretrain环节,Llama2的训练开销如下:
sft/RLHF训练,需要多次迭代,逐步调优。需要人的评价(human-feedback),用于训练奖励模型、强化学习
六、模型评估
模型评估用来衡量模型的优劣,已经形成了多种评估方法及指标
七、训练过程预测及控制
在模型结构基本不变的情况下,模型的优化在于训练数据、参数等的匹配,训练过程的优化及预估
OpenAI的scale 定律
Paper :Scaling Laws for Neural Language Models Abs :https ://arxiv.org/pdf/2001.08361v1.pdf
• 图1表明,语言模型表现与模型参数量N(Embedding除外)、训练Token数D、训练总计算量C都呈现幂定律:
• 图2表明,模型大小从768~1.5B在不同Token数(22M-23B)上训练的过程:
• 图3表明,随着计算量增加需要了解计算资源如何高效的分配。论文中以计算能力增加10亿倍为例,对于最优效率训练,大部分计算资源用于增加模型大小,小部分用于数据增加,同时数据增加大部分用于增加batch大小,很少用于增加模型串行训练的step数
关键结论:
• 模型表现强依赖于模型规模(模型参数量N(Embedding除外)、训练Token数D、训练总计算量C);
• 平滑幂定律:模型表现与三个因子均遵循幂定律,不受另外两个因子限制;
• 过拟合的通用性:当同时提升N/D时,模型性能提升;但如果固定其中一个,模型表现取决于比例N^{0.74}/D.(与下文DeepMind工作冲突) 训练的通用性:训练曲线遵循可预测的幂律,其参数独立于模型大小。通过推断训练曲线的早期部分,可以大致预测如果训练更长时间会达到的损失。
• 迁移学习表现与测试性能相关:当在不同于训练分布的文本上评估模型时,结果与训练验证集上的结果强相关,并且损失大致上存在一个恒定的偏差。换句话说,将模型迁移到不同的分布会产生一个恒定的偏差,模型在训练集上的表现越好,迁移学习的效果也越好。
• 样本效率:大模型比小模型更具样本效率,可以通过更少的优化步骤和更少的数据达到相同的性能水平。
• 最佳的batchsize:这些模型的理想batchsize仅与损失的幂指数相关,并且可以通过测量梯度噪声尺度[MKAT18]来确定;对于可以训练的最大模型,在收敛时Token数大约为1-2百万。
总体来说,这些结果表明,随着适当地提高模型大小、数据和计算能力,语言建模性能会平稳、可预测地提高。更大的语言模型将比其他模型表现更好,并且更具样本效率。
DeepMind:大模型训练计算优化实证分析
Paper :Training Compute -Optimal Large Language Models Abs :https ://arxiv.org/pdf/2203.15556.pdf
核心问题:给定训练参数量的情况下,如何配置模型参数量以及训练Token数。
与OpenAI提出大模型缩放法则不同的是,DeepMind认为当前许多大模型是训练不充分的;
在文中,作者探讨了三种不同的策略来评估和确定在给定训练参数量的情况下,最佳的模型参数量与训练 Token 数的配比:
结论:
这三个实验得到了相同的结论:计算量增加后,模型参数量大小与训练Token数应该同比增加。根据方法1,预测的模型大小需要的训练Token数如下表:
重复Token对模型性能的影响
Paper :To Repeat or Not To Repeat : Insights from Scaling LLM under Token -Crisis Abs :https ://arxiv.org/pdf/2305.13230.pdf
• 模型参数规模与tokens数量需要匹配:模型参数规模的增长与模型需要的tokens数量基本是呈线性的。
• 多轮epoch的训练会降低模型性能。此外,如果tokens数量不够,模型参数规模越大,越容易出现过拟合的现象!
• 更大规模的数据集会缓解重复epochs对模型性能下降的影响
• 提高数据集的质量也无法挽救重复训练带来的过拟合
• 参数数量和FLOPs在重复训练上的影响:发现,FLOPs较大的模型性能会更好一点,但是依然无法有效降低重复训练带来的模型损失
• 小计算量模型的过拟合趋势与大计算量的差不多
• 多样的训练目标可以减轻多Epoch下降吗?如果语言模型的训练目标多样化,那么实际上更加可能受到多epoch带来的性能损失。
• Dropout是一个被大语言模型忽视的正则技术,虽然慢,但是可以降低多epochs的影响
• 在训练过程中逐渐使用dropout是有效的策略。如果前期训练不用dropout,在后续的迭代中使用dropout也是有效的!
• dropout对不同规模模型的影响不同:尽管前面已经证明dropout使用可以降低多epochs的影响,但是在不同规模模型下是不同的。对于规模较大的模型,dropout不能有效降低多epochs带来的坏处!
• 通过MoE扫描确定稠密模型的最佳超参数:MoE的模型表现与大模型真正的训练有类似的趋势,因此用MoE去提前预估大模型的性能,做参数调优是一个非常好的思路。
sft数据需要多少
参考链接:
https://mp.weixin.qq.com/s/DVH-vlOpGik8iwW4KnPlkw
通过消融实验研究训练数据的多样性、质量和数量的影响,对于对齐的目的,扩大输入多样性和输出质量有可衡量的积极影响,而仅仅扩大数量可能没有。
• 《LIMa:Less Is More for Alignment》一文的消融实验显示,当扩大数据量而不同时扩大提示多样性时,收益会大大减少,而在优化数据质量时,收益会大大增加。
• 《MAYBE ONLY 0.5% DATA IS NEEDED》一文的实验表明,特定任务的模型可能从固定的任务类型中获益,以获得更高的性能;指令格式的多样性可能对特定任务模型的性能影响很小;即使是少量的数据(1.9M tokens)也能为特定任务模型的指令调整带来可喜的结果。
训练估算
参考:LLM训练指南:模型参数、计算量、显存、计算时间计算
https://zhuanlan.zhihu.com/p/639872915
参数量:
训练时间:
模型微调
(参考资料:复刻ChatGPT语言模型系列 二:参数微调)
全量参数微调:Full Fine-tuning
PEFT(Parameter Efficient Fine-Tuning):包括 Lora, P-tuning,Adapter。三种方法都是在Transformer的结构中局部扩展一些可调参数。
Lora