chatglm2微调—Lora

news2025/2/26 18:13:35

1.使用ChatGLM-Efficient-Tuning框架

官网下载https://github.com/hiyouga/ChatGLM-Efficient-Tuning

或者国内镜像https://gitee.com/mirrors/chatglm-efficient-tuning

推荐一些写的不错的链接以及官网readme

ChatGLM2-6B微调 - 掘金 (juejin.cn)

基于 PEFT 的高效 ChatGLM2-6B 微调 - 简书 (jianshu.com)

【CHATGLM】ChatGLM2-6B--LoRA微调--(02) - 知乎 (zhihu.com)

【微调】CHATGLM2-6B LoRA 微调 - 知乎 (zhihu.com)

2.配置ChatGLM-Efficient-Tuning

cd ChatGLM-Effi-Tuning
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
 #必要可以加清华源

目前主流对大模型进行微调方法有三种:Freeze方法、P-Tuning方法和Lora方法

 LoRA: 在大型语言模型上对指定参数(权重矩阵)并行增加额外的低秩矩阵,并在模型训练过程中,仅训练额外增加的并行低秩矩阵的参数,冻结其他参数。 当“秩值”远小于原始参数维度时,新增的低秩矩阵参数量也就很小。在下游任务tuning时,仅须训练很小的参数,但能获取较好的表现结果。

3.Lora微调训练

推荐使用项目下example/train_sft.sh

网络上复制的一直报错export_model.py: error: the following arguments are required: --output_dir.明明指定了输出路径,甚至放在根目录或者绝对路径还报错,直至看到项目下example/train_sft.sh文件发现复制命令的有些换行/,正常是黄色,这样可能导致换行失效了。不知道为什么?

所以还是用example/train_sft.sh

可设置的主要参数包括:

  • dataset, 分词后的数据集,即在 data/ 地址下的文件夹名称
  • lora_rank, 设置 LoRA 的秩,推荐为4或8,默认8
  • per_device_train_batch_size, 每块 GPU 上的 batch size,显存不大尽量1-2
  • gradient_accumulation_steps, 梯度累加,可以在不提升显存占用的情况下增大 batch size
  • save_steps, 多少步保存一次
  • save_total_limit, 保存多少个checkpoint
  • learning_rate, 学习率
  • output_dir, 模型文件保存地址

4.Lora模型评估预测

5.Lora模型合并及使用

(1)模型合并

(2)加载并进行推理

把训练的Lora模型打包带走,假设文件夹为 model/chatglm2_lora, 其中(至少)包含 adapter_model.bin 和 adapter_config.json 两个文件,加载及推理代码如下:

from peft import PeftModel
from transformers import AutoTokenizer, AutoModel
import torch

device = torch.device(1)
# 加载原始 LLM
model_path = "THUDM/chatglm-6b"
model = AutoModel.from_pretrained(model_path, trust_remote_code=True).half().to(device)
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
model.chat(tokenizer, "你好", history=[])


# 给原始 LLM 安装上你的 LoRA tool
model = PeftModel.from_pretrained(model, "model/chatglm2_lora").half()
model.chat(tokenizer, "你好", history=[])

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

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

相关文章

78.C++ STL set/multiset容器

目录 1.什么是set和multiset 2.set和multiset的区别: 3.树的简单知识: 4.构造函数和赋值函数 5.set大小和交换 6.set插入和删除 7.set查找和统计 1.什么是set和multiset set 和 multiset 是 C 标准库中的关联容器,底层结构是用二叉树实…

算法专题:双指针

目录 题目1:移动零 题目2:复写零 题目3:快乐数 题目4:最多水的容器 题目5:有效三角形的个数 题目6:两数之和为s 题目1:移动零 给定一个数组nums,编写一个函数将所有的0移动到数…

java学生通讯录管理系统

设计要求 本课程设计,涉及输入输出、GUI设计、数据库操作等本课程重要概念和编程技能,全面巩固和加深学生对java程序设计的相关概念的理解,全面强化java编程技能,培养学生综合运用所学知识和技能分析问题和解决问题的能力。培养学…

消息队列-链表动态申请

一、链表的介绍 链表是一种常用的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。 C语言消息队列链表是一种使用链表实现的队列模块,可以用于在程序中实现消息队列的功能。C语言消息队列链表是一种自定义的数据结构&…

热门影视APP系统源码 可二开 后端+app+搭建教程

影视APP源码绿豆二开版 后端app搭建教程都在压缩包里,搭建步骤和绿豆一样 安装宝塔 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh 安装环境 Nginx 1.20.2 MySQL5.6-5.7 php7.0-7.…

C++特性——引用与指针详解

文章目录 引用1. 引用的作用1.1 引用可以做函数参数:1.2 引用做函数返回值: 2 常引用3 引用和指针3.1 引用和指针在语法层面和底层的异同3.1 引用和指针的不同 引用 简单来说,引用就是给一个变量起一个别名。例如: int a 1; in…

【数之道 05】走进神经网络模型、机器学习的世界

神经网络 神经网络(ANN)神经网络基础激活函数 神经网络如何通过训练提高预测准确度逆向参数调整法 (BackPropagation)梯度下降法链式法则增加一层 b站视频连接 神经网络(ANN) 最简单的例子,视…

解锁机器人技术的钥匙—《应用机器人学:运动学、动力学与控制技术》

随着科技的飞速发展,机器人已经广泛应用于各个领域,成为了当今世界的热门话题。作为一个工程师,如果你想在机器人行业大显身手,深入了解机器人运动学、动力学和控制技术是必不可少的。而《应用机器人学:运动学、动力学…

ERROR 1366 (HY000): Incorrect string value,mysql插入数据报错?安排

1.报错 mysql57,windows环境,插入中文数据报错 ERROR 1366 (HY000): Incorrect string value: \xC0\xEE\xCB\xC4 for column nm at row 1 2.测试语句 创建一个数据库,创建表,插入中文数据报错 1366 --创建数据库 CREATE DATABASE…

【每日一题】同积元组

文章目录 Tag题目来源题目解读解题思路方法一:哈希表组合 其他语言python3 写在最后 Tag 【哈希表组合】【数组】【2023-10-19】 题目来源 1726. 同积元组 题目解读 在一个由不同正整数组成的数组中找出满足 a * b c * d 的四元组 (a, b, c, d),返回…

macOS查端口占用进程

java开发人员,端口冲突的问题基本都遇到过吧!以下的日志是否熟悉: *************************** APPLICATION FAILED TO START ***************************Description:The Tomcat connector configured to listen on port 8084 failed to …

Spring Security过滤器链分析-初始化流程(8)

过滤器链分析 提起Spring Security的实现原理,很多读者都会想到过滤器链。因为Spring Security中的所有功能都是通过过滤器来实现的,这些过滤器组成一个完整的过滤器链。那么,这些过滤器 链是如何初始化的?我们前面反复提到的Aut…

【YOLO】拾遗(五)

0 YOLO系列笔记 【YOLO】朴实无华的yolov5环境配置(一) 【YOLO】yolov5训练自己的数据集(二) 【YOLO】目标识别模型的导出和opencv部署(三) 【YOLO】语义分割和实例分割(四) 1 …

Android-NDK-clang 编译 FFmpeg

Android-NDK-clang 编译 FFmpeg Android-NDK-clang 编译 FFmpeg Android-NDK-clang 编译 FFmpeg - 知乎 (zhihu.com) 前期准备 下载 Android-NDK下载 FFmpeg 源码 注意:笔者用的是 NDK-21 和 ffmpeg-4.4 进行编译,如果版本不同可能会有所不同。 测试&a…

【网络爬虫】2 初探网络爬虫

爬虫练手 把豆瓣的书评list页爬取下来,并获取其书名,和detail的连接地址 豆瓣的书评list的url地址, start1,2,3,4…是其地址页 https://book.douban.com/top250?start1 f12 观察其html结构 思路 按照找到的list的页面地址: 1.获取list页…

训练ChatGPT提示词,实现Excel函数操作

Excel常用表格数据处理都会离不开函数的应用。 在数据处理,数据汇总,数据展示的过程中经常需要各类函数的使用如Vlookup,Sumifs,IF 等。 例如有一份数据我们想根据销售经理的名字,查找对应的销售额。 我们先简单描述一下我们的需求: 帮我写个Excel函数,要求查找出任意销…

Electron之集成vue+vite开发桌面程序

在electron中集成vue开发桌面程序 使用我们之前创建的electron项目 创建vue 项目 命令行进入electron根目录 执行下面命令 npm create vitelatest vue -- --template vue这样就创建了一个vue项目,文件名是vue,命令行进入vue下,执行下面命…

react-router-dom v6版本实现Tabs路由缓存切换

目录 文章目录 概要 效果 完整代码 概要 摆了半年摊,好久没写代码了,今天有人问我怎么实现React-Router-dom类似标签页缓存。后面看了一下router的官网。很久以前用的是react-router v5那个比较容易实现。v6变化挺大,但了解react的机制和rea…

工业交换机定制化解决方案:光路科技的工业PoE交换机

PoE交换机能代替普通工业交换机使用吗? Power over Ethernet (PoE)交换机和普通工业交换机在某些情况下可以互相替代,但有些情况下则不太适合。PoE交换机具有额外的供电能力,用于同时为网络设备提供数据和电力。如果您的应用中只需要传输数据…

python web开发(四): Bootstrap

1.初步了解 别人已经写好的CSS样式&#xff0c;我们可以直接引用 下载 Link-BootStrap 解压&#xff0c;并放入到当前项目中 引用 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</tit…