11.QLoRA微调ChatGLM3-6B

news2025/1/23 13:33:44

实战 QLoRA 微调 ChatGLM3-6B 大模型

实战 PEFT QLoRA ChatGLM3-6B

请添加图片描述

微调数据集 AdvertiseGen

请添加图片描述

AdvertiseGen 数据集获取

请添加图片描述

使用ChatGLM3-6b Tokenizer处理数据

关于ig nore_label_id 的设置:

在许多自然语言处理和机器学习框架中, ig nore_label_id 被设置为-100 是一种常见的约定。 这个特殊的值用千标记在计算损失函数时应该被忽略的目标标签。 让我们详细了解一下这个选择的原因:

  1. 损失函数忽略特定值:训练语言模型时, 损失函数(例如交叉嫡损失)通常只计算对千模型预测重要或关键的标签的损失。 在某些况下, 你可能不希望某些标签对损失计算产生影晌。 例如, 在序列到序列的模型中, 输入部分的标签通常被设置为一个忽略值, 因为只有输出部分的标签对千训练是重要的。
  2. 为何选择-100: 这个具体的值是基千实现细节选择的。 在 PyTorch 的交叉嫡损失函数中, 可以指定一个ig nore_index 参数。 当损失函数看到这个索引值时, 它就会忽略对应的输出标签。 使用-100 作为默认值是因为它是一个不太可能出现在标签中的数字(特别是在处理分类间题时, 标签通常是从0开始的正整数)。
  3. 标准化和通用性:由于这种做法在多个库和框架中被采纳, -100 作为忽略标签的默认值已经变得相对标准化, 这有助于维护代码的通用性和可读性。

总的来说, 将ig nore_label_id 设置为-100 是一种在计算损失时排除特定标签影晌的便捷方式。 这在处理特定类型的自然语言处理任务时非常有用, 尤其是在涉及序列生成或修改的任务中。

自定义模型新增Adapter

当新的热门transformer网络架构(新模型)发布时, Huggingface社区会尽力快速将它们添加到PEFT 中。

具体来说, 在初始化相应的微调配置类(例如 LoraConfig)时, 我们需要显式指定在哪些层新增适配器(Adapter), 并将其设置正确。

ref: https 😕/hugg i ngf a ce.co/docs/peft/deve loper:_gu id es/custom_models

PEFT适配模块设置

在PEFT库的constants.py文件中定义了不同的PEFT 方法, 在各类大模型上的微调适配模块。

通常, 名称相同的模型架构也类似, 应用微调方法时的适配器设置也几乎一致。

例如, 如果新模型架构是mis tral模型的变体, 并且您想应用LoRA微调。 在

TRANSFORMERS_MODELS_TO_LORA_TARGET_MODULES_MAPPING中 mis t ral包含[“q_proj”, 11v_proj” ]。

这表示说, 对千 mis tral模型, LoRA的target_modules通常是[“q_proj”, 11v_p「oj ” ]。

关千使用 num_train_epochs 时, 训练总步数 st eps 的计算方法

  • 训练总步数: total_steps = steps/epoch* num_train_epochs
  • 每个epoch的训练步数: steps/epoch= num_train_examples / (batch_size * gradient_accumulation_steps)

以adgen数据集为例计算

DatasetDict({ 
train: Dataset({ 
}) 
features: ['content', 'summary'], 
num_rows: 114599 
validation: Dataset({ 
}) 
}

代入超参数和配置进行计算:

num_train_epochs = 1 
num_train_examples = 114599 
batch_size = 16 
gradient_accumulation_steps = 4 
steps = num_train_epochs * num_train_examples / (batch_size * gradient_accumulation_steps) 
= 1 * 114599 / (16 * 4) 
= 1790

请添加图片描述

微调前后效果对比

ChatGLM-6B

输入:

类型#裙*版型#显瘦*风格#文艺*风格#简约*图案#印花*图案#撞色*裙下摆#压褶*裙长#连衣裙*裙领型#圆领

ChatGLM-6B微调前输出:
  • 版型:修身
  • 显瘦:True
  • 风格:文艺
  • 简约:True
  • 图案:印花
  • 撞色:True
  • 裙下摆:直筒或微喇
  • 裙长:中长裙
  • 连衣裙:True
ChatGLM-6B微调后输出:

一款简约而不简单的连衣裙, 采用撞色的印花点缀, 打造文艺气息, 简约的圆领, 修饰脸型。 衣袖和裙摆的压褶, 增添设计感, 修身的版型, 勾勒出窃究的身材曲线。

ChatGLM2-6B

输入:

类型#裙*版型#显瘦*风格#文艺*风格#简约*图案#印花*图案#撞色*裙下摆#压褶*裙长#连衣裙*裙领型#圆领

微调前:

这款裙子,版型显瘦,采用简约文艺风格,图案为印花和撞色设计,裙下摆为压褶裙摆,裙长为连衣裙,适合各种场合穿着,让你舒适自在。 圆领设计,优雅清新,让你在任何场合都充满自信。 如果你正在寻找一款舒适、 时尚、 优雅的裙子,不妨考虑这款吧!

微调后:

这款连衣裙简约的设计, 撞色印花点缀, 丰富了视觉, 上身更显时尚。 修身的版型, 贴合身形, 穿着舒适不束缚。 圆领的设计, 露出精致锁骨, 尽显女性优雅气质。 下摆压褶的设计, 增添立体感, 行走间更显飘逸。 前短后长的设计, 显得身材比例更加完美。 文艺的碎花设计, 更显精致

ChatGLM3-6B

input_text ='类型#裙*版型#显瘦*风格#文艺*风格#简约*图案#印花*图案#撞色*裙下摆#压褶*裙长护巠衣裙*裙领型#囡领'  
print(f'输入: \n{input_text}') 
tokenizer = AutoTokenizer.from_pretrained(config.base_model_name_or_path, trust_remote_code=True)

输入:

类型#裙*版型#显瘦*风格#文艺*风格#简约*图案#印花*图案#撞色*裙下摆#压褶*裙长#连衣裙*裙领型#圆领

response, history= base_model.chat(tokenizer=tokenizer, query=input_text} 
print(f'ChatGLM3-6B微调前: \n{response}'}
response, history= base_model.chat(tokenizer=tokenizer, query=input_text} 
print(f'ChatGLM3-6B微调前: \n{response}'}

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

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

相关文章

JVM知识梳理

一 JVM 是一种规范 1.1 Java程序的执行过程 一个 Java 程序,首先经过 javac 编译成 .class 文件,然后 JVM 将其加载到方法区,执行引擎将会执行这些字节码。执行时,会翻译成操作系统相关的函数。JVM 作为 .class 文件的翻译存在…

[Algorithm][贪心][柠檬水找零][将数组和减半的最少操作次数][最大数][摆动序列]详细讲解

目录 1.柠檬水找零1.题目链接2.算法原理详解3.代码实现 2.将数组和减半的最少操作次数1.题目链接2.算法原理详解3.代码实现 3.最大数1.题目链接2.算法原理详解3.代码实现 4.摆动序列1.题目链接2.算法原理详解3.代码实现 1.柠檬水找零 1.题目链接 柠檬水找零 2.算法原理详解 …

Cisco Packet Tracer实验(一)

协议的概念 VLSM:可变长子网掩码(Variable Length Subnet Mask)没有传统意义上的A、B、C类网络,根据需求变化子网掩码的长度 CIDR无类别域间路由(ClasslessInter-Domain Routing、CIDR)把子网聚合在一起&…

多款可观测产品全面升级丨阿里云云原生 5 月产品月报

云原生月度动态 云原生是企业数字创新的最短路径。 《阿里云云原生每月动态》,从趋势热点、产品新功能、服务客户、开源与开发者动态等方面,为企业提供数字化的路径与指南。 趋势热点 🥇 阿里云云原生产品负责人李国强:推进可…

Eureka到Nacos迁移实战:解决配置冲突与启动异常

问题:Eureka到Nacos迁移实战:解决配置冲突与启动异常 在进行微服务架构升级,特别是注册中心从Eureka转向Nacos的过程中,我遇到了一个典型的技术挑战。目标是为了减少因配置变更导致的服务重启频率,我决定拥抱Nacos以其…

【PB案例学习笔记】-21小大写金额转换

写在前面 这是PB案例学习笔记系列文章的第21篇,该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习,提高编程技巧,以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码,小凡都上传到了gite…

安装台式电脑网卡驱动

安装电脑网卡驱动 1. 概述2. 具体方法2.1 先确定主板型号2.2 详细操作步骤如下2.2.1 方法一2.2.2 方法二2.2 主流主板官网地址 结束语 1. 概述 遇到重装系统后、或者遇到网卡驱动出现问题没有网络时,当不知道怎么办时,以下的方法,可以作为一…

MMDetection实用工具详解(下):模型复杂度、基准测试

工具目录 四、模型复杂度应用展示结果解析 五、基准测试鲁棒性测试基准应用展示结果解析Testing gaussian_noise at severity 0Testing gaussian_noise at severity 2Aggregated results 遇到的tools自定义导包模块No Module Error错误解决思路 上期MMDetection内三个实用工具详…

2、给出五种并行计算机体系结构的名称,并分别画出其典型结构。

①并行向量处理机(PVP) ②对称多机系统(SMP) ③大规模并行处理机(MPP) ④分布式共享存储器多机系统(DSM) ⑤工作站机群(COW)

户外led显示屏如何选择?

在繁华的都市中,户外LED显示屏以其独特的魅力,成为传递信息、展示形象的重要工具。然而,面对市场上琳琅满目的产品,如何选择一款适合自己的户外LED显示屏呢?下面,我们将从屏幕类型、尺寸等具体参数出发&…

教程:A5000 GPU 上运行阿里最新开源大模型 Qwen2

这是我们新一篇关于大模型的文章,我们此前还讲过如何运行 LLama3 大模型。而这次,我们将使用 Ollama 运行阿里千问Qwen2:7b。要知道 Qwen2 可是目前最热门的开源大语言模型了,甚至在一些性能测试中比 LLama3 表现还突出。谁不想试试看呢&…

Golang | Leetcode Golang题解之第149题直线上最多的点数

题目&#xff1a; 题解&#xff1a; func maxPoints(points [][]int) (ans int) {n : len(points)if n < 2 {return n}for i, p : range points {if ans > n-i || ans > n/2 {break}cnt : map[int]int{}for _, q : range points[i1:] {x, y : p[0]-q[0], p[1]-q[1]if…

《NVIDIA-Jetson AGX Orin》移除或临时忽略 NVIDIA 仓库

阿丹&#xff1a; 开发的过程中出现了一些问题&#xff0c;在下载以及安装docker的时候&#xff0c;明明已经修改到了阿里云的国内镜像&#xff0c;但是还在下载的时候去访问了英伟达的下载仓库。在国内网络环境就会导致下载失败&#xff0c;网络不可达&#xff0c;本文章记录一…

现在Java行情不好可以转.net吗?

转向.NET开发可能是一个选择&#xff0c;但要注意以下几点。我这里有一套编程入门教程&#xff0c;不仅包含了详细的视频 讲解&#xff0c;项目实战。如果你渴望学习编程&#xff0c;不妨点个关注&#xff0c;给个评论222&#xff0c;私信22&#xff0c;我在后台发给你。 技术转…

好书推荐:生成式AI入门与AWS实战

这本书给LLM的爱好者者提供了完整的学习路线&#xff0c;让读者从使用大语言模型开始到剖析常用的技术概念&#xff0c;能够填补了机器学习爱好者从传统的文字处理到大语言模型的空白知识&#xff0c;包括显存计算优化&#xff0c;微调&#xff0c;RAG&#xff0c; 多模态&…

电池包断路单元DBU的预充电电阻应用案例

当电池组接触器闭合到电机和逆变器上时&#xff0c;逆变器电容器中会有电流涌入。这种非常高的电流至少可能会使接触器老化&#xff0c;并可能永久损坏接触器。 因此&#xff0c;当我们关闭电池组上的接触器时&#xff0c;我们分三个步骤执行此操作&#xff1a; 1.关闭主负极…

【机器学习】鸢尾花分类:机器学习领域经典入门项目实战

学习机器学习&#xff0c;就像学习任何新技能一样&#xff0c;最好的方法之一就是通过实战来巩固理论知识。鸢尾花分类项目是一个经典的入门项目&#xff0c;它不仅简单易懂&#xff0c;还能帮助我们掌握机器学习的基本步骤和方法。 鸢尾花数据集&#xff08;Iris Dataset&…

NLP入门——基于TF-IDF算法的应用

从json格式数据中抽出句子和标签 首先查看json格式的数据文件&#xff1a; :~/nlp/tnews/src$ less train.json可以看到json字符串表示一个对象&#xff0c;我们利用json.loads() 函数会将其转换为一个 Python 字典。docs python json #ext.py #encoding: utf-8import sys f…

计算机网络 —— 应用层(DNS域名系统)

计算机网络 —— 应用层&#xff08;DNS域名系统&#xff09; 什么是DNS域名的层次结构域名分类 域名服务器的分类域名解析方式递归查询&#xff08;Recursive Query&#xff09;迭代查询&#xff08;Iterative Query&#xff09;域名的高速缓存 我们今天来看DNS域名系统 什么…

Qt调用第三方库的通用方式(静态链接库.a或.lib、动态链接库.dll)

目录 一、前提 二、如何引用静态链接库 三、如何引用动态链接库 四、示例代码资源 在开发项目中经常会存在需要调用第三方库的时候&#xff0c;对于Qt如何来调用第三方库&#xff0c;为了方便自己特意记录下详细过程。 一、前提 1. window 10操作系统 2. 已安装了Qt6.7.…