首页 > 其他分享 >LLM Fine-Tuning技术笺疏

LLM Fine-Tuning技术笺疏

时间:2024-06-01 13:55:06浏览次数:20  
标签:pre Tuning SFT 领域 任务 train LLM Fine 模型

LLM训练阶段

训练大模型的三个阶段

  1. Pre-training stage,也就是预训练阶段,其主要目的是「提高对下一个Token的预测能力」。预训练也就是从零开始创建训练大模型的意思,是基于海量文本、几万亿Token进行的,需要上万张GPU。如果你不理解什么是Token,你就把它理解成每个token就是一个英文单词,了解英语词根的你可以理解为每Token是一个词根,或者汉语中的一个汉字,Token优化技术主要是研究「词向量空间」如何压缩和降维,以节省算力;
  2. Fine-tuning stage,也就是微调阶段,其主要目的是「提高模型对指令(instruction)的遵循能力」。主要包括Instruction SFT(指令监督微调)、DPO、KTO等技术,本文重点讲解这三类微调技术;
  3. Prompting stage,也就是使用模型推理阶段,其主要目的是「让模型按照你的期望输出结果」。这个阶段所使用的模型学习技术主要是ICL(In-Context Learning),也就是常说的Prompt Engineering/Template(提示词工程/模版),在调用大模型推理接口的时候把「相关上下文文档」和「你期望的输出结果」一起交给大模型,甚至你可以提示大模型应该怎么执行这个推理过程的步骤;

这里有个问题是,已经有了基于Prompt的In-Context Learning技术,为何还要Fine-Tuning技术呢?
因为大模型推理接口,每次接受的上下文长度是受限制的,比如LLaMa3的上下文长度是8000个Token。那么如何让大模型感知你的比较大的私域数据集、以及你的个人数据偏好,就是Fine-Tuning技术所要解决的问题

模型训练模式

了解了模型训练阶段后,现在有个问题,我们应该在哪个阶段进行微调训练呢?
通常会有以下训练模式进行选择,根据领域任务、领域样本情况、业务的需求我们可以选择合适的训练模式。
模式一:基于base模型+领域任务的SFT;
模式二:基于base模型+领域数据 continue pre-train +领域任务SFT;
模式三:基于base模型+领域数据 continue pre-train +通用任务SFT+领域任务SFT;
模式四:基于base模型+领域数据 continue pre-train +通用任务与领域任务混合SFT;
模式五:基于base模型+领域数据 continue pre-train(混入SFT数据+通用任务与领域任务混合SFT;
模式六:基于chat模型+领域任务SFT;
模式七:基于chat模型+领域数据 continue pre-train +领域任务SFT

是否需要continue pre-train?

大模型的知识来自于pre-train阶段,如果你的领域任务数据集与pre-train的数据集差异较大,比如你的领域任务数据来自公司内部,pre-train训练样本基本不可能覆盖到,那一定要进行continue pre-train。
如果你的领域任务数据量较大(token在1B以上),并只追求领域任务的效果,不考虑通用能力,建议进行continue pre-train。

是选择chat模型,还是base模型?

如果你有一个好的base模型,在base模型基础进行领域数据的SFT与在chat模型上进行SFT,效果上差异不大。
基于chat模型进行领域SFT,会很容导致灾难性遗忘,在进行领域任务SFT之后,模型通用能力会降低,如只追求领域任务的效果,则不用考虑。

如果你的领域任务与通用任务有很大的相关性,那这种二阶段SFT会提升你的领域任务的效果。
如果你既追求领域任务的效果,并且希望通用能力不下降,建议选择base模型作为基座模型。在base模型上进行多任务混合训练,混合训练的时候需要关注各任务间的数据配比。

其他经验

在资源允许的情况下,如只考虑领域任务效果,我会选择模式二;
在资源允许的情况下,如考虑模型综合能力,我会选择模式五;
在资源不允许的情况下,我会考虑模式六;
一般情况下,我们不用进行RLHF微调;

模型量化

量化技术专注于用较少的信息表示数据,同时尽量不损失太多准确性。
Transformers支持三种量化方法:AWQ、GPTQ、 BNB。底层细节我们不必研究
GPTQ是专为GPT模型设计的,AWQ适用于多种模型和任务,包括多模态语言模型。
BNB是将模型量化为8位和4位的最简单选择,4位量化可以与QLoRA一起用于微调量化LLM。

PEFT库

PEFT是Hugging Face提供的库,是一个为大型预训练模型提供多种高效微调方法的python库。
PEFT文档地址:https://hf-mirror.com/docs/peft/index
PEFT可以轻松与Transformers库集成,一起完成模型微调的工作。
微调方式包括LoRA、AdaLoRA、P-tuning等。
补充说明:QLoRA是量化LoRA的缩写,需要把模型量化再进行训练,细节暂不研究。

Fine-Tuning技术

image

本文主要讲解以Llama Factory Alpaca 训练数据格式为主的微调技术
官网直达:https://github.com/hiyouga/LLaMA-Factory/blob/main/data/README_zh.md

Instruction Supervised Fine-Tuning

在指令监督微调时,instruction 列对应的内容会与 input 列对应的内容拼接后作为人类指令,即人类指令为 instruction\ninput。而 output 列对应的内容为模型回答。

如果指定,system 列对应的内容将被作为系统提示词。

history 列是由多个字符串二元组构成的列表,分别代表历史消息中每轮对话的指令和回答。注意在指令监督微调时,历史消息中的回答内容也会被用于模型学习。

点击查看代码
[
  {
    "instruction": "人类指令(必填)",
    "input": "人类输入(选填)",
    "output": "模型回答(必填)",
    "system": "系统提示词(选填)",
    "history": [
      ["第一轮指令(选填)", "第一轮回答(选填)"],
      ["第二轮指令(选填)", "第二轮回答(选填)"]
    ]
  }
]

Pre-Training

在预训练时,只有 text 列中的内容会用于模型学习。

点击查看代码
[
  {"text": "document"},
  {"text": "document"}
]

DPO

偏好数据集用于奖励模型训练、DPO 训练和 ORPO 训练。

它需要在 chosen 列中提供更优的回答,并在 rejected 列中提供更差的回答。

点击查看代码
[
  {
    "instruction": "人类指令(必填)",
    "input": "人类输入(选填)",
    "chosen": "优质回答(必填)",
    "rejected": "劣质回答(必填)"
  }
]

KTO

KTO训练方法是基于人类反馈的强化学习RLHF的一种,数据集需要额外添加一个 kto_tag 列,包含 bool 类型的人类反馈。

点击查看代码
[
  {
    "instruction": "人类指令(必填)",
    "input": "人类输入(选填)",
    "output": "模型回答(必填)",
    "kto_tag": "人类反馈 [true/false](必填)"
  }
]

LLaMa Factory数据集简介

官网直达:https://github.com/hiyouga/LLaMA-Factory/blob/main/README_zh.md#数据集

标签:pre,Tuning,SFT,领域,任务,train,LLM,Fine,模型
From: https://www.cnblogs.com/ray1997/p/18225649

相关文章

  • 全球首个多语种手语视频生成模型诞生:SignLLM
    近日,一项名为SignLLM的新型AI技术取得了突破性进展,或将彻底改变听障人士的沟通方式。作为全球首个多语种手语生成模型,SignLLM能够将输入的文本或语音指令,实时转化为对应的手语手势视频,为打破语言障碍、促进信息无障碍传播带来了革命性希望。全球首个文本转多语种手......
  • LLM 大模型学习必知必会系列(十二):VLLM性能飞跃部署实践:从推理加速到高效部署的全方位
    LLM大模型学习必知必会系列(十二):VLLM性能飞跃部署实践:从推理加速到高效部署的全方位优化[更多内容:XInference/FastChat等框架]训练后的模型会用于推理或者部署。推理即使用模型用输入获得输出的过程,部署是将模型发布到恒定运行的环境中推理的过程。一般来说,LLM的推理可以直接使......
  • LLM 大模型学习必知必会系列(十三):基于SWIFT的VLLM推理加速与部署实战
    LLM大模型学习必知必会系列(十三):基于SWIFT的VLLM推理加速与部署实战1.环境准备GPU设备:A10,3090,V100,A100均可.#设置pip全局镜像(加速下载)pipconfigsetglobal.index-urlhttps://mirrors.aliyun.com/pypi/simple/#安装ms-swiftpipinstall'ms-swift[llm]'-U......
  • 一键云部署:资源编排 ROS 轻松部署 LLM 应用开发平台 Dify
    介绍Dify是一款开源的大语言模型(LLM)应用开发平台。它融合了后端即服务(BackendasService)和LLMOps的理念,使开发者可以快速搭建生产级的生成式AI应用。即使你是非技术人员,也能参与到AI应用的定义和数据运营过程中。资源编排服务(ResourceOrchestrationService,ROS)......
  • 一键云部署:资源编排 ROS 轻松部署 LLM 应用开发平台 Dify
    介绍Dify是一款开源的大语言模型(LLM)应用开发平台。它融合了后端即服务(BackendasService)和LLMOps的理念,使开发者可以快速搭建生产级的生成式AI应用。即使你是非技术人员,也能参与到AI应用的定义和数据运营过程中。资源编排服务(ResourceOrchestrationService,ROS)是阿里......
  • 山东大学项目实训-基于LLM的中文法律文书生成系统(十六)- 指令微调(1)
    指令微调指令微调(InstructionTuning)是指使用自然语言形式的数据对预训练后的大语言模型进行参数微调。微调适用的场景通常来说,适合微调的场景主要分为行业场景和通用场景对于行业场景:例如客服助手,智能写作辅导等需要专门的回答范式和预期的场景例如智慧医生,智慧律师等需要......
  • 山东大学项目实训-基于LLM的中文法律文书生成系统(十七)- 微调-LoRA(2)
    LoRALORA是一种低资源微调大模型方法,出自论文LoRA:Low-RankAdaptationofLargeLanguageModels。使用LORA,训练参数仅为整体参数的万分之一、GPU显存使用量减少2/3且不会引入额外的推理耗时。自然语言处理的一个重要范式包括对一般领域数据的大规模预训练和对特定任务或领......
  • 山东大学项目实训-基于LLM的中文法律文书生成系统- 中期总结
    本次创新项目实训自三月开始,在今天中期检查之后对项目工作进行了回顾,下文对这段工作作简要总结。项目选题其实我是比较犹豫,因为LLM此前的了解只有ChatGPT这种基本成熟的模型,而且也只是简单调用,对源码,接口的使用基本是未知,以我对其他成员的了解,基本也大差不差。因此项目前景堪忧。......
  • 山东大学项目实训-基于LLM的中文法律文书生成系统(七)- 提示工程
    LLM大模型给我们看到了人工智能的可塑性,机器真的可以像人一样理解问题并回答问题(表面看起来如此),但并不是每个问题都可以得到令人满意的答案,如果想得到你所要的回答就要构建好你的提示词Prompt。无论是初学者还是经验丰富的开发人员,Prompt提示词都能为我们带来更高效的开发体验。......
  • [本科项目实训] P-tuning v2技术介绍, Prompt设计与尝试
    to2024/05/13P-tuning概述关于prompttuning和p-tuning技术有大量的相关博客,我在参考资料中给出对于本项目具有一定启发性的内容并在此做简单总结。prompt-tuning为区别于最开始pre-training+fine-tuning的大语言模型微调范式,其希望通过添加模板的方式避免引入额......