使用LoRA 对千问70B模型进行微调

要使用 LoRA 对已经下载的模型进行微调,可以通过 PEFT(Parameter-Efficient Fine-Tuning)库来实现。以下是具体的步骤。

1. 安装必要的库

确保你已经安装了 transformerspeft(用于 LoRA 微调)库:

pip install transformers peft

2. 加载模型和配置 LoRA 微调

下面的代码将展示如何加载已经下载的模型,并在 LoRA 配置下进行微调。

from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments, Trainer
from peft import LoraConfig, get_peft_model
from datasets import load_dataset# 加载模型和分词器
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-72B-Chat", trust_remote_code=True)
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen-72B-Chat", trust_remote_code=True)# 配置 LoRA 微调
lora_config = LoraConfig(r=8,                # LoRA 矩阵的秩(可以调整以适应显存)lora_alpha=16,      # LoRA 层的缩放因子target_modules=["q_proj", "v_proj"],  # LoRA 目标层,可以根据模型结构调整lora_dropout=0.1,   # Dropout 概率,防止过拟合bias="none"         # 设置为 "none" 不引入额外的偏置项
)# 将模型转换为 LoRA 微调模型
model = get_peft_model(model, lora_config)# 打印模型层,确认 LoRA 层是否成功添加
model.print_trainable_parameters()

3. 准备数据集

可以选择开源数据集或自定义数据集。这里以 wikitext 数据集为例:

# 加载示例数据集
dataset = load_dataset("wikitext", "wikitext-2-raw-v1", split="train")# 定义数据预处理函数
def preprocess_function(examples):return tokenizer(examples["text"], padding="max_length", truncation=True, max_length=512)# 预处理数据集
tokenized_dataset = dataset.map(preprocess_function, batched=True)

4. 配置训练参数

设置微调的训练参数,如 batch size、学习率、epoch 等。

training_args = TrainingArguments(output_dir="./lora_finetuned_qwen",  # 输出路径per_device_train_batch_size=1,       # 每个 GPU 上的 batch sizegradient_accumulation_steps=8,       # 梯度累积步数num_train_epochs=3,                  # 训练轮次learning_rate=2e-4,                  # 学习率fp16=True,                           # 启用混合精度logging_steps=10,                    # 日志打印间隔save_steps=100,                      # 模型保存间隔save_total_limit=2,                  # 最多保存模型数量
)

5. 开始训练

使用 Trainer 进行微调。

trainer = Trainer(model=model,args=training_args,train_dataset=tokenized_dataset,
)# 开始训练
trainer.train()

6. 保存微调后的模型

训练完成后,将微调后的模型保存到指定的文件夹中。

model.save_pretrained("./lora_finetuned_qwen")
tokenizer.save_pretrained("./lora_finetuned_qwen")

7. 加载和推理

微调完成后,可以加载微调后的模型并进行推理。

from transformers import AutoModelForCausalLM, AutoTokenizer# 加载微调后的模型
model = AutoModelForCausalLM.from_pretrained("./lora_finetuned_qwen")
tokenizer = AutoTokenizer.from_pretrained("./lora_finetuned_qwen")# 进行推理
input_text = "Your prompt here"
inputs = tokenizer(input_text, return_tensors="pt")
outputs = model.generate(**inputs)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))

总结

这个流程中,LoRA 微调的关键是通过 PEFT 库对模型的特定层(如 q_projv_proj)进行部分参数化微调,以降低显存消耗。

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

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

相关文章

6-2.Java 面向对象 - 中级(包、访问修饰符、封装、继承、super、方法重写、多态、动态绑定机制、面向对象相关方法)

一、包 1、基本介绍 包的本质就是创建不同的文件夹来保存类文件 定义包 package 【包名】;引入包 import 【包名】;2、包的作用 区分相同名字的类 可以很好的管理类 控制访问权限 3、包的命名 (1)基本介绍 命名规则:只能包含数字、…

基于MySQL的企业专利数据高效查询与统计实现

背景 在进行产业链/产业评估工作时,我们需要对企业的专利进行评估,其中一个重要指标是统计企业每一年的专利数量。本文基于MySQL数据库,通过公司名称查询该公司每年的专利数,实现了高效的专利数据统计。 流程 项目流程概述如下&…

canfestival主站多电机对象字典配置

不要使用数组进行命名:无法运行PDO 使用各自命名的方式:

【学生选课管理系统】项目笔记

项目难点 涉及到多个关联的数据库 脚手架 在这里我使用的是element-plus框架👉 具体文献参考->element-plus官网 运行项目(同时运行前端和后端) program/xsxk/vue/package.jsonprogram/xsxk/springboot/src/main/java/com/example/Spri…

Git LFS

Git LFS(Git Large File Storage)是一个用于管理和版本控制大文件的工具,它扩展了 Git 的功能,帮助处理大文件或二进制文件的存储和管理问题。 为什么需要 Git LFS? Git 默认是针对文本文件进行优化的,尤…

bat批量处理脚本细节研究

文章目录 bat批处理脚本(框架)set变量设置基本语法显示环境变量 自定义环境变量临时环境变量和永久环境变量特殊环境变量和系统默认环境变量set命令利用选项的其他应用 !与%解析变量的区别/为什么使用setlocal enabledelayedexpansion区别%的规则!使用 %…

Java 网络编程(一)—— UDP数据报套接字编程

概念 在网络编程中主要的对象有两个:客户端和服务器。客户端是提供请求的,归用户使用,发送的请求会被服务器接收,服务器根据请求做出响应,然后再将响应的数据包返回给客户端。 作为程序员,我们主要关心应…

使用C++来编写VTK项目时,就是要写自己的算法

其实,使用VTK可以使用很多种语言,比如java,python,和C。那么为什么非要使用C 呢?一个原因是觉得C语言处理数据比较快,另一个原因是需要自己写算法。通过继承polyDataAlgorithm来写自己的算法,很…

【RK3588 Linux 5.x 内核编程】-等待队列(WaitQueue)

等待队列(WaitQueue) 文章目录 等待队列(WaitQueue)1、等待队列介绍2、等待队列初始化2.1 静态初始化2.2 动态初始化3、队列任务排队3.1 wait_event3.2 wait_event_timeout3.3 wait_event_cmd3.4 wait_event_interruptible3.5 wait_event_interruptible_timeout3.6 wait_ev…

[ 内网渗透实战篇-2 ] 父域子域架构的搭建与安装域环境判断域控定位组策略域森林架构配置信任关系

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

unity c# Tcp网络通讯

本篇附带源代码,带有处理拆包分包粘包,也会撰明具体内容。 首先对于tcp就是挥手机制,三次握手四次挥手机制。 一、三次握手 具体过程为简单解释为: 1、客户端请求服务器链接,等待服务器确认。(服务器如…

FileLink跨网数据摆渡系统:打破网络隔阂,轻松实现跨网络数据传输

在数字化时代,跨网络、跨区域的数据传输成为了企业和个人信息流通的重大挑战。而如今,FileLink跨网数据摆渡系统的问世,彻底解决了这一难题,帮助用户实现快速、安全、无缝的跨网络数据传输。 1. 跨网络数据传输的痛点 随着企业信…

高级 SQL 技巧详解

文章目录 高级 SQL 技巧详解一、引言二、窗口函数1、窗口函数的使用1.1、RANK() 函数示例1.2、常用窗口函数 三、公共表表达式(CTE)2、CTE 的使用2.1、CTE 示例 四、索引优化3、索引的创建与优化3.1、创建索引3.2、索引类型与注意事项 五、事务管理4、事…

MySQL_聚合函数分组查询

上篇复习: 设计数据库时的三大范式1.第一范式,一行数据中每一列不可再分 关系型数据库必须要满足第一范式,设计表的时候,如果每一列都可以用SQL规定的数据类型描述,就天然满足第一范式. 2.第二范式,在第一…

【Ai教程】Ollma安装 | 0代码本地运行Qwen大模型,保姆级教程来了!

我们平时使用的ChatGPT、kimi、豆包等Ai对话工具,其服务器都是部署在各家公司的机房里,如果我们有一些隐私数据发到对话中,很难保证信息是否安全等问题,如何在保证数据安全的情况下,又可以使用大预言模型,O…

FastAPI全方位分析:优劣尽显

近年来,随着技术的飞速发展,快速构建高性能API的需求越来越强烈。Python作为一个广泛使用的编程语言,也在这一领域下涌现出了许多优秀的框架。FastAPI便是其中一颗璀璨的新星。 FastAPI以其卓越的性能和独特的功能吸引了众多开发者。本文将深入剖析FastAPI的各个方面,详细…

LongVU :Meta AI 的解锁长视频理解模型,利用自适应时空压缩技术彻底改变视频理解方式

Meta AI在视频理解方面取得了令人瞩目的里程碑式成就,推出了LongVU,这是一种开创性的模型,能够理解以前对人工智能系统来说具有挑战性的长视频。 研究论文 "LongVU:用于长视频语言理解的时空自适应压缩 "提出了一种革命…

二分答案—愤怒的牛-P1676 [USACO05FEB] Aggressive cows G

[USACO05FEB] Aggressive cows G 题目描述 农夫约翰建造了一座有 n n n 间牛舍的小屋,牛舍排在一条直线上,第 i i i 间牛舍在 x i x_i xi​ 的位置,但是约翰的 m m m 头牛对小屋很不满意,因此经常互相攻击。约翰为了防止牛之…

什么是兼容性测试

兼容性测试,提供具有兼容性特性的云端设备(覆盖主流品牌、SDK、分辨率),通过模拟用户行为进行真机测试。及时有效的发现应用中存在的兼容性问题。解除测试人员的双手,提高测试效率,保证产品在海量真机上的高…

IDEA:ctrl+/ 快捷键生成的注释,设置“//”开始位置

问题场景: IDEA中使用 ctrl/ 快捷键,//显示在最左边(顶格),不美观,中间隔了好长的空格,如图: 解决方法: 操作步骤 File–>Sttings–>Editor–>Code Style–>Java–>…