11.QLoRA微调ChatGLM3-6B

实战 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.mzph.cn/diannao/26983.shtml

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

相关文章

Julia 数学函数

Julia 数学函数 Julia 是一种高性能的动态编程语言,特别适合于数值计算和科学计算。在数学领域,Julia 提供了丰富的内置函数,这些函数涵盖了从基本运算到高级数学运算的各个方面。本文将详细介绍 Julia 中的数学函数,并提供一些示例,帮助读者更好地理解和使用这些函数。 …

在VSCode中使用Vim

在VSCode中使用Vim,主要涉及到Vim插件的安装和配置。以下是在VSCode中使用Vim的详细步骤: 1. 安装Vim插件 打开VSCode:首先,启动你的VSCode编辑器。进入扩展面板:在VSCode的左侧活动栏中,点击扩展图标&am…

计算机网络实验(鲁东大学)-cisco-逃课

逃课脚本4-1第二关 以4-1 第二关为例 点开图形化界面,点开工具箱 点复制粘贴 把逃课代码复制粘贴进,点击保存 回到图形化界面,任意位置打开终端 点击shiftctrlv(其他方式粘贴进终端也可)后敲击回车,在…

[大模型]Phi-3-mini-4k-Instruct Lora 微调

本节我们简要介绍如何基于 transformers、peft 等框架,对 Phi-3-mini-4k-Instruct 模型进行 Lora 微调。Lora 是一种高效微调方法,深入了解其原理可参见博客:知乎|深入浅出 Lora。 这个教程会在同目录下给大家提供一个 nodebook 文件&#x…

代码随想录算法训练营day6| 哈希表理论基础,242.有效的字母异位词,349. 两个数组的交集,202. 快乐数,1. 两数之和

day5休息 1. 哈希表理论基础 要了解哈希表的内部实现原理,哈希函数,哈希碰撞,以及常见哈希表的区别,数组,set 和map。 什么时候想到用哈希法,当我们遇到了要快速判断一个元素是否出现集合里的时候&#xf…

sslh一键在一个端口上运行多个服务(KALI工具系列二十三)

目录 1、KALI LINUX 简介 2、sslh工具简介 3、信息收集 3.1 目标主机IP(win) 3.2 KALI的IP 4、操作示例 4.1 监听特定端口 4.2 配置SSH 4.3 配置apache 4.4 配置sshl 4.5 验证配置 5、总结 1、KALI LINUX 简介 Kali Linux 是一个功能强大、…

基于线性核函数的SVM数据分类算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于线性核函数的SVM数据分类算法matlab仿真,通过程序产生随机的二维数据,然后通过SVM对数据进行分类,SVM通过编程实现&#x…

[大模型]Phi-3-mini-4k-instruct langchain 接入

环境准备 在 autodl 平台中租赁一个 3090 等 24G 显存的显卡机器,如下图所示镜像选择 PyTorch–>2.0.0–>3.8(ubuntu20.04)–>11.8 。 接下来打开刚刚租用服务器的 JupyterLab,并且打开其中的终端开始环境配置、模型下载和运行演示。 创建工作…

HTML具体应用介绍要点和难点以及优缺点分析

HTML(HyperText Markup Language)是超文本标记语言,它是用于创建网页的标准标记语言。HTML 描述了网页的结构和内容,但它并不包含如何显示这些内容的样式(如字体、颜色、布局等)或如何处理用户输入(如表单提交)的信息。这些通常由 CSS(层叠样式表)和 JavaScript 来实…

Java Android 静态内部类 以及优雅实现单例模式/避免handler内存泄漏

前言 Java 中的静态内部类(Static Nested Class)是定义在另一个类里面的一个静态类。它和普通的内部类有些区别,主要是静态内部类不需要依赖于外部类的实例就可以被创建和访问。这种类的特性使得它非常适合用来作为辅助类,用于支持外部类的功能。 特点以及使用场景 静态内…

云计算时代的等保测评挑战和应对策略

概述 云计算作为一种新兴的计算模式,以其灵活性、可伸缩性和经济性,正逐渐成为企业和组织构建信息系统的首选。然而,云计算环境下的信息安全等级保护(以下简称“等保”)测评面临着前所未有的挑战。本文将从等保测评的…

RabbitMQ实践——配置Prometheus和Grafana报表

大纲 启用rabbitmq_prometheus插件安装启动Prometheus创建用户下载并解压修改配置启动 安装启动grafana安装启动配置数据源 在《RabbitMQ实践——在Ubuntu上安装并启用管理后台》中我们已经安装成功RabbitMQ及其管理后台。在此基础上,我们将打通它和Prometheus、Gra…

PHP地方门户分类信息网站源码讯客分类信息系统源码(含手机版)

源码介绍 1.上传程序到网站根目录,访问http://域名/install/index.php 进行安装,不要直接打开网址,先直接安装; 2.安装完成后 后台恢复数据即可 默认帐号密码都是admin http://域名/admin/ 3.不要删除任何文件,因为删除文件或者修改代码可能造成错误 运…

渗透测试练习题解析 6 (CTF web)

1、[HCTF 2018]admin 1 考点:二次注入 先注册一个账号看看,注册 admin 会提示该用户名已存在,那我们就换一个用户名 观察页面功能,存在一个修改密码,开始的思路是想看看能否通过该密码功能抓包然后修改用户名为 admin …

键盘、鼠标、轴体选购指南

起因 买了块27寸的屏幕msi,一旦入坑爬不起来了。 这不是要配个键盘么。 鼠标的左键也不够灵敏,不知道是电池不足还是使用时间太久,也萌生换的念头。有一个重要原因也是跟电脑和鼠标垫整体不搭。 搜集信息 原本的一个键盘是ikbc国产牌子&am…

Intellij IDEA开发Android项目打包生成APK

在 IntelliJ IDEA 左上方中选择 “Build” -> “Generate Signed Bundle / APK…”选择“APK”——“Next”——“Create New…”(Password随便填123456即可) “Next”——选择release(APK生成后默认存放在本项目的release文件夹里&#x…

【产品经理】订单处理2

本次讲解订单初始化成功到ERP系统过程中的后续环节。 一、根据客服备注更新订单信息 初始化订单过程中,若订单中的客服备注信息对订单进行更新,包括可能改收货信息、改商品、加赠品、指定快递等。 注意:更新订单的过程中要注意订单当前状…

Python | Leetcode Python题解之第150题逆波兰表达式求值

题目: 题解: class Solution:def evalRPN(self, tokens: List[str]) -> int:op_to_binary_fn {"": add,"-": sub,"*": mul,"/": lambda x, y: int(x / y), # 需要注意 python 中负数除法的表现与题目不一…

VUE3之响应系统

VUE3之响应系统 前言 最近在学习VUE3的新特性,记录一下学习成果。 副作用函数 什么是副作用函数? 会产生副作用的函数,或者说会直接或间接影响其他函数的执行结果。 举个简单的例子:一个函数改变了全局变量,这个函数…

电子制造业数字化整体解决方案

电子制造行业有特殊的着重点: 高精度要求:电子制造需要极高的精度和质量控制,因为电子组件和电路板的尺寸通常非常小,且对错误和缺陷非常敏感。 快速技术迭代:电子行业的技术迅速发展,产品生命周期短&…