以bert为例,了解Lora是如何添加到模型中的

以bert为例,了解Lora是如何添加到模型中的

  • 一.效果图
    • 1.torch.fx可视化
      • A.添加前
      • B.添加后
    • 2.onnx可视化
      • A.添加前
      • B.添加后
    • 3.tensorboard可视化
      • A.添加前
      • B.添加后
  • 二.复现步骤
    • 1.生成配置文件(num_hidden_layers=1)
    • 2.运行测试脚本

本文以bert为例,对比了添加Lora模块前后的网络结构图
说明:

  • 1.为了加快速度,将bert修改为一层
  • 2.lora只加到intermediate.dense,方便对比
  • 3.使用了几种不同的可视化方式(onnx可视化,torchviz图,torch.fx可视化,tensorboard可视化)

可参考的点:

  • 1.peft使用
  • 2.几种不同的pytorch模型可视化方法

一.效果图

1.torch.fx可视化

A.添加前

在这里插入图片描述

B.添加后

在这里插入图片描述

2.onnx可视化

A.添加前

在这里插入图片描述

B.添加后

在这里插入图片描述

3.tensorboard可视化

A.添加前

在这里插入图片描述

B.添加后

在这里插入图片描述

二.复现步骤

1.生成配置文件(num_hidden_layers=1)

tee ./config.json <<-'EOF'
{"architectures": ["BertForMaskedLM"],"attention_probs_dropout_prob": 0.1,"directionality": "bidi","hidden_act": "gelu","hidden_dropout_prob": 0.1,"hidden_size": 768,"initializer_range": 0.02,"intermediate_size": 3072,"layer_norm_eps": 1e-12,"max_position_embeddings": 512,"model_type": "bert","num_attention_heads": 12,"num_hidden_layers": 1,"pad_token_id": 0,"pooler_fc_size": 768,"pooler_num_attention_heads": 12,"pooler_num_fc_layers": 3,"pooler_size_per_head": 128,"pooler_type": "first_token_transform","type_vocab_size": 2,"vocab_size": 21128
}
EOF

2.运行测试脚本

tee bert_lora.py <<-'EOF'
import time
import os
import torch
import torchvision.models as models
import torch.nn as nn
import torch.nn.init as init
import time
import numpy as np
from peft import get_peft_config, get_peft_model, get_peft_model_state_dict, LoraConfig, TaskType
from torchviz import make_dot
from torch.utils.tensorboard import SummaryWriter
from torch._functorch.partitioners import draw_graphdef onnx_infer_shape(onnx_path):import onnxonnx_model  = onnx.load_model(onnx_path)new_onnx= onnx.shape_inference.infer_shapes(onnx_model)onnx.save_model(new_onnx, onnx_path)def get_model():torch.manual_seed(1)from transformers import AutoModelForMaskedLM,BertConfigconfig=BertConfig.from_pretrained("./config.json")model = AutoModelForMaskedLM.from_config(config)return model,configdef my_compiler(fx_module: torch.fx.GraphModule, _):draw_graph(fx_module, f"bert.{time.time()}.svg")return fx_module.forwardif __name__ == "__main__":model,config=get_model()model.eval()input_tokens=torch.randint(0,config.vocab_size,(1,128))# 一.原始模型# 1.onnx可视化torch.onnx.export(model,input_tokens,"bert_base.onnx",export_params=False,opset_version=11,do_constant_folding=True)onnx_infer_shape("bert_base.onnx")# 2.torchviz图output = model(input_tokens)logits = output.logitsviz = make_dot(logits, params=dict(model.named_parameters()))viz.render("bert_base", view=False)# 3.torch.fx可视化compiled_model = torch.compile(model, backend=my_compiler)output = compiled_model(input_tokens)# 4.tensorboard可视化writer = SummaryWriter('./runs')writer.add_graph(model, input_to_model = input_tokens,use_strict_trace=False)writer.close()# 二.Lora模型peft_config = LoraConfig(task_type=TaskType.CAUSAL_LM,inference_mode=True,r=8,lora_alpha=32,target_modules=['intermediate.dense'],lora_dropout=0.1,)lora_model = get_peft_model(model, peft_config)lora_model.eval()torch.onnx.export(lora_model,input_tokens,"bert_base_lora_inference_mode.onnx",export_params=False,opset_version=11,do_constant_folding=True)onnx_infer_shape("bert_base_lora_inference_mode.onnx")compiled_model = torch.compile(lora_model, backend=my_compiler)output = compiled_model(input_tokens)writer = SummaryWriter('./runs_lora')writer.add_graph(lora_model, input_to_model = input_tokens,use_strict_trace=False)writer.close()
EOF# 安装依赖
apt install graphviz -y
pip install torchviz
pip install pydot# 运行测试程序
python bert_lora.py

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

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

相关文章

Linux下的GPIO编程

目录 一、前言 二、sysfs方式 1、sysfs简介 2、基本目录结构 3、编号计算 4、sysfs方式控制GPIO 三、libgpiod库 1、libgpiod库简介 2、API函数 四、LED灯编程 一、前言 在Linux下&#xff0c;我们通常使用 sysfs 和 libgpiod库 两种方式进行控制GPIO&#xff0c;目前…

DDei在线设计器-属性编辑器

DDei-Core-属性编辑器 DDei-Core-属性编辑器插件包含了文本、大文本、数值、下拉、单选、勾选以及颜色等属性编辑。 图形和属性共同构成一个完整的定义&#xff0c;属性编辑器就是编辑属性值的控件。当选中图形实例时&#xff0c;属性面板就会展现当前实例的所有属性以及属性编…

通过身份证号码计算年龄

一、需求分析 在一些需要精确统计用户年龄的场景中。 如果我们使用之间由用户填写自己年龄的方式的话&#xff0c;就无法保证用户填写的信息是准确的其中最有效的办法就是让用户进行实名认证&#xff0c;再由用户上传的身份证号码截取到出生日期&#xff0c;通过计算后得到用…

m4s转mp3——B站缓存视频提取音频

前言 しかのこのこのここしたんたん&#xff08;鹿乃子乃子虎视眈眈&#xff09;非常之好&#xff0c;很适合当闹钟&#xff0c;于是缓存了视频&#xff0c;想提取音频为mp3 直接改后缀可乎&#xff1f;格式转换工具&#xff1f; 好久之前有记录过转MP4的&#xff1a; m4s转为…

nacos配置实时刷新@RefreshScope注解和定时任务@Scheduled注解同时使用导致失效问题

RefreshScope和Scheduled的组合使用有时会导致Scheduled任务失效&#xff0c;主要是由于它们在Spring中的工作机制不同。 RefreshScope的工作原理 RefreshScope是Spring Cloud中的一个注解&#xff0c;它允许在应用运行时刷新bean的属性&#xff0c;而不需要重启应用程序。具…

美国空军发布类ChatGPT产品—NIPRGPT

6月11日&#xff0c;美国空军研究实验室&#xff08;AFRL&#xff09;官网消息&#xff0c;空军部已经发布了一款生成式AI产品NIPRGPT。 据悉&#xff0c;NIPRGPT是一款类ChatGPT产品&#xff0c;可生成文本、代码、摘要等内容&#xff0c;主要为为飞行员、文职人员和承包商提…

文件没有权限问题:cannot create /opt/apollo/neo/data/log/monitor.log: Permission denied

问题描述 执行 aem bootstrap start --plus 命令启动 Dreamview 提示错误&#xff1a; /bin/sh: 1: cannot create /opt/apollo/neo/data/log/monitor.log: Permission denied [ERROR] Failed to start Dreamview. Please check /opt/apollo/neo/data/log/dreamview.log or /op…

【React】在 React 组件中,怎么使用useContext

在React中,useContext 是一个Hook,它允许你无需显式地通过组件树的每一层来传递 props,就能将值深入到组件树的任何位置。要使用 useContext,你需要先创建一个 Context 对象,然后使用这个对象提供的 Provider 组件来包裹你的应用中的一部分。然后,任何在这个 Provider 下…

使用R语言生成CDISC SDTM.AE domain

写在前面 - 使用的是Rstudio - 其实R已经有生成sdtm相关的package&#xff0c;以下代码仅作为练习R语言的语法&#xff0c;不是高效生成sdtm的方法 - 代码中没有解决的问题包括&#xff1a;EPOCH相关的逻辑没有考虑partial date的情况&#xff1b;在使用arrange() function做…

ArrayList和LinkedList的区别!!!

总结&#xff1a; 1、数据结构的实现 ArrayList&#xff1a;动态数组。 LinkedList&#xff1a;双向链表。 2、时间复杂度不同 ArrayList&#xff1a;O(1) LinkedList: O(n) ①&#xff1a;随机访问---- ArrayList > LinkedList &#xff08;ArrayList采用下标&#xff0…

ARM-V9 RME(Realm Management Extension)系统架构之调试

安全之安全(security)博客目录导读 本节中&#xff0c;“RMSD外部调试”一词用于描述任何系统或PE的外部调试功能&#xff0c;这些功能能够实现以下目的&#xff1a; 监控或修改RMSD行为。对Realm PAS或Realm安全状态的外部访问。 本节中&#xff0c;“Root外部调试”一词用于…

C++ 实现HTTP的客户端、服务端demo和HTTP三方库介绍

本文使用C模拟实现http的客户端请求和http的服务端响应功能&#xff0c;并介绍几种封装HTTP协议的三方库。 1、实现简单HTTP的服务端功能 本程序使用C tcp服务端代码模拟HTTP的服务端&#xff0c;服务端返回给客户端的消息内容按照HTTP协议的消息响应格式进行了组装。 demo如…

PC端剪映6.0免vip版本,功能随便用

下载解压后点击“JianyingPro.exe”图标即可使用&#xff0c;使用过程中无需登陆账号。操作很简单。 链接&#xff1a;https://pan.baidu.com/s/14bon1Ta9GOUFyUZDa2X3TA?pwd8h2b 提取码&#xff1a;8h2b

采用ava+B/S架构开发的工业级UWB(Ultra-Wideband)室内定系统源码UWB定位系统技术接口及技术特点

采用avaB/S架构开发的工业级UWB&#xff08;Ultra-Wideband&#xff09;室内定系统源码UWB定位系统技术接口及技术特点 UWB&#xff08;Ultra-Wideband&#xff09;定位技术本身并不直接连接蓝牙或其他无线通信技术进行定位。然而&#xff0c;在实际应用中&#xff0c;UWB定位技…

C# —— 逻辑运算符

简介 逻辑运算符用来连接多个 bool 类型表达式&#xff0c;实现多个条件的复合判断。 C#中的逻辑运算符包括&#xff1a;逻辑非( ! )、逻辑与( &&、& )、逻辑或( ||、| )。 逻辑与 & 符号 && 并且 规则: 对两个布尔值进行运算 有假则假 同真为真 bo…

怎么用住宅代理IP?使用住宅代理IP有哪些好处?

如何使用住宅代理IP&#xff1a; 使用住宅代理IP主要涉及以下几个步骤&#xff1a; 选择合适的代理IP供应商&#xff1a; 考虑供应商的可靠性、代理IP的质量、速度、稳定性以及价格。选择信誉良好且服务稳定的供应商&#xff0c;确保获得高质量的代理IP服务。配置代理IP&#…

vue面试题九

一、Vue.js如何进行性能优化&#xff1f; Vue.js 的性能优化可以从多个方面入手&#xff0c;以下是一些常见的性能优化策略和方法&#xff1a; 使用生产环境构建&#xff1a; 确保在部署生产环境之前&#xff0c;使用 Vue.js 的生产构建版本。生产构建版本会自动进行代码压缩和…

代理IP常见问题解答,新手必看手册

代理IP在互联网数据收集和业务开展中发挥着重要作用&#xff0c;它充当用户客户端和网站服务器之间的“屏障”&#xff0c;可以保护用户的真实IP地址&#xff0c;并允许用户通过不同的IP地址进行操作。然而&#xff0c;在使用代理IP的过程中&#xff0c;用户经常会遇到一些问题…

vue 中多个表单元素控一个校验规则

1. 场景一 <el-form-itemlabel"确认时长方式"prop"preSubResourceDurationDay" ><div class"confirmDurationDay">最晚使用日期前<el-input-numberv-model"form.preSubResourceDurationDay":precision"0"cla…

axure使用中继器画柱状图

源文件在顶部。 在axure通过读取中继器中的数据来画柱状图&#xff0c;如下图&#xff1a; 1&#xff09;创建一个中继器&#xff0c;在里面创建两列&#xff1a;1列是柱状图底部的名称、2列是柱的高度&#xff0c;如下图&#xff1a; 2&#xff09;双击中继器&#xff0c;画一…