大模型微调—海南小百科(一)

news/2024/11/29 20:50:00/文章来源:https://www.cnblogs.com/softlin/p/18569013

      语言大模型是通过大规模数据集训练而来可以帮我们进行文本生成、内容总结,但对于一些小众知识、内部数据模型不一定知道怎么回答,这时候可能会胡言乱语。目前要想在特定领域小众知识或私密数据时模型能够表现出比较好的水平目前主要有两种方式可以实现:模型微调、外挂知识库也就是RAG模式,RAG模式之前我们有介绍过,本篇文章主要是介绍模型微调。
      模型微调训练是将知识库(私有知识)的内容整理成训练数据集,将这些整理好的数据集来训练大语言模型,最终让模型“学会”该知识库的内容,至于效果如何很大程度取决于该数据集的质量和训练的调参以及基础模型的质量,这种方式流程较复杂、算力要求高相对比外挂知识库RAG方式门槛更高;
      目前大模型是通过参数规模、训练数据规模、算力规模堆积起来的语言大模型小的有几亿参数量大的达到几千亿参数量乃至万亿参数量,一般公司也只能运行推理百亿规模模型,从0训练一个大模型无论是算力或是数据都不具备这样的能力,模型微调所需要的技术、算力资源就要少得多。下图为LLaMA-Factory官方估计的大模型微调所需要显存资源情况。

微调概念

      大模型训练完成之后超参数已经固定下来了,大模型在特定领域知识上可能表现不佳这时候想要大模型在该领域知识范围达到比较好的水平,可以通过在预训练大模型的基础上使用该特定领域知识再次训练模型已达到调整超参数使得大模型读懂该领域知识的目的。
      微调目的: 调整超参数使大模型在特定领域知识内达到比较好的水平;
      微调类型: 全量微调(Full Fine-tuning)、参数高效微调(Parameter-Efficient Fine-Tuning, PEFT)
      全量微调: 通过预训练模型的所有参数进行训练调整适配特定领域知识,但需要有足够规模的计算资源。
      参数高效微调(PEFT): 最小化微调参数数量,只需要微调更新模型的部分参数调整所依赖的计算资源比全量微调小得多。PEFT主要算法包括Prefix Tuning、Prompt TuningAdapter TuningIA3 (Intrinsic Adapter 3)LORA (Low-Rank Adaptation)Q-LoRA(Quantized Low-Rank Adapter)DoRA(Weight-Decomposed Low-Rank AdaptationGaLore(Gradient Low-Rank Projection)BAdam 等方式。
      Adapter Tuning: 这是一种通过在模型的层之间插入小型的神经网络模块(称为adapters)来实现微调的技术。这些adapters包含可训练的权重,而模型的原始参数保持不变。Adapter Tuning通过学习降维后的特征,有效地减少了参数数量,同时使用skip-connection技术,即使在最差情况下,Adapter层也可以退化为identity,从而保持模型的稳定性。
      Prompt Tuning: 这是一种通过在输入序列前添加额外的Token来适配下游任务的方法。这些额外的Token是可训练的,而预训练语言模型的参数保持不变。Prompt Tuning通过构建或选择适当的提示(Prompt),引导模型生成符合期望的输出。
      IA3 (Intrinsic Adapter 3): IA3是一种新的高效微调方法,它在冻结大模型参数的情况下,通过在输入时给定一些样本包含数据和标签,同时给一个待预测数据,由模型输出这条数据的预测值。这个过程中模型的参数不发生变化。IA3提出了一个新的高效微调方法,基于T0模型提出了T-Few,在下游任务中不需要对任务进行额外模型调整,即可进行少样本学习。IA3 将模型的激活(自我注意和编码器-解码器注意力块中的键和值,以及位置前馈网络的中间激活)乘以三个学习向量,可训练参数数量比 LoRA 还要少。
      LORA (Low-Rank Adaptation): LORA通过对基座模型参数中的每个矩阵W增加两个低秩矩阵A和B,其中A是 n * r 的,B是 r * n 的。新模型的参数为W_new = W + A * B,冻结固定W,只调整A和B。LORA通常只调整Attention中的矩阵,不调整FFN。预训练模型的原始权重矩阵被冻结,在训练期间只有较小的矩阵会更新减少训练参数量,同时保持模型性能。

微调工具

      比较常见的微调框架工具有LLaMA-Factory、PEFT等,LLaMA-Factory提供了全流程微调的解决方案包括全量微调、高效微调等还提供了基础数据集的支持,微调脚本与Web界面。而PEFT只是一个高效微调框架可以很方便与Transformers等集成使用。

PEFT微调

      这里使用PEFT框架对Qwen2.5-0.5B模型进行LORA微调,看其在特定领域知识内是否会有明显改善。LoRA(Low-Rank Adaptation)的核心思想是通过在模型的特定层或模块中插入低秩矩阵来近似全参数微调的效果。
      对参数矩阵W增加两个低秩矩阵A和B,其中A是 n * r 的,B是 r * n 的,这里已Qweb2.5-0.5B为例介绍LoRA微调的总体实现,原模型结构如下:

 Qwen2ForCausalLM((model): Qwen2Model((embed_tokens): Embedding(151936, 896)(layers): ModuleList((0-23): 24 x Qwen2DecoderLayer((self_attn): Qwen2SdpaAttention((q_proj): Linear(in_features=896, out_features=896, bias=True)(k_proj): Linear(in_features=896, out_features=128, bias=True)(v_proj): Linear(in_features=896, out_features=128, bias=True)(o_proj): Linear(in_features=896, out_features=896, bias=False)(rotary_emb): Qwen2RotaryEmbedding())(mlp): Qwen2MLP((gate_proj): Linear(in_features=896, out_features=4864, bias=False)(up_proj): Linear(in_features=896, out_features=4864, bias=False)(down_proj): Linear(in_features=4864, out_features=896, bias=False)(act_fn): SiLU())(input_layernorm): Qwen2RMSNorm((896,), eps=1e-06)(post_attention_layernorm): Qwen2RMSNorm((896,), eps=1e-06)))(norm): Qwen2RMSNorm((896,), eps=1e-06)(rotary_emb): Qwen2RotaryEmbedding())(lm_head): Linear(in_features=896, out_features=151936, bias=False))

      在加载基座模型后可使用LoraConfig配置具体需要进行LoRA微调的参数如:target_modules、秩、alpha、dropout等值。
      target_modules: 需要进行微调的模块,可选值有q_proj、k_proj、v_proj、o_proj、gate_proj等。
      r: 秩,直接影响了低秩矩阵的大小,决定了微调的参数量
      alpha: 缩放因子,用于调节低秩矩阵对模型权重的贡献程度,多大可能会过拟合。
      dropout: 值在0和1之间,随机丢弃某些权重的概率。

 model = AutoModelForCausalLM.from_pretrained(model_name,low_cpu_mem_usage=True)config = LoraConfig(r=8, lora_alpha=128, lora_dropout=0.0,target_modules=["q_proj", "k_proj", "v_proj"]   #, "o_proj", "gate_proj", "up_proj", "down_proj"])model = get_peft_model(model, config)

      知道了秩r的值、需要微调的模块以及该模块的输入输出,即可计算出微调的过程中训练的参数量是多少,LoRA核心思想是通过在模型的特定层或模块中插入低秩矩阵来近似全参数微调的效果。对于每个目标模块,LoRA增加的参数量计算公式为:
      参数量 =输入维度 * r + r * 输出维度= r × ( 输入维度 + 输出维度 ) 。
      以上微调LoraConfig配置为例,通过该配置微调Qwen2.5-0.5B所增加的参数量计算结果如下:

 r = 8  q = 896 * 896  k = 896 * 128   v = 896 * 128  有24个解码层q  =24*(896*8+8*896) k  =24*(896*8+8*128)v  =24*(896*8+8*128)

      带入上面公式可得到q、k、v每个模块的参数量,q+k+v所得的就是当前模型微调的总参数量也是可训练的总参数量:737280;

      通过AutoModelForCausalLM模型print_trainable_parameters方法输出可知Qwen2.5-0.5B总参数量为:4亿9千万,通过LORA微调实际可微调的参数为439万占比为0.88%,冻结了99%的参数,可通过下面方法验证计算结果是否正确;

 #打印模型可训练参数信息model.print_trainable_parameters()trainable params: 737,280 || all params: 494,770,048 || trainable%: 0.1490

      all params 为模型总参数量,trainable params为可训练参数量,trainable可训练参数比为0.1490%,all params为原来模型参数量+本次微调新增参数量。
      本篇文章只介绍了微调的基本概念,后续将介绍微调的具体流程与代码实现。

参考资料:
peft

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/841478.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dotnet 麒麟 Kylin 的 X11 应用开发记录

本文记录我在麒麟 Kylin 的 X11 应用开发过程的经验系统版本信息 本文面向的麒麟系统版本信息如下: $ cat /etc/os-release NAME="Kylin" VERSION="银河麒麟桌面操作系统(教育版)V10" VERSION_US="Kylin Linux Desktop EDU V10" ID=kylin ID_…

VMware ESXi 7.0U3q macOS Unlocker OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版)

VMware ESXi 7.0U3q macOS Unlocker & OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版)VMware ESXi 7.0U3q macOS Unlocker & OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版) ESXi 7.0U3 标准版集成 Intel 网卡、Realtek USB 网卡 和 NVMe 驱动 请访问原文链…

Redis中的分布式锁(步步为营)

分布式锁 概述 分布式锁指的是,所有服务中的所有线程都去获取同一把锁,但只有一个线程可以成功的获得锁,其他没有获得锁的线程必须全部等待,直到持有锁的线程释放锁。 分布式锁是可以跨越多个实例,多个进程的锁分布式锁具备的条件:互斥性:任意时刻,只能有一个客户端持有…

【宝兰德中间件】单实例分离安装部署

#BES中间件 #宝兰德 一、安装环境二、安装步骤2.1 创建用户以及用户组2.2 配置目录权限2.3 上传安装包以及JDK2.4 JDK安装配置2.5 实例创建一、安装环境二、安装步骤 2.1 创建用户以及用户组 [root@mysql-20 data]# groupadd mw [root@mysql-20 data]# useradd -g mw -d /data/…

【政策解析】公共数据授权运营的六大关键参与主体:角色、责任与实践

1. 数据提供方 1.1 角色定位与责任 数据提供方在公共数据授权运营体系中扮演着基础且关键的角色。它们通常是政府部门或公共机构,负责收集、生成和维护原始数据。作为数据的源头,数据提供方的主要职责是确保所提供数据的合法性、准确性和时效性。根据《公共数据授权运营管理暂…

从架构到成本,SQL Server 和 PostgreSQL 四大区别全方位解析!

从架构到成本,SQL Server 和 PostgreSQL 四大区别全方位解析!今天我想分享 SQL Server 和 PostgreSQL 之间的四大关键区别。 在比较 SQL Server 和 PostgreSQL 这两种最常用的关系数据库管理系统(RDBMS)时,它们在架构、日志机制、并发模型、索引策略和许可方式等方面存在根…

Cyber Triage 3.12 for Windows - 数字取证和事件响应

Cyber Triage 3.12 for Windows - 数字取证和事件响应Cyber Triage 3.12 for Windows - 数字取证和事件响应 Digital Forensics Specialized For Incident Response 请访问原文链接:https://sysin.org/blog/cybertriage-3/ 查看最新版。原创作品,转载请保留出处。 作者主页:…

读数据质量管理:数据可靠性与数据质量问题解决之道15数据信任

数据信任1. 在数据平台中建立信任 1.1. 确保产品目标与业务目标保持一致1.1.1. 几十年来,数据平台被视为实现目标的手段,而不是“终极目标”​1.1.1.1. 数据不被当作核心产品来构建1.2. 寻求适合的利益相关方的反馈与认可1.2.1. …

[Vue Router] Redirect Alias

As our application evolves, we may need to change the URL paths of where our pages initially found. There are two convenience methods for this:⚠️ Problem: Changing Routes What if we needed to change our application from using /about for our about page to…

数据采集实践第四次作业

Gitee作业链接: https://gitee.com/FunkTank/crawl_project/tree/master/作业4 作业① 要求:熟练掌握 Selenium 查找HTML元素、爬取Ajax网页数据、等待HTML元素等内容。 使用Selenium框架+ MySQL数据库存储技术路线爬取“沪深A股”、“上证A股”、“深证A股”3个板块的股票数…

数据采集作业四

数据采集作业四 作业①: 要求: 熟练掌握 Selenium 查找HTML元素、爬取Ajax网页数据、等待HTML元素等内容。 使用Selenium框架+ MySQL数据库存储技术路线爬取“沪深A股”、“上证A股”、“深证A股”3个板块的股票数据信息。 候选网站:东方财富网:http://quote.eastmoney.com/…