logo
8

【教程】SFT调优快速手册

SFT在大语言模型中能够显著提升任务特定性能,有着重要意义,本期教程从两个关键因素,教广大开发者如何快速调优。

目录:

  1. SFT概述
  2. 数据准备
  3. 选择SFT的参数

SFT概述

什么是SFT

监督微调(SFT)是指采用预先训练好的神经网络模型,并针对你自己的专门任务在少量的监督数据上对其进行重新训练的技术。在千帆平台上已经预置了ERNIE-Bot系列大模型和BLOOM系列大模型。

SFT在大语言模型中的应用的作用

  • 任务特定性能提升:预训练语言模型通过大规模的无监督训练学习了语言的统计模式和语义表示。然而,它在特定任务上的性能可能不如在大规模无监督数据上表现出的性能。通过在任务特定的有标签数据上进行微调,模型可以进一步学习任务相关的特征和模式,从而提高性能。
  • 领域适应性:预训练语言模型可能在不同领域的数据上表现不一致。通过在特定领域的有标签数据上进行微调,可以使模型更好地适应该领域的特殊术语、结构和语义,提高在该领域任务上的效果。
  • 数据稀缺性:某些任务可能受制于数据的稀缺性,很难获得大规模的标签数据。监督微调可以通过使用有限的标签数据来训练模型,从而在数据有限的情况下取得较好的性能。
  • 防止过拟合:在监督微调过程中,通过使用有标签数据进行有监督训练,可以减少模型在特定任务上的过拟合风险。这是因为监督微调过程中的有标签数据可以提供更具体的任务信号,有助于约束模型的学习,避免过多地拟合预训练过程中的无监督信号。

数据准备

LLM大语言模型所需SFT数据

为每个示例准备文本输入和标签,以问答形式呈现,如下所示:
  • 问题: 维珍澳大利亚何时开始运营?背景: 维珍澳大利亚,是维珍澳大利亚航空有限公司的交易名称,是一家总部设在澳大利亚的航空公司。它是使用维珍品牌的最大机队规模的航空公司。它于2000年8月31日作为维珍蓝航空公司开始运营,在一条航线上有两架飞机。在2001年9月安捷澳大利亚公司倒闭后,它突然发现自己成为澳大利亚国内市场的一家主要航空公司。此后,该航空公司发展到直接服务于澳大利亚的32个城市,从布里斯班到墨尔本和悉尼的枢纽。
  • 回应: 维珍澳大利亚于2000年8月31日以维珍蓝的名义开始提供服务,在一条航线上使用两架飞机。
问答格式可以处理成多种文件格式, 例如JSONL, Excel File, CSV; 核心是要保持两个独立的字段, 即问题和答案。
可以从公开网络下载指令数据模板, 并尝试替换内容: https://huggingface.co/datasets/BAAI/COIG

Prompt优化

  • prompt优化主要在训练阶段,用于增强指令的多样性,让模型更好的理解指令
    • 预测阶段的prompt优化主要用于无法进行finetune的场景,例如chatgpt/yiyan.baidu.com等。
    • 对于特定下游任务,预测阶段建议与训练阶段保持一致或者接近的prompt,并且可以暂时忽略预测阶段的prompt优化。
  • 适当构建few shotCOT(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。
评论
用户头像