SFT调优快速手册
一、目录:
-
SFT概述
-
数据准备
-
选择SFT的参数
二、SFT概述
2.1 什么是SFT
监督微调(SFT)是指采用预先训练好的神经网络模型,并针对你自己的专门任务在少量的监督数据上对其进行重新训练的技术。在千帆平台上已经预置了ERNIE-Bot系列大模型和BLOOM系列大模型。
2.2 SFT在大语言模型中的应用的作用
-
任务特定性能提升:预训练语言模型通过大规模的无监督训练学习了语言的统计模式和语义表示。然而,它在特定任务上的性能可能不如在大规模无监督数据上表现出的性能。通过在任务特定的有标签数据上进行微调,模型可以进一步学习任务相关的特征和模式,从而提高性能。
-
领域适应性:预训练语言模型可能在不同领域的数据上表现不一致。通过在特定领域的有标签数据上进行微调,可以使模型更好地适应该领域的特殊术语、结构和语义,提高在该领域任务上的效果。
-
数据稀缺性:某些任务可能受制于数据的稀缺性,很难获得大规模的标签数据。监督微调可以通过使用有限的标签数据来训练模型,从而在数据有限的情况下取得较好的性能。
-
防止过拟合:在监督微调过程中,通过使用有标签数据进行有监督训练,可以减少模型在特定任务上的过拟合风险。这是因为监督微调过程中的有标签数据可以提供更具体的任务信号,有助于约束模型的学习,避免过多地拟合预训练过程中的无监督信号。
三、数据准备
3.1 LLM大语言模型所需SFT数据
为每个示例准备文本输入和标签,以问答形式呈现,如下所示:
-
问题: 维珍澳大利亚何时开始运营?背景: 维珍澳大利亚,是维珍澳大利亚航空有限公司的交易名称,是一家总部设在澳大利亚的航空公司。它是使用维珍品牌的最大机队规模的航空公司。它于2000年8月31日作为维珍蓝航空公司开始运营,在一条航线上有两架飞机。在2001年9月安捷澳大利亚公司倒闭后,它突然发现自己成为澳大利亚国内市场的一家主要航空公司。此后,该航空公司发展到直接服务于澳大利亚的32个城市,从布里斯班到墨尔本和悉尼的枢纽。
-
回应: 维珍澳大利亚于2000年8月31日以维珍蓝的名义开始提供服务,在一条航线上使用两架飞机。
问答格式可以处理成多种文件格式, 例如JSONL, Excel File, CSV; 核心是要保持两个独立的字段, 即问题和答案。
可以从公开网络下载指令数据模板, 并尝试替换内容: https://huggingface.co/datasets/BAAI/COIG
3.2 Prompt优化
-
prompt优化主要在训练阶段,用于增强指令的多样性,让模型更好的理解指令
-
预测阶段的prompt优化主要用于无法进行finetune的场景,例如chatgpt/yiyan.baidu.com等。
-
对于特定下游任务,预测阶段建议与训练阶段保持一致或者接近的prompt,并且可以暂时忽略预测阶段的prompt优化。
-
-
适当构建few shot及COT(Chain of Thought)数据加入训练,可以有助于模型的指令理解以及多轮对话能力。
数据规模、数据多样性
在SFT上数据规模的重要性低于数据质量, 通常1万条左右的精标数据即可发挥良好的效果。
在扩充数据规模时需要注意数据多样性,多样性的数据可以提高模型性能。
多样性除了从原始数据中获取,也可以通过prompt_template方式构建,对prompt指令进行数据增强,比如中文翻译英文的指令可以拓展为,中译英,翻译中文为英文等相同语义的指令。
在不扩大提示多样性的情况下扩大数据量时,收益会大大减少,而在优化数据质量时,收益会显著增加。
数据质量
挑选质量较高的数据,可以有效提高模型的性能。
数据质量用户需尽量自己把控,避免出现一些错误,或者无意义的内容。虽然平台也可以提供数据质量筛选的能力,但不可避免出现错筛的情况。
数据质量可以通过ppl、reward model,文本质量分类模型等方式进行初步评估。经过人工进行后续筛选。
选择SFT的超参数
-
EPOCH影响比 LR 大,可以根据数据规模适当调整EPOCH大小。 例如小数据量可以适当增大epoch,让模型充分收敛。
-
例如:EPOCH:100条数据时, Epoch为15,1000条数据时, Epoch为10,10000条数据时, Epoch为2。
-
过高的epoch可能会带来通用NLP能力的遗忘,这里需要您根据实际需求核定,若您只需要下游能力提升,则通用NLP能力的略微下降影响不大。若您非常在乎通用NLP能力,平台侧也提供过来种子数据来尽可能保证通用NLP能力不降低太多。
-
-
适当增加globalbatch_size:如增加accumulate step 32 64,当分布式节点增多时可以进一步增加batch_size,提高吞吐。
-
学习率(LR, learning Rate): 对于ptuing/lora等peft训练方式,同时可以适当增大LR。
附:大语言模型的P-Tuning是一种高效的微调技术,它旨在通过调整模型的一小部分参数来实现与全量微调近似的效果。这种技术的全称是Parameter-Efficient Fine-Tuning,简称为PEFT。其核心思想是在保持预训练模型大部分参数不变的情况下,只对一小部分参数进行更新和优化。
P-Tuning是一种在大规模预训练语言模型上进行微调的技术,它通过引入可学习的提示(prompts)来调整模型参数,从而让模型更好地理解和生成特定领域的文本。以下是P-Tuning的主要实现方式和步骤:
准备领域特定的少量样本数据和领域信息。这些数据将被用来训练模型,使其适应新的领域。
选择合适的预训练模型,如GPT-2作为基础模型。这个模型将作为起点,在此基础上进行微调。
创建可学习的提示(Prompt Embeddings)。这些提示被转化为嵌入向量,并加入到模型的输入层。提示的位置可以是输入序列的开始、结束或中间,这取决于任务的需求。
设计微调网络结构。P-Tuning通常采用多层感知机(MLP)和长短期记忆网络(LSTM)的组合结构,对提示嵌入进行处理。
进行有监督的微调。这意味着你需要为模型提供带标签的训练数据,以便模型能够学习到如何在新领域中生成正确的文本。
训练模型。在训练过程中,只有提示嵌入和相关联的模型参数会被更新,而大部分预训练模型参数保持固定。
评估和部署模型。一旦模型训练完成,就可以用它来生成新的文本或在特定任务上做出预测。
通过这种方式,P-Tuning不仅保持了预训练模型的大部分知识,而且通过少量的训练数据就能使模型适应新的领域,这在处理零样本和小样本学习任务时尤其有效。此外,由于只更新了模型的一小部分参数,P-Tuning在训练速度和显存占用方面都有优势,尽管它在某些任务上的性能可能会略逊于传统的全量微调(Fine-Tuning)方法。