hugging face笔记:PEFT

1 介绍

  • PEFT (Parameter-Efficient Fine Tuning) 方法在微调时冻结预训练模型参数,并在其上添加少量可训练的参数(称为适配器)
  • 这些适配器被训练用来学习特定任务的信息。
  • 这种方法已被证明在内存效率和计算使用上非常高效,同时能产生与完全微调模型相当的结果
  • 使用PEFT训练的适配器通常比完整模型小一个数量级,这使得分享、存储和加载它们变得非常方便。
    • 例如,一个OPTForCausalLM模型的适配器权重在Hub上的存储只有约6MB
    • 相比之下,完整的模型权重可以达到约700MB。

2 加载 PEFT适配器

2.1 直接from_pretrained加载

  • 若要从 Transformers 加载和使用 PEFT 适配器模型,请确保 Hub 存储库或本地目录包含 adapter_config.json 文件和适配器权重
  • 然后,可以使用 AutoModel类加载 PEFT 适配器模型
from transformers import AutoModelForCausalLM, AutoTokenizerpeft_model_id = "ybelkada/opt-350m-lora"
model = AutoModelForCausalLM.from_pretrained(peft_model_id)

2.2 load_adapter加载

from transformers import AutoModelForCausalLMmodel_id = "facebook/opt-350m"
peft_model_id = "ybelkada/opt-350m-lora"model = AutoModelForCausalLM.from_pretrained(model_id)
model.load_adapter(peft_model_id)

 2.3 以8位/4位加载

  • bitsandbytes 集成支持 8 位和 4 位精度数据类型,这对于加载大型模型非常有用,因为它节省了内存
  • 在 from_pretrained() 中添加 load_in_8bit 或 load_in_4bit 参数,并设置 device_map="auto" 以有效地将模型分配到你的硬件
from transformers import AutoModelForCausalLM, AutoTokenizerpeft_model_id = "ybelkada/opt-350m-lora"
model = AutoModelForCausalLM.from_pretrained(peft_model_id, device_map="auto", load_in_8bit=True)

3 添加适配器 

from transformers import AutoModelForCausalLM
from peft import LoraConfigmodel_id = "facebook/opt-350m"
model = AutoModelForCausalLM.from_pretrained(model_id)
#加载这个模型lora_config = LoraConfig(target_modules=["q_proj", "k_proj"],init_lora_weights=False
)
'''
target_modules 参数指定了将 LoRA 适配器应用于模型的哪些部分这里是 "q_proj"(查询投影)和 "k_proj"(键投影)init_lora_weights 设置为 False,意味着在初始化时不加载 LoRA 权重
'''model.add_adapter(lora_config, adapter_name="adapter_1")
#使用 add_adapter 方法将之前配置的 LoRA 适配器添加到模型中,适配器命名为 "adapter_1"model.add_adapter(lora_config, adapter_name="adapter_2")
# 附加具有相同配置的新适配器"adapter_2"

4 设置使用哪个适配器

# 使用 adapter_1
model.set_adapter("adapter_1")
output = model.generate(**inputs)
print(tokenizer.decode(output_disabled[0], skip_special_tokens=True))# 使用 adapter_2
model.set_adapter("adapter_2")
output_enabled = model.generate(**inputs)
print(tokenizer.decode(output_enabled[0], skip_special_tokens=True))

5 启用和禁用适配器

一旦向模型添加了适配器,可以启用或禁用适配器模块

from transformers import AutoModelForCausalLM, OPTForCausalLM, AutoTokenizer
from peft import PeftConfigmodel_id = "facebook/opt-350m"
adapter_model_id = "ybelkada/opt-350m-lora"tokenizer = AutoTokenizer.from_pretrained(model_id)
text = "Hello"
inputs = tokenizer(text, return_tensors="pt")
#加载分词器和初始化输入model = AutoModelForCausalLM.from_pretrained(model_id)
peft_config = PeftConfig.from_pretrained(adapter_model_id)
'''
加载了预训练的基础模型 facebook/opt-350m 和适配器的配置。PeftConfig.from_pretrained 方法用于加载预定义的适配器配置。
'''peft_config.init_lora_weights = False
model.add_adapter(peft_config)
'''
在添加适配器前,设置 init_lora_weights = False 指明在初始化时不使用预训练的 LoRA 权重,
而是使用随机权重。然后将适配器添加到模型中。
'''model.enable_adapters()
output1 = model.generate(**inputs)
#启用适配器,然后使用启用了适配器的模型生成文本model.disable_adapters()
output2 = model.generate(**inputs)
#禁用适配器后,再次生成文本以查看不使用适配器时模型的输出表现tokenizer.decode(output1[0])
'''
'</s>Hello------------------'
'''tokenizer.decode(output2[0])
'''
"</s>Hello, I'm a newbie to this sub. I'm looking for a good place to"
'''

6 训练PEFT适配器

6.1 举例:添加lora适配器

6.1.1 定义你的适配器配置

from peft import LoraConfigpeft_config = LoraConfig(lora_alpha=16,lora_dropout=0.1,r=64,bias="none",task_type="CAUSAL_LM",
)
  • lora_alpha=16:指定 LoRA 层的缩放因子。
  • lora_dropout=0.1:设置在 LoRA 层中使用的 dropout 比率,以避免过拟合。
  • r=64:设置每个 LoRA 层的秩,即低秩矩阵的维度。
  • bias="none":指定不在 LoRA 层中使用偏置项。
  • task_type="CAUSAL_LM":设定这个 LoRA 配置是为了因果语言模型任务。

6.1.2 将适配器添加到模型

model.add_adapter(peft_config)

6.1.3将模型传递给 Trainer以进行训练

from transformers import Trainer
trainer = Trainer(model=model, ...)
trainer.train()

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

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

相关文章

线性模型--普通最小二乘法

线性模型 一、模型介绍二、用于回归的线性模型2.1 线性回归&#xff08;普通最小二乘法&#xff09; 一、模型介绍 线性模型是在实践中广泛使用的一类模型&#xff0c;该模型利用输入特征的线性函数进行预测。 二、用于回归的线性模型 以下代码可以在一维wave数据集上学习参…

基于51单片机的超声波液位测量与控制系统

基于51单片机液位控制器 &#xff08;仿真&#xff0b;程序&#xff0b;原理图PCB&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.使用HC-SR04测量液位&#xff0c;LCD1602显示&#xff1b; 2.当水位高于设定上限的时候&#xff0c;对应声光报警报警&am…

【InternLM实战营第二期笔记】02:大模型全链路开源体系与趣味demo

文章目录 00 环境设置01 部署一个 chat 小模型02 Lagent 运行 InternLM2-chat-7B03 浦语灵笔2 第二节课程视频与文档&#xff1a; https://www.bilibili.com/video/BV1AH4y1H78d/ https://github.com/InternLM/Tutorial/blob/camp2/helloworld/hello_world.md 视频和文档内容基…

云计算和大数据处理

文章目录 1.云计算基础知识1.1 基本概念1.2 云计算分类 2.大数据处理基础知识2.1 基础知识2.3 大数据处理技术 1.云计算基础知识 1.1 基本概念 云计算是一种提供资源的网络&#xff0c;使用者可以随时获取“云”上的资源&#xff0c;按需求量使用&#xff0c;并且可以看成是无…

STM32应用开发进阶--IIC总线(SHT20温湿度+HAL库_硬件I2C)

实现目标 1、掌握IIC总线基础知识&#xff1b; 2、会使用软件模拟IIC总线和使用STM32硬件IIC总线&#xff1b; 3、 学会STM32CubeMX软件关于IIC的配置; 4、掌握SHT20温湿度传感器的驱动&#xff1b; 5、具体目标&#xff1a;&#xff08;1&#xff09;用STM32硬件IIC驱动S…

49 序列化和反序列化

本章重点 理解应用层的作用&#xff0c;初识http协议 理解传输层的作用&#xff0c;深入理解tcp的各项特性和机制 对整个tcp/ip协议有系统的理解 对tcp/ip协议体系下的其他重要协议和技术有一定的了解 学会使用一些网络问题的工具和方法 目录 1.应用层 2.协议概念 3. 网络计…

CSRF跨站请求伪造实战

目录 一、定义 二、与XSS的区别 三、攻击要点 四、实战 一、定义 CSRF (Cross-site request forgery&#xff0c;跨站请求伪造)&#xff0c;攻击者利用服务器对用户的信任&#xff0c;从而欺骗受害者去服务器上执行受害者不知情的请求。在CSRF的攻击场景中&#xff0c;攻击…

C++数据结构——哈希桶HashBucket

目录 一、前言 1.1 闭散列 1.2 开散列 1.3 string 与 非 string 二、哈希桶的构成 2.1 哈希桶的节点 2.2 哈希桶类 三、 Insert 函数 3.1 无需扩容时 3.2 扩容 复用 Insert&#xff1a; 逐个插入&#xff1a; 优缺点比对&#xff1a; 第一种写法优点 第一种写法…

gfast:基于全新Go Frame 2.3+Vue3+Element Plus构建的全栈前后端分离管理系统

gfast&#xff1a;基于全新Go Frame 2.3Vue3Element Plus构建的全栈前后端分离管理系统 随着信息技术的飞速发展和数字化转型的深入&#xff0c;后台管理系统在企业信息化建设中扮演着越来越重要的角色。为了满足市场对于高效、灵活、安全后台管理系统的需求&#xff0c;gfast应…

OpenUI 可视化 AI:打造令人惊艳的前端设计!

https://openui.fly.dev/ai/new 可视化UI的新时代&#xff1a;通过人工智能生成前端代码 许久未更新, 前端时间在逛github&#xff0c;发现一个挺有的意思项目&#xff0c;通过口语化方式生成前端UI页面&#xff0c;能够直观的看到效果&#xff0c;下面来给大家演示下 在现代…

SAP FS00如何导出会计总账科目表

输入T-code : S_ALR_87012333 根据‘FS00’中找到的总账科目&#xff0c;进行筛选执行 点击左上角的列表菜单&#xff0c;选择‘电子表格’导出即可

echarts-地图

使用地图的三种的方式&#xff1a; 注册地图(用json或svg,注册为地图)&#xff0c;然后使用map地图使用geo坐标系&#xff0c;地图注册后不是直接使用&#xff0c;而是注册为坐标系。直接使用百度地图、高德地图&#xff0c;使用百度地图或高德地图作为坐标系。 用json或svg注…

GpuMall智算云:meta-llama/llama3/Llama3-8B-Instruct-WebUI

LLaMA 模型的第三代&#xff0c;是 LLaMA 2 的一个更大和更强的版本。LLaMA 3 拥有 35 亿个参数&#xff0c;训练在更大的文本数据集上GpuMall智算云 | 省钱、好用、弹性。租GPU就上GpuMall,面向AI开发者的GPU云平台 Llama 3 的推出标志着 Meta 基于 Llama 2 架构推出了四个新…

Qt pro工程文件编写汇总(区分debug和release、32位和64位的方法,编译输出目录等)

前言&#xff1a; 从事qt开发已经好几年了&#xff0c;但有关pro编写的一些细节问题一直没有一个很好的梳理汇总——因为实际工作开发中&#xff0c;往往只需要编译特定版本的软件&#xff08;例如32位release版本&#xff09;&#xff0c;项目创建好后并设置好编译路径&#x…

ML307R OpenCPU GPIO使用

一、GPIO使用流程图 二、函数介绍 三、GPIO 点亮LED 四、代码下载地址 一、GPIO使用流程图 这个图是官网找到的&#xff0c;ML307R GPIO引脚电平默认为1.8V&#xff0c;需注意和外部电路的电平匹配&#xff0c;具体可参考《ML307R_硬件设计手册_OpenCPU版本适用.pdf》中的描…

零基础PHP入门(一)选择IDE和配置环境

配置环境 官网下载安装包&#xff0c;windows https://windows.php.net/download#php-8.3 我是下载的最新版&#xff0c;也可以切换其他版本 https://windows.php.net/downloads/releases/archives/ 下载好压缩文件后&#xff0c;双击解压到一个目录 D:\soft\php 复制ph…

成都爱尔眼科医院《中、欧国际近视手术大数据白皮书2.0》解读会圆满举行

2024年5月12日&#xff0c;爱尔眼科联合中国健康促进基金会健康传播与促进专项基金、新华社新媒体中心与中南大学爱尔眼科研究院、爱尔数字眼科研究所重磅发布《中、欧国际近视手术大数据白皮书2.0》。这是继2021、2022年在国内相继发布《国人近视手术白皮书》、《2022中、欧近…

模型蒸馏笔记

文章目录 一、什么是模型蒸馏二、如何蒸馏三、实践四、参考文献 一、什么是模型蒸馏 Hinton在NIPS2014提出了知识蒸馏&#xff08;Knowledge Distillation&#xff09;的概念&#xff0c;旨在把一个大模型或者多个模型ensemble学到的知识迁移到另一个轻量级单模型上&#xff0…

【SpringBoot】SpringBoot中防止接口重复提交(单机环境和分布式环境)

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 &#x1f33c;前言 &#x1f512;单机环境下防止接口重复提交 &#x1f4d5;导入依赖 &#x1f4c2;项目结构 &#x1f680;创建自定义注解 ✈创建AOP切面 &#x1f697;创建Conotroller &#x1f4bb;分布…

构建高效的在线培训机构CRM应用架构实践

在当今数字化时代&#xff0c;在线培训已成为教育行业的重要趋势之一。为了提供更好的学习体验和管理服务&#xff0c;在线培训机构需要构建高效的CRM&#xff08;Customer Relationship Management&#xff09;应用架构。本文将探讨在线培训机构CRM应用架构的设计与实践。 一、…