1.如果想要在某个模型基础上做全参数微调,究竞需要多少显存? 2.为什么SFT之后感觉LLM傻了?3.SFT指令微调数据如何构建?4.领域模型ContinuePreTrain数据选取?6.领域模型ContinuePreTrain,如何让模型在预训练过程中就学习到更多的知识? 5.领域数据训练后,通用能力往往会有所下降,如何缓解模型遗忘通用能力?7.进行SFT操作的时候,基座模型选用Chat还是Base?8.领域模型微调指令&数据输入格式要求?9.领域模型微调领域评测集构建?10.领域模型词表扩增是不是有必要的? 11.如何训练自己的大模型?12.训练中文大模型有啥经验?13.指令微调的好处?14.预训练和微调哪个阶段注入知识的?15.想让模型学习某个领域或行业的知识,是应该预训练还是应该微调? 16.多轮对话任务如何微调模型?17.微调后的模型出现能力劣化,灾难性遗忘是怎么回事?18.微调模型需要多大显存?19.大模型LLM进行SFT操作的时候在学习什么? 20.预训练和SFT操作有什么不同21.样本量规模增大,训练出现OOM错22.大模型LLM进行SFT如何对样本进行优化?23.模型参数选代实验24.微调大模型的一些建议 25.微调大模型时,如果batchsize设置太小会出现什么问题?26.微调大模型时,如果batchsize设置太大会出现什么问题?27.微调大模型时,batchsize如何设置问题?28.微调大模型时,优化器如何? 29.哪些因素会影响内存使用?30.进行领域大模型预训练应用哪些数据集比较好?31.用于大模型微调的数据集如何构建?32.大模型训练loss突刺原因和解决办法32.1大模型训练loss突刺是什么?32.2为什么大模型训练会出现loss突刺?32.3大模型训练loss突刺如何解决?
1.如果想要在某个模型基础上做全参数微调,究竟需要多 少显存?
一般nB的模型,最低需要16-20nG的显存.(cpuoffload基本不开的情况下)
vicuna-7B为例,官方样例配置为4*A10040G,测试了一下确实能占满显存.(globalbatch size128,maxlength2048)当然训练时用了FSDP、梯度累积、梯度检查点等方式降显存.
2.为什么SFT之后感觉LLM傻了?
1.原版答案:
SFT的重点在于激发大模型的能力,SFT的数据量一般也就是万恶之源alpaca数据集的52k量级,相比于预训练的数据还是太少了.
如果抱着灌注领域知识而不是激发能力的想法,去做SFT的话,可能确实容易把LLM弄傻.
1.新版答案:
指令微调是为了增强(或解锁)大语言模型的能力.
其真正作用:
指令微调后,大语言模型展现出泛化到未见过任务的卓越能力,即使在多语言场景下也能有不错表现,
3.SFT指令微调数据如何构建?
1.代表性.应该选择多个有代表性的任务;2.数据量.每个任务实例数量不应太多(比如:数百个)否则可能会潜在地导致过拟合问题并影响模型性能:3.不同任务数据量占比.应该平衡不同任务的比例,并且限制整个数据集的容量(通常几千或几 万),防止较大的数据集压倒整个分布.
4.领域模型continuePreTrain数据选取?
技术标准文档或领域相关数据是领域模型ContinuePreTrain的关键.因为领域相关的网站和资讯重要性或者知识密度不如书籍和技术标准.
5.领域数据训练后,通用能力往往会有所下降,如何缓解 模型遗忘通用能力?
动机:仅仅使用领域数据集进行模型训练,模型很容易出现灾难性遗忘现象 解决方法:通常在领域训练的过程中加入通用数据集
那么这个比例多少比较合适呢?
目前还没有一个准确的答案.主要与领域数据量有关系,当数据量没有那么多时,一般领域数据与通用数据的比例在1:5到1:10之间是比较合适的.
6.领域模型continuePreTrain,如何让模型在预训练过 程中就学习到更多的知识?
领域模型Continue PreTrain时可以同步加入SFT数据,即MIP,Multi-Task Instruction PreTraining.预训练过程中,可以加下游SFT的数据,可以让模型在预训练过程中就学习到更多的知识.
7.进行SFT操作的时候,基座模型选用chat还是Base?
仅用SFT做领域模型时,资源有限就用在Chat模型基础上训练,资源充足就在Base模型上训练.(资源=数据显卡)
资源充足时可以更好地拟合自已的数据,如果你只拥有小于10k数据,建议你选用Chat模型作为基座进行微调;如果你拥有100k的数据,建议你在Base模型上进行微调.
8.领域模型微调指令&数据输入格式要求?
在Chat模型上进行SFT时,请一定遵循Chat模型原有的系统指令&数据输入格式.建议不来用全量参数训练,否则模型原始能力会遗忘较多.
9.领域模型微调领域评测集构建?
领域评测集时必要内容,建议有两份,一份选择题形式自动评测、一份开放形式人工评测.
选择题形式可以自动评测,方便模型进行初筛;开放形式人工评测比较浪费时间,可以用作精筛,并且任务形式更贴近真实场景.
10.领域模型词表扩增是不是有必要的?
领域词表扩增真实解决的问题是解码效率的问题,给模型效果带来的提升可能不会有很大.
11.如何训练自己的大模型?
如果我现在做一个sota的中文GPT大模型,会分2步走:1.基于中文文本数据在LLaMA-65B上二次预训练:2.加CoT和instruction数据,用FT LoRA SFT.
提炼下方法,一般分为两个阶段训练:
第一阶段:扩充领域词表,比如金融领域词表,在海量领域文档数据上二次预训练LLaMA模型;第二阶段:构造指令微调数据集,在第一阶段的预训练模型基础上做指令精调.还可以把指令微调数据集拼起来成文档格式放第一阶段里面增量预训练,让模型先理解下游任务信息.
当然,有低成本方案,因为我们有LoRA利器,第一阶段和第二阶段都可以用LoRA训练,如果不用LoRA,就全参微调,大概7B模型需要8卡A100,用了LoRA后,只需要单卡3090就可以了.
12.训练中文大模型有啥经验?
链家技术报告 {Towards Better Instruction Following Language Models for Chinese: Investigatingthe Impact of Training Data and Evaluation中,介绍了开源模型的训练和评估方法:
Table 1: A simple overview of public available chat models.More details could be found in2.3
Project Base model Training Training data Evaluation data Evaluation methodStanford Full- generated instruction 52K text-davinci-003 252 samples fromalpaca LLaMA finetuning parameter data self-instruct evalu- ation dataset Human evaluationFull- instructions 1.252 user-oriented 1. Human evaluationLLaMA- GPT4 LLaMA parameter 52K GPT-4 gener- ated instruction data 2. 80 vicuna test 2. Automatic GPT-4 evaluationfinetuning samplesVicuna LLaMA Full- parameter 70K user-shared con- versations with Chat- 80 vicuna test sam- Automatic GPT-4finetuning GPT ples evaluation2.Anthropic HH 1. Stanford alpaca 1. 180 samples from self-instruct evalu-Koala LLaMA parameter Full- 3.OpenAI webgpt 2. 180 real user que- ation dataset Human evaluationfinetuning 4. OpenAI summariz- ation ries that were postedonlineDolly GPT-J Full- parameter Stanford alpaca Case demonsrtrationfinetuning Full-Dolly 2.0 Pythia parameter instruction data 15k human-written Case demonsrtrationfinetuning 15K ChatGPT gener-Baize LLaMA LoRA ated multi-turm con- Cadversations
还对比了各因素的消融实验:
Factor Base model Training data Score_w/o_others词表扩充 LLaMA-7B-EXT zh(alpaca-3.5&4) sharegpt 0.670LLaMA-7B zh(alpaca-3.5&4) sharegpt 0.652LLaMA7B-EXT zh(alpaca-3.5) 0.642数据质量 LLaMA-7B-EXT zh(alpaca-4) 0.693LLaMA-7B-EXT zh(alpaca-3.5&4) 0.679数据语言分布 LLaMA-7B-EXT en(alpaca-3.5&4) 0.659LLaMA-7B-EXT zh(alpaca-3.5&4) sharegpt 0.670LLaMA-7B-EXT en(alpaca-3.5&4) sharegpt 0.668LLaMA-7B-EXT zh(alpaca-3.5&4) sharegpt 0.670数据规模LLaMA-7B-EXT zh(alpaca-3.5&4) sharegpt BELLE-0.5M-CLEAN 0.762ChatGPT
消融实验结论:
扩充中文词表后,可以增量模型对中文的理解能力,效果更好数据质量越高越好,而且数据集质量提升可以改善模型效果数据语言分布,加了中文的效果比不加的好 数据规模越大且质量越高,效果越好,大量高质量的微调数据集对模型效果提升最明显.解释下:数据量在训练数据量方面,数据量的增加已被证明可以显著提高性能.值得注意的是,如此巨大的扩充词表后的LLaMA-7B-EXT的评估表现达到了0.762/0.824=92%的水平 对评估结果产生很大影响
他们的技术报告证明中文大模型的训练是可行的,虽然与ChatGPT还有差距.这里需要指出后续RLHF也 很重要,我罗列在这里,抛砖引玉.
13.指令微调的好处?
有以下好处:
1.对齐人类意图,能够理解自然语言对话(更有人情味)2.经过微调(fine-tuned),定制版的GPT-3在不同应用中的提升非常明显.OpenAI表示,它可以让 不同应用的准确度能直接从83%提升到95%、错误率可降低50%.解小学数学题目的正确率也能提高2-4倍.(更准)
踩在巨人的肩膀上、直接在1750亿参数的大模型上微调,不少研发人员都可以不用再重头训练自己的A1模型了.(更高效)