9-大模型(LLMs)微调面¶
来源 PDF:
200页AI大模型面试高频必刷题(附详解)/9-大模型(LLMs)微调面.pdf
主题:训练 / 微调
页数:16
字符数:11475
索引片段数:28
摘要¶
大模型(LLMs)微调面 来自: AiGC面试宝典 宁静致远 2023年12月24日 00:44 大模型(LLMs)微调面 1. 如果想要在某个模型基础上做全参数微调,究竟需要多少显 存? • 1. 如果想要在某个模型基础上做全参数微调,究竟需要多少显存? • 2. 为什么SFT之后感觉LLM傻了? • 3. SFT 指令微调数据 如何构建? • 4. 领域模型Continue PreTrain 数据选取? • 5. 领域数据训练后,通用能力往往会有所下降,如何缓解模型遗忘通用能力? • 6. 领域模型Contin
代表性原文片段¶
片段 1¶
大模型(LLMs)微调面 来自: AiGC面试宝典 宁静致远 2023年12月24日 00:44 大模型(LLMs)微调面 1. 如果想要在某个模型基础上做全参数微调,究竟需要多少显 存? • 1. 如果想要在某个模型基础上做全参数微调,究竟需要多少显存? • 2. 为什么SFT之后感觉LLM傻了? • 3. SFT 指令微调数据 如何构建? • 4. 领域模型Continue PreTrain 数据选取? • 5. 领域数据训练后,通用能力往往会有所下降,如何缓解模型遗忘通用能力? • 6. 领域模型Continue PreTrain ,如何 让模型在预训练过程中就学习到更多的知识? • 7. 进行SFT操作的时候,基座模型选用Chat还是Base? • 8. 领域模型微调 指令&数据输入格式 要求? • 9. 领域模型微调 领域评测集 构建? • 10. 领域模型词表扩增是不是有必要的? • 11. 如何训练自己的大模型? • 12. 训练中文大模型有啥经验? • 13. 指令微调的好处? • 14. 预训练和微调哪个阶段注入知识的? • 15. 想让模型学习某个领域或行业的知识,是应该预训练还是应该微调?
片段 2¶
- 训练中文大模型有啥经验? • 13. 指令微调的好处? • 14. 预训练和微调哪个阶段注入知识的? • 15. 想让模型学习某个领域或行业的知识,是应该预训练还是应该微调? • 16. 多轮对话任务如何微调模型? • 17. 微调后的模型出现能力劣化,灾难性遗忘是怎么回事? • 18. 微调模型需要多大显存? • 19. 大模型LLM进行SFT操作的时候在学习什么? • 20. 预训练和SFT操作有什么不同 • 21. 样本量规模增大,训练出现OOM错 • 22. 大模型LLM进行SFT 如何对样本进行优化? • 23. 模型参数迭代实验 • 24. 微调大模型的一些建议 • 25. 微调大模型时,如果 batch size 设置太小 会出现什么问题? • 26. 微调大模型时,如果 batch size 设置太大 会出现什么问题? • 27. 微调大模型时, batch size 如何设置问题? • 28. 微调大模型时, 优化器如何? • 29. 哪些因素会影响内存使用? • 30. 进行领域大模型预训练应用哪些数据集比较好? • 31. 用于大模型微调的数据集如何构建?
片段 3¶
• 28. 微调大模型时, 优化器如何? • 29. 哪些因素会影响内存使用? • 30. 进行领域大模型预训练应用哪些数据集比较好? • 31. 用于大模型微调的数据集如何构建? • 32. 大模型训练loss突刺原因和解决办法 • 32.1 大模型训练loss突刺是什么? • 32.2 为什么大模型训练会出现loss突刺? • 32.3 大模型训练loss突刺 如何解决? 查看更多
一般 n B的模型,最低需要 16-20 n G的显存。(cpu offload基本不开的情况下) vicuna-7B为例,官方样例配置为 4*A100 40G,测试了一下确实能占满显存。(global batch size 128,max length 2048)当然训练时用了FSDP、梯度累积、梯度检查点等方式降显存。 2. 为什么SFT之后感觉LLM傻了? SFT的重点在于激发大模型的能力,SFT的数据量一般也就是万恶之源alpaca数据集的52k量级, 相比于预训练的数据还是太少了。 如果抱着灌注领域知识而不是激发能力的想法,去做SFT的话,可能确实容易把LLM弄傻。
片段 4¶
FT的数据量一般也就是万恶之源alpaca数据集的52k量级, 相比于预训练的数据还是太少了。 如果抱着灌注领域知识而不是激发能力的想法,去做SFT的话,可能确实容易把LLM弄傻。 指令微调是为了增强(或解锁)大语言模型的能力。 其真正作用: 指令微调后,大语言模型展现出泛化到未见过任务的卓越能力,即使在多语言场景下也能有不错表 现 。 3. SFT 指令微调数据 如何构建? 4. 领域模型Continue PreTrain 数据选取? 技术标准文档或领域相关数据是领域模型Continue PreTrain的关键。因为领域相关的网站和资讯重 要性或者知识密度不如书籍和技术标准。 5. 领域数据训练后,通用能力往往会有所下降,如何缓解模型遗 忘通用能力? 那么这个比例多少比较合适呢? 目前还没有一个准确的答案。主要与领域数据量有关系,当数据量没有那么多时,一般领域数据与 通用数据的比例在1:5到1:10之间是比较合适的。 6. 领域模型Continue PreTrain ,如何 让模型在预训练过程中就 学习到更多的知识?
片段 5¶
有那么多时,一般领域数据与 通用数据的比例在1:5到1:10之间是比较合适的。 6. 领域模型Continue PreTrain ,如何 让模型在预训练过程中就 学习到更多的知识? 领域模型Continue PreTrain时可以同步加入SFT数据,即MIP,Multi-Task Instruction PreTraining。 预训练过程中,可以加下游SFT的数据,可以让模型在预训练过程中就学习到更多的知识。 7. 进行SFT操作的时候,基座模型选用Chat还是Base? • 原版答案: • 新版答案: 1. 代表性。应该选择多个有代表性的任务; 2. 数据量。每个任务实例数量不应太多(比如:数百个)否则可能会潜在地导致过拟合问题并影 响模型性能; 3. 不同任务数据量占比。应该平衡不同任务的比例,并且限制整个数据集的容量(通常几千或几 万),防止较大的数据集压倒整个分布。 • 动机:仅仅使用领域数据集进行模型训练,模型很容易出现灾难性遗忘现象. • 解决方法:通常在领域训练的过程中加入通用数据集
片段 6¶
的数据集压倒整个分布。 • 动机:仅仅使用领域数据集进行模型训练,模型很容易出现灾难性遗忘现象. • 解决方法:通常在领域训练的过程中加入通用数据集
仅用SFT做领域模型时,资源有限就用在Chat模型基础上训练,资源充足就在Base模型上训练。 (资源=数据+显卡) 资源充足时可以更好地拟合自己的数据,如果你只拥有小于10k数据,建议你选用Chat模型作为基 座进行微调;如果你拥有100k的数据,建议你在Base模型上进行微调。 8. 领域模型微调 指令&数据输入格式 要求? 在Chat模型上进行SFT时,请一定遵循Chat模型原有的系统指令&数据输入格式。 建议不采用全量参数训练,否则模型原始能力会遗忘较多。 9. 领域模型微调 领域评测集 构建? 领域评测集时必要内容,建议有两份,一份选择题形式自动评测、一份开放形式人工评测。 选择题形式可以自动评测,方便模型进行初筛;开放形式人工评测比较浪费时间,可以用作精筛, 并且任务形式更贴近真实场景。 10. 领域模型词表扩增是不是有必要的? 领域词表扩增真实解决的问题是解码效率的问题,给模型效果带来的提升可能不会有很大。
片段 7¶
较浪费时间,可以用作精筛, 并且任务形式更贴近真实场景。 10. 领域模型词表扩增是不是有必要的? 领域词表扩增真实解决的问题是解码效率的问题,给模型效果带来的提升可能不会有很大。 11. 如何训练自己的大模型? 如果我现在做一个sota的中文GPT大模型,会分2步走:1. 基于中文文本数据在LLaMA-65B上二次 预训练; 2. 加CoT和instruction数据, 用FT + LoRA SFT。 提炼下方法,一般分为两个阶段训练: 当然,有低成本方案,因为我们有LoRA利器,第一阶段和第二阶段都可以用LoRA训练,如果不用 LoRA,就全参微调,大概7B模型需要8卡A100,用了LoRA后,只需要单卡3090就可以了。 12. 训练中文大模型有啥经验? 链家技术报告《Towards Better Instruction Following Language Models for Chinese: Investigating the Impact of Training Data and Evaluation》中,介绍了开源模型的训练和评估方法:
片段 8¶
s for Chinese: Investigating the Impact of Training Data and Evaluation》中,介绍了开源模型的训练和评估方法: • 第一阶段:扩充领域词表,比如金融领域词表,在海量领域文档数据上二次预训练LLaMA模 型; • 第二阶段:构造指令微调数据集,在第一阶段的预训练模型基础上做指令精调。还可以把指令 微调数据集拼起来成文档格式放第一阶段里面增量预训练,让模型先理解下游任务信息。
还对比了各因素的消融实验: 消融实验结论: • 扩充中文词表后,可以增量模型对中文的理解能力,效果更好 • 数据质量越高越好,而且数据集质量提升可以改善模型效果 • 数据语言分布,加了中文的效果比不加的好 • 数据规模越大且质量越高,效果越好,大量高质量的微调数据集对模型效果提升最明显。解释 下:数据量在训练数据量方面,数据量的增加已被证明可以显著提高性能。值得注意的是,如
他们的技术报告证明中文大模型的训练是可行的,虽然与ChatGPT还有差距。这里需要指出后续 RLHF也很重要,我罗列在这里,抛砖引玉。
片段 9¶
注意的是,如
他们的技术报告证明中文大模型的训练是可行的,虽然与ChatGPT还有差距。这里需要指出后续 RLHF也很重要,我罗列在这里,抛砖引玉。 13. 指令微调的好处? 有以下好处: 踩在巨人的肩膀上、直接在1750亿参数的大模型上微调,不少研发人员都可以不用再重头训练自 己的AI模型了。(更高效) 14. 预训练和微调哪个阶段注入知识的? 预训练阶段注入知识的,微调是在特定任务训练,以使预训练模型的通用知识跟特定任务的要求结 合,使模型在特定任务上表现更好。 15. 想让模型学习某个领域或行业的知识,是应该预训练还是应该 微调? 可以使用预训练和微调相结合的方式,先用篇章数据进行预训练以获取广泛的知识,再用问答对数 据进行微调,使模型更好的学习到特定领域的知识。 当然,GPT大模型的预训练和微调,从实现方式来讲是没有什么差别的,都是decoder only的语言 模型训练并更新参数,如果样本集小,没有大量的篇章文档数据,我认为只进行微调也能注入知识 的,不必太纠结预训练。而且特定领域跟预训练模型的分布差别不大,也不用二次预训练。 16. 多轮对话任务如何微调模型?
片段 10¶
样本集小,没有大量的篇章文档数据,我认为只进行微调也能注入知识 的,不必太纠结预训练。而且特定领域跟预训练模型的分布差别不大,也不用二次预训练。 16. 多轮对话任务如何微调模型? 这里列举了 ChatGLM-6B 的生成对话的例子 此巨大的改进可能部分来自belle-3.5和我们的评估数据之间的相似分布。评估数据的类别、主 题和复杂性将对评估结果产生很大影响 • 扩充词表后的LLaMA-7B-EXT的评估表现达到了0.762/0.824=92%的水平 1. 对齐人类意图,能够理解自然语言对话(更有人情味) 2. 经过微调(fine-tuned),定制版的GPT-3在不同应用中的提升非常明显。OpenAI表示,它可 以让不同应用的准确度能直接从83%提升到95%、错误率可降低50%。解小学数学题目的正确 率也能提高2-4倍。(更准)
from transformers import AutoTokenizer, AutoModel tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True)
片段 11¶
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True) model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda() model = model.eval() response, history = model.chat(tokenizer, "你好", history=[]) print(f"response:{response}") print(f"history:{history}") response:你好👋!我是人工智能助手 ChatGLM-6B,很高兴见到你,欢迎问我任何问题。 history:["你好", "你好👋!我是人工智能助手 ChatGLM-6B,很高兴见到你,欢迎问我任 何问题。"] • response 为 ChatGLM-6B 模型的 当前反馈
片段 12¶
�!我是人工智能助手 ChatGLM-6B,很高兴见到你,欢迎问我任 何问题。"] • response 为 ChatGLM-6B 模型的 当前反馈
说白了,就是 ChatGLM-6B 模型简单的把上一轮对话扔进下一轮的input里,这种方法好处是简 单,缺点是随着轮数的增加,history 存储的 对话会越来越多,导致 max_length 增加,从而 出现 爆显问题。 17. 微调后的模型出现能力劣化,灾难性遗忘是怎么回事? 所谓的灾难性遗忘:即学习了新的知识之后,几乎彻底遗忘掉之前习得的内容。这在微调 ChatGLM-6B模型时,有同学提出来的问题,表现为原始ChatGLM-6B模型在知识问答如“失眠怎么 办”的回答上是正确的,但引入特定任务(如拼写纠错CSC)数据集微调后,再让模型预测“失眠怎 么办”的结果就答非所问了。 我理解ChatGLM-6B模型是走完 “预训练-SFT-RLHF” 过程训练后的模型,其SFT阶段已经有上千指 令微调任务训练过,现在我们只是新增了一类指令数据,相对大模型而已,微调数据量少和微调任
使用建议¶
- 这些内容来自授权公开 PDF 的文本抽取结果,网页端会基于同一份静态索引做关键词检索。
- 面试复习时建议先用网页 PDF 原文检索定位题目,再回到主 notes 学系统化答案。
- 如果片段出现排版噪声,以原 PDF 语义为准,并优先整理成自己的回答模板。