04 XTuner 大模型单卡低成本微调实战

        在上一期内容中介绍了RAG的大模型定制方案以及具体实现的demo,这一期将对finetune进行简单介绍。


目录

1 Finetune简介

1.1 监督微调

1.2 增量预训练

1.3 LoRA & QLoRA

2 XTuner微调框架

3 微调实战

3.1 公开数据集demo

3.2 自定义微调


1 Finetune简介

        LLM的下游应用中,增量预训练和指令跟随是经常会用到的两种微调模式。两者的区别在于增量预训练往往是让基座模型学习到一些新知识,例如某个垂类领域的常识,训练数据往往是无监督的文章、书籍、代码等自然语言。而指令跟随以及监督微调主要目的是让模型学会对话模板,根据人类指令进行对话。在实际应用中,仅通过此阶段也能注入一定量的垂类知识。其训练数据集是有标签的监督高质量的对话和问答数据。与增量预训练不太一样的一点在于,此阶段对数据的质量要求较高,而对数据集的大小没有过多要求。

1.1 监督微调

        在实际对话时,通常会有三种角色 System给定一些上下文信息,比如“你是个安全的 A 助手”实际用户, User 会提出一些问题,比如“世界第一高峰是?” 根据 User 的输入,Assistant结合 System 的上下文信息,做出答,比如“珠穆朗玛峰”。需要注意的是,不同的开源大模型的模板不一样,尤其是special token的设置方面。在训练时需要严格匹配。

1.2 增量预训练

        此阶段使用的是无监督的语料数据,在处理上往往将system和input字段留空而只使用assistant字段进行训练。为了让 LLM 知道什么时候开始一段话,什么时候结束一段话实际训练时需要对数据添加起始符 (BOS) 和结束符(EOS)大多数的模型都是使用 作为起始符, 作为结束符。

1.3 LoRA & QLoRA

        LoRA由论文 Lora: Low-rank adaptation of large language models 提出,QLoRA在LoRA的基础上主要增加了大模型的量化技术,由论文 Qlora: Efficient finetuning of quantized llms 提出:

04 XTuner 大模型单卡低成本微调实战_第1张图片

        简单来说,LoRA是通过在原本的模型权重之外增加一个支路,这个支路包含两个小的部分A,B,这个新增的旁路成为Adapter。Aghajanyan的研究表明:预训练模型拥有极小的内在维度(instrisic dimension),即存在一个极低维度的参数,微调它和在全参数空间中微调能起到相同的效果。同时Aghajanyan发现在预训练后,越大的模型有越小的内在维度,这也解释了为何大模型都拥有很好的few-shot能力。

        全参数微调、LoRA微调、QLoRA对比如图:

04 XTuner 大模型单卡低成本微调实战_第2张图片

        QLORA包含两个组件:4-bit NormalFloat量化和Double Quantization。其中:4-bit NormalFloat数据类型是基于Quantile Quantization技术开发的,通过估计输入张量的分位数来保证每个量化区间分配相等的值。Double Quantization是将额外的量化常数进行量化以减小内存开销的过程。论文的另外一个贡献是合页优化器 (Paged Optimizer) 即gpu显存满了可以将一部分参数移到cpu内存里面计算 (Offload) ,进一步降低了显存开销。


2 XTuner微调框架

        XTuner适配多种生态,可以从HuggingFace、ModelScope等库加载模型和数据集,同时支持多款开源大模型;InternLM、Llama、Qwen、Baichuan、ChatGLM、Mistral (MoE) 等等。具体内容可以参考具体的github页面。目前支持的内置配置:

baichuan2_13b_base_qlora_alpaca_e3
baichuan2_13b_base_qlora_alpaca_enzh_e3
baichuan2_13b_base_qlora_alpaca_enzh_oasst1_e3
baichuan2_13b_base_qlora_alpaca_zh_e3
baichuan2_13b_base_qlora_arxiv_gentitle_e3
baichuan2_13b_base_qlora_co

你可能感兴趣的:(书生·浦语大模型实战营,深度学习,机器学习,人工智能)