一般 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 弄傻。
- 新版答案: 指令微调是为了增强(或解锁)大语言模型的能力。 其真正作用: 指令微调后,大语言模型展现出泛化到未见过任务的卓越能力,即使在多语言场景下也能有不错表 现。
1.代表性。应该选择多个有代表性的任务; 2. 数据量。每个任务实例数量不应太多(比如:数百个)否则可能会潜在地导致过拟合问题并影 响模型性能; 3. 不同任务数据量占比。应该平衡不同任务的比例,并且限制整个数据集的容量(通常几干或几 万),防止较大的数据集压倒整个分布。
4.领域模型 Continue PreTrain 数据选取?
技术标准文档或领域相关数据是领域模型 Continue PreTrain 的关键。因为领域相关的网站和资讯重 要性或者知识密度不如书籍和技术标准。
5.领域数据训练后,通用能力往往会有所下降,如何缓解模型遗 忘通用能力?
- 动机:仅仅使用领域数据集进行模型训练,模型很容易出现灾难性遗忘现象.
- 解决方法:通常在领域训练的过程中加入通用数据集 那么这个比例多少比较合适呢? 目前还没有一个准确的答案。主要与领域数据量有关系,当数据量没有那么多时,一般领域数据与 通用数据的比例在 1:5 到 1:10 之间是比较合适的。
6.领域模型 Continue PreTrain,如何让模型在预训练过程中就 学习到更多的知识? 领域模型 Continue PreTrain 时可以同步加入 SFT 数据,即 MIP,Multi- Task Instruction PreTraining. 预训练过程中,可以加下游 SFT 的数据,可以让模型在预训练过程中就学习到更多的知识。
7.进行 SFT 操作的时候,基座模型选用 Chat 还是 Base?