LORA模型与基座大模型合并并由transformer的AutoModel推理

网上看了看很多资料都是关于Lora后的模型直接由Peft 去读取的 ,具体可以参考:LoRA 模型合并与保存 这里就不再赘述了,大概原理就是

def merge_lora_to_LLM():model_name_or_path = "your_LLM_model_path"adapter_name_or_path = "your_lora_model_path"save_path = "save_model_path"tokenizer = AutoTokenizer.from_pretrained(model_name_or_path,trust_remote_code=True)model = AutoModelForCausalLM.from_pretrained(model_name_or_path,trust_remote_code=True,low_cpu_mem_usage=True,torch_dtype=torch.float16,device_map="auto")model = PeftModel.from_pretrained(model, adapter_name_or_path)model = model.merge_and_unload()tokenizer.save_pretrained(save_path)

这里主要阐述的是Lora与LLM合并后,可以直接由Transformer的AutoModel去加载与推理。具体代码如下:

from peft import PeftModel
from transformers import AutoModel, AutoTokenizer
import os
import shutilmodel_type = "/root/ld/ld_model_pretrained/Minicpmv2_6"  # Local model path or huggingface id
path_to_adapter = "/root/ld/ld_project/minicpmv2_6/MiniCPM-V/finetune/output/output_minicpmv2_lora/checkpoint-30"  # Path to the saved LoRA adapter
merge_path = "/root/ld/ld_project/minicpmv2_6/MiniCPM-V/finetune/output/merge_minicpmv"  # Path to save the merged model# 保证原始模型的各个文件不遗漏保存到merge_path中
def copy_files_not_in_B(A_path, B_path):"""Copies files from directory A to directory B if they exist in A but not in B.:param A_path: Path to the source directory (A).:param B_path: Path to the destination directory (B)."""# 保证路径存在if not os.path.exists(A_path):raise FileNotFoundError(f"The directory {A_path} does not exist.")if not os.path.exists(B_path):os.makedirs(B_path)# 获取路径A中所有非权重文件files_in_A = os.listdir(A_path)files_in_A = set([file for file in files_in_A if not (".bin" in file or "safetensors" in file)])# List all files in directory Bfiles_in_B = set(os.listdir(B_path))# 找到所有A中存在但B中不存在的文件files_to_copy = files_in_A - files_in_B# 将这些文件复制到B路径下for file in files_to_copy:src_file = os.path.join(A_path, file)dst_file = os.path.join(B_path, file)shutil.copy2(src_file, dst_file)# 加载原始模型
model = AutoModel.from_pretrained(model_type,trust_remote_code=True
)# 加载lora模块到原始模型中
lora_model = PeftModel.from_pretrained(model,path_to_adapter,device_map="auto",trust_remote_code=True
).eval()# 将加载的lora模块合并到原始模型中
merge_model = lora_model.merge_and_unload()# 将新合并的模型进行保存
merge_model.save_pretrained(merge_path, safe_serialization=False)# 加载分词器
tokenizer = AutoTokenizer.from_pretrained(model_type, trust_remote_code=True)
tokenizer.save_pretrained(merge_path)copy_files_not_in_B(model_type,merge_path)

之后的保存在merge_path的地址就可以直接用transformer的AutoModel加载,大致如下:

model = AutoModel.from_pretrained(merge_path, trust_remote_code=True, torch_dtype=torch.bfloat16)
model = model.to(device=device)
tokenizer = AutoTokenizer.from_pretrained(merge_path, trust_remote_code=True)
model.eval()

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Vue Mini基于 Vue 3 的小程序框架

新的小程序框架 https://vuemini.org/ Vue Mini 是一个基于 Vue 3 的小程序框架,它允许开发者利用 Vue 3 的强大功能来构建微信小程序。Vue Mini 的核心优势在于它的响应式系统和组合式 API,这些特性让开发者能够以一种更声明式、更高效的方式来编写和…

今天不止是A股疯,这家国产大模型也疯了!AI人:1亿小目标已实现

这两天有个很神奇的现象,就是有两个从来不碰A股的小伙伴,竟然跑过来问我——“现在上车A股还有机会吗?” 放心吧,我当然不可能在这里回答这个问题的,否则就你懂的。 今天这篇文章不是讨论A股的。而是我无意间发现&am…

脸爱云管理系统存在任意文件上传漏洞

漏洞描述 脸爱云一脸通智慧管理平台是一套功能强大、运行稳定、操作简单方便、用户界面美观的一脸通系统。该平台整合了人脸识别技术和智能化解决方案,可以实现识别和管理个体身份,为各种场景提供便捷的身份验证和管理功能。其存在任意文件上传漏洞&…

记一次vue-cli老项目的打包时长优化

记一次vue-cli老项目的打包时长优化 背景 这是一个基于 vue-cli 的 vue2 的老项目,比较久远,一般Jenkins中打包时间都在 5-6min 左右,基本能够接受。 近来由于项目原因,在该项目中加入了一些在打包时动态生成的js文件以做“缓存…

信号量SEM

前提 1.信号量的本质是一把计数器 2.申请信号本质就是预订资源 3.PV操作是原子的! 将一个公共资源当做整体访问-->锁 如果公共资源不当做整体使用,多进程可以并发的访问公共资源,但不是同一个区域,为了将资源均分,所以有了…

PE节表中是否存在misc.VirtualSize 比SizeofRawData还要大的情况

确实是存在的,这是win10自带记事本,可以看到 确实是大.所以在申请imagebuffer的时候,还是需要比较大小.但是在还原的时候.只考虑sizeofRawData即可>

Python查漏补缺

1.冒泡排序 时间复杂度O(n^2) 选择、插入都是 def bubble(data, reverse):for i in range(len(data)-1):for j in range(len(data)-i-1):if data[j] > data[j1]:data[j], data[j1] data[j1], data[j]if reverse:data.reverse()return data 2.快速排序 时间…

QT将QBytearray的data()指针赋值给结构体指针变量后数据不正确的问题

1、问题代码 #include <QCoreApplication>#pragma pack(push, 1) typedef struct {int a; // 4字节float b; // 4字节char c; // 1字节int *d; // 8字节 }testStruct; #pragma pack(pop)#include <QByteArray> #include <QDebug>int main() {testStruct …

ros2安装完成后重要的一步

安装完成ros2之后&#xff0c;每次打开新的终端都需要 source /opt/ros/humble/setup.bash 为了解决这个为题&#xff0c;我们需要做如下操作,避免每次打开一个新的在终端都要设置。 在文件的最后一行添加 source /opt/ros/foxy/setup.bash

职称评审难在哪?

没有项目业绩资料&#xff1f; 社保不符合&#xff1f; 看不懂评审文件&#xff1f; 申报材料不会做&#xff1f; 论文没地发表&#xff1f; 有这些疑问的 评论区滴滴

如何使用ssm实现白云会议管理系统+vue

TOC ssm741白云会议管理系统vue 第1章 绪论 1.1 选题动因 到现在为止&#xff0c;互联网已经进入了千家万户&#xff0c;最普通的平民百姓也有属于自己的智能设备&#xff0c;计算机各种技术的储备也是相当的丰富&#xff0c;并且实现也是没有难度&#xff0c;各行各业&…

MFU简介

1、缩写 MFU - Mask Field Utilization&#xff08;光刻掩膜版有效利用比例&#xff09; GDPW - Gross Die Per Wafer&#xff0c;每张wafer上die的数量 2、什么是MASK 在光刻机中&#xff0c;光源&#xff08;紫外光、极紫外光&#xff09;透过mask曝光在晶圆上形成图…

python12_字符类型转换

字符类型转换 # 整型 A 3.14 B "123" C True D False E "3.14" F "True" G 0.0# 整型转换函数 def to_int(m):int_m int(m)return int_m# 布尔转换为整型 def bool_to_int(m):bool_m int(m)return bool_m# 布尔类型转换为字符串 def b…

SQL增删查改操作

目录 数据库概述 SQL基础操作 SQL通用语法 数据类型 SQL语句的分类 DDL(数据库定义,表定义,字段定义) 数据库操作 表操作 DDL小结 DML(数据的增删改,数据操作语言) DQL(查询) DQL小节 数据库概述 数据库,顾名思义就是用来存储和管理数据的,我们平时所使用的各大软…

如何通过开源工具帮助保护您的计算机安全

引言 如果您正在考虑安全问题&#xff0c;您有很多选择。随着当前网络犯罪的激增&#xff0c;以及发生犯罪时常见的重大后果&#xff0c;许多企业开始关注如何在网络世界中保护公民的安全。网络安全行业蕴藏着巨大的商业利益&#xff0c;但您可能会惊讶地发现&#xff0c;有一…

TCP CUBIC 曲线对 BIC 折线的拟合

bic 旨在对 reno 改进&#xff0c;用二分逼近替换线性遍历逼近&#xff0c;时间规模从 O ( W m a x ) O(W_{max}) O(Wmax​) 下降到 O ( ln ⁡ W m a x ) O(\ln {W_{max}}) O(lnWmax​)&#xff0c;这是本质&#xff0c;而 cubic 可以看作对 bic 的 bugfix&#xff0c;解除了…

Activity

69[toc] 1.启停活动页面 1.Activity启动和结束 从当前页面跳到新页面 startActivity(new Intent(this, ActFinishActivity.class));从当前页面返回上一个页面&#xff0c;相当于关闭当前页面 finish();2.Activity生命周期 官方描述生命周期 onCreate&#xff1a;创建活…

解决 Could not locate zlibwapi.dll. Please make sure it is in your library path

zlibwapi.dll文件是zlib库的Windows版本&#xff0c;很多Python上的库想要在Windows上执行都需要依赖这个文件。 可以通过本人上传的免费资源直接下载&#xff1a;zlibwapi 链接&#xff1a;https://pan.baidu.com/s/1u8osbt_IevO4GOkXthZ04A 提取码&#xff1a;c2mf zlibwa…

基于Jenkins+Python+Ubuntu+Docker的接口/UI自动化测试环境部署详细过程

1 Jenkins是什么&#xff1f; 学习官网&#xff1a;Jenkins官网&#xff0c;Jenkins中文官网&#xff1b; Jenkins是一款开源 CI&CD 软件&#xff0c;用于自动化各种任务&#xff0c;包括构建、测试和部署软件&#xff1b; 用Java语言编写的&#xff0c;可在Tomcat、Dock…

4.2.1 通过DTS传递物理中断号给Linux

点击查看系列文章 》 Interrupt Pipeline系列文章大纲-CSDN博客 4.2.1 通过DTS传递物理中断号给Linux 参考《GICv3_Software_Overview_Official_Release_B》&#xff0c;下表描述了GIC V3支持的INTID(硬件中断号)的范围。 SGI (Software Generated Interrupt)&#xff1a;软…