huggingface 笔记:peft

1 介绍

  • PEFT 提供了参数高效的方法来微调大型预训练模型。
  • 传统的范式是为每个下游任务微调模型的所有参数,但由于当前模型的参数数量巨大,这变得极其昂贵且不切实际。
  • 相反,训练较少数量的提示参数或使用诸如低秩适应 (LoRA) 的重新参数化方法来减少可训练参数数量是更有效的

2 训练

2.1 加载并创建 LoraConfig 类

  • 每种 PEFT 方法都由一个 PeftConfig 类定义,该类存储了构建 PeftModel 的所有重要参数
  • eg:使用 LoRA 进行训练,加载并创建一个 LoraConfig 类,并指定以下参数
    • task_type:要训练的任务(在本例中为序列到序列语言建模)
    • inference_mode:是否将模型用于推理
    • r:低秩矩阵的维度
    • lora_alpha:低秩矩阵的缩放因子
    • lora_dropout:LoRA 层的丢弃概率
from peft import LoraConfig, TaskTypepeft_config = LoraConfig(task_type=TaskType.SEQ_2_SEQ_LM, inference_mode=False, r=8, lora_alpha=32, lora_dropout=0.1)

2.2 创建 PeftModel

  • 一旦设置了 LoraConfig,就可以使用 get_peft_model() 函数创建一个 PeftModel
    • 需要一个基础模型 - 可以从 Transformers 库加载 -
    • 以及包含如何配置 LoRA 模型参数的 LoraConfig

2.2.1 加载需要微调的基础模型

from transformers import AutoModel,AutoTokenizer
import os
import torchos.environ["HF_TOKEN"] = '*'
#huggingface的私钥tokenizer=AutoTokenizer.from_pretrained('meta-llama/Meta-Llama-3-8B')
model=AutoModel.from_pretrained('meta-llama/Meta-Llama-3-8B',torch_dtype=torch.bfloat16, low_cpu_mem_usage=True)

2.2.2 创建 PeftModel

将基础模型和 peft_config 与 get_peft_model() 函数一起包装以创建 PeftModel

from peft import get_peft_modelmodel = get_peft_model(model, peft_config)
model.print_trainable_parameters()
#了解模型中可训练参数的数量
#trainable params: 3,407,872 || all params: 7,508,332,544 || trainable%: 0.0454

之后就可以train了

3保存模型

模型训练完成后,可以使用 save_pretrained 函数将模型保存到目录中。

model.save_pretrained("output_dir")

4 推理

  • 使用 AutoPeftModel 类和 from_pretrained 方法加载任何 PEFT 训练的模型进行推理
    • 对于没有明确支持 AutoPeftModelFor 类的任务,可以使用基础的 AutoPeftModel 类加载任务模型
from peft import AutoPeftModelForCausalLM
from transformers import AutoTokenizer
import torchmodel = AutoPeftModelForCausalLM.from_pretrained("ybelkada/opt-350m-lora")
#LORA过的模型
tokenizer = AutoTokenizer.from_pretrained("facebook/opt-350m")
#普通的tokenizermodel.eval()
inputs = tokenizer("Preheat the oven to 350 degrees and place the cookie dough", return_tensors="pt")outputs = model.generate(input_ids=inputs["input_ids"].to("cuda"), max_new_tokens=50)
print(tokenizer.batch_decode(outputs.detach().cpu().numpy(), skip_special_tokens=True)[0])# "Preheat the oven to 350 degrees and place the cookie dough in the center of the oven. In a large bowl, combine the flour, baking powder, baking soda, salt, and cinnamon. In a separate bowl, combine the egg yolks, sugar, and vanilla."

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

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

相关文章

探索增删改查(CRUD)操作在软件开发中的重要性

在软件开发中,CRUD(Create, Read, Update, Delete)是常见且基础的操作集合,它们构成了对数据进行基本管理和操作的核心。无论是开发Web应用、移动应用还是管理系统,了解和有效地实施…

通过分离有色和无色pdf页面减少打印费

该工具是我认识的一位中科大的大佬在本科毕业的时候做的一个小工具,去打印店打印全彩的毕业论文的话会比较贵,他想到有没有一种方案可以实现有彩色页面的pdf和没有彩色页面的pdf分开打印,前者打印彩色,后者打印黑白,这…

深入浅出:NPM常用命令详解与实践

深入浅出地讲解npm常用命令及其实践,可以帮助开发者更好地理解和使用这个强大的Node.js 包管理工具。以下是一些常用的npm命令及其详细解释和实践案例: 1:初始化项目: 命令:npm init用途:生成一个package…

MySQL数据库(二):数据库基本操作

MySQL是一种流行的关系型数据库管理系统,广泛用于Web应用和各种数据存储需求。通过本次介绍,您将学习如何进行MySQL数据库的基本操作,包括创建数据库和表、插入和查询数据、更新和删除记录。这些基础知识将为您打下坚实的数据库操作基础。 目…

2023国家最高科学技术奖薛其坤院士:科学家的幸福感来自于哪里

内容来源:量子前哨(ID:Qforepost) 文丨浪味仙 排版丨沛贤 深度好文:2000字丨8分钟阅读 6 月 24 日,2023 年度国家最高科学技术奖在京揭晓,薛其坤院士荣获中国科技界崇高荣誉,这不…

【软件下载】Camtasia Studio 2024详细安装教程视频

习惯上来说Camtasia Studio是一款简单易用的高清录屏和视频编辑软件,拥有录制屏幕和配音、视频的剪辑和过场动画片、添加说明字幕和水印、制作视频封面和菜单、视频压缩和播放。不得不说Camtasia是一款屏幕录制和视频剪辑软件,教授课程,培训他…

字节跳动联手博通:5nm AI芯片诞生了?

字节跳动联手博通:5nm AI芯片诞生了? 前言 就在6月24日,字节跳动正在与美国博通合作开发一款5纳米工艺的专用集成电路(ASIC) AI处理器。这款芯片旨在降低采购成本并确保高端AI芯片的稳定供应。 根据报道,尽管芯片设计工作进展顺利…

力扣SQL50 即时食物配送 II min函数 嵌套查询

Problem: 1174. 即时食物配送 II 👨‍🏫 参考题解 Code -- 计算立即配送的订单百分比 select round (-- 计算订单日期与客户偏好配送日期相同的订单数量sum(case when order_date customer_pref_delivery_date then 1 else 0 end) * 100 /-- 计算总订…

向npm发包

前提:安装node和npm,注册npm账号 1.创建文件夹,初始化项目: mkdir my-plugin cd my-plugin npm init 2.创建 .npmignore 文件来指定在发布包时应该忽略的文件和目录。这可以帮助你减小包的大小,避免不必要的文件被上…

【linux学习十六】网络管理

网络管理器(NetworkManager)是一个动态网络的控制器与配置系统,它用于当网络设备可用时保持设备和连接开启并激活 默认情况下,CentOS/RHEL7已安装网络管理器,并处于启用状态。 认识网卡 ens32 ens33 ens34 ens35 一.ip相关 查询网络状态 sy…

2005年下半年软件设计师【下午题】试题及答案

文章目录 2005年下半年软件设计师下午题--试题2005年下半年软件设计师下午题--答案 2005年下半年软件设计师下午题–试题 2005年下半年软件设计师下午题–答案

「全新升级,性能更强大——ONLYOFFICE 桌面编辑器 8.1 深度评测」

文章目录 一、背景二、界面设计与用户体验三、主要新功能亮点3.1 高效协作处理3.2 共同编辑,毫无压力3.3 批注与提及3.4 追踪更改3.5 比较与合并3.6 管理版本历史 四、性能表现4.1 集成 AI 工具4.2 插件强化 五、用户反馈与使用案例 一、背景 Ascensio System SIA -…

如何处理Java中的BufferOverflowException异常?

如何处理Java中的BufferOverflowException异常? 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在Java编程中,BufferOverflowExceptio…

C++类的继承(听课笔记)

代码1: 子类访问限定、继承方式 &#xff0c;以及 子类和父类复制兼容 #include<iostream> using namespace std;//父类和子类是两个独立的作用域 //所以他的属性和方法可以重名class Person//父类 { public:void Print(){cout << "name:" << _na…

JVM-类加载机制

一、基础概念 当我们用java命令运行某个类的main函数启动程序时&#xff0c;首先需要通过类加载器把该类加载到JVM。 其主要流程如下&#xff1a; 1.什么是类加载 那么什么是类加载&#xff1f; Java的类加载&#xff0c;就是把字节码格式“.class”文件加载到JVM的方法区…

48、基于深度学习的离群值输入向量(matlab)

1、基于深度学习的离群值输入向量原理及流程 基于深度学习的离群值检测的输入向量原理是通过神经网络模型对数据进行学习和表示&#xff0c;在该表示中探测异常样本。其流程大致如下&#xff1a; 数据预处理&#xff1a;将数据进行归一化处理&#xff0c;确保神经网络模型能够…

pycharm常用快捷键

详细总结了Pycharm的常用快捷键&#xff0c;下文介绍使用方法和场景, 并不需要记忆这些快捷键, 你只需要知道有这些快捷键, 再需要用的时候查看一下, 用的多了自然也就记住了,需要的朋友可以参考下 1.注释(添加/消除)(Ctrl /)这里说下Python的单行注释是 # , 多行注释是 注释内…

L59---101.对称二叉树(广搜)---Java版

1.题目描述 2.思路和知识点 &#xff08;1)根节点为空&#xff1a; 如果根节点为空&#xff0c;树是对称的。 (2)递归检查&#xff1a; isMirror 方法递归检查两个子树是否是镜像对称的。 (3)辅助函数 isMirror&#xff1a; 1)如果两个节点都为空&#xff0c;它们是镜像对称的…

react笔记-04redux篇

redux和react-redux笔记&#xff0c;以及项目中如何使用&#xff0c;对redux的封装&#xff0c;让其使用类似于vuex一样方便。 一、redux 1. redux工作流程 流程&#xff1a;创建action > dispatch分发action > 交给store > reducer加工数据返回给store 2. redux的…

LabVIEW在核磁共振实验室的应用

​核磁共振&#xff08;NMR&#xff09;实验室在进行复杂的核磁共振实验时&#xff0c;需要一个高效、灵活且易于操作的实验控制和数据采集系统。传统的NMR实验系统往往使用专门的硬件和软件&#xff0c;存在系统封闭、扩展性差、维护成本高等问题。为了解决这些问题&#xff0…