【Finetune】(一)、transformers之BitFit微调

news2024/9/21 10:35:10

文章目录

  • 0、参数微调简介
  • 1、常见的微调方法
  • 2、代码实战
    • 2.1、导包
    • 2.2、加载数据集
    • 2.3、数据集处理
    • 2.4、创建模型
    • 2.5、BitFit微调*
    • 2.6、配置模型参数
    • 2.7、创建训练器
    • 2.8、模型训练
    • 2.9、模型推理

0、参数微调简介

 参数微调方法是仅对模型的一小部分的参数(这一小部分可能是模型自身的,也可能是外部引入的)进行训练,便可以为模型带来显著的性能变化,在一些场景下甚至不输于全量微调。
 由于训练一小部分参数,极大程度降低了训练大模型的算力需求,不需要多机多卡,单卡就可以完成对一些大模型的训练。不仅如此,少量的训练参数,对存储的要求同样降低很多,大多数的参数微调方法只需要保存训练部分的参数,与动辄几十GB的原始大模型相比,几乎可以忽略。

1、常见的微调方法

 常见的微调方法如图所示:
在这里插入图片描述

Lialin, Vladislav, Vijeta Deshpande, and Anna Rumshisky. “Scaling down to scale up: A guide to parameter-efficient fine-tuning.” arXiv preprint arXiv:2303.15647 (2023).

2、代码实战

  • 模型——bloom-389m-zh
  • 数据集——alpaca_data_zh

2.1、导包

from datasets import load_dataset, Dataset
from transformers import AutoTokenizer, AutoModelForCausalLM, DataCollatorForSeq2Seq, TrainingArguments, Trainer

2.2、加载数据集

ds = Dataset.load_from_disk("./alpaca_data_zh/")

2.3、数据集处理

tokenizer = AutoTokenizer.from_pretrained("../Model/bloom-389m-zh")
tokenizer
def process_func(example):
    MAX_LENGTH = 256
    input_ids, attention_mask, labels = [], [], []
    instruction = tokenizer("\n".join(["Human: " + example["instruction"], example["input"]]).strip() + "\n\nAssistant: ")
    response = tokenizer(example["output"] + tokenizer.eos_token)
    input_ids = instruction["input_ids"] + response["input_ids"]
    attention_mask = instruction["attention_mask"] + response["attention_mask"]
    labels = [-100] * len(instruction["input_ids"]) + response["input_ids"]
    if len(input_ids) > MAX_LENGTH:
        input_ids = input_ids[:MAX_LENGTH]
        attention_mask = attention_mask[:MAX_LENGTH]
        labels = labels[:MAX_LENGTH]
    return {
        "input_ids": input_ids,
        "attention_mask": attention_mask,
        "labels": labels
    }
tokenized_ds = ds.map(process_func, remove_columns=ds.column_names)
tokenized_ds

2.4、创建模型

model = AutoModelForCausalLM.from_pretrained("../Model/bloom-389m-zh",low_cpu_mem_usage=True)

2.5、BitFit微调*

#选择模型参数里面的所有bias部分
#非bias部分冻结
num_param = 0
for name,param in model.named_parameters():
    if 'bias' not in name:
        param.requires_grad = False
    else:
        num_param+=param.numel()
num_param

2.6、配置模型参数

args = TrainingArguments(
    output_dir="./chatbot",
    per_device_train_batch_size=1,
    gradient_accumulation_steps=4,
    logging_steps=10,
    num_train_epochs=1
)

2.7、创建训练器

trainer = Trainer(
    args=args,
    model=model,
    train_dataset=tokenized_ds,
    data_collator=DataCollatorForSeq2Seq(tokenizer, padding=True, )
)

2.8、模型训练

trainer.train()

2.9、模型推理

from transformers import pipeline

pipe = pipeline("text-generation", model=model, tokenizer=tokenizer, device=0)
ipt = "Human: {}\n{}".format("考试有哪些技巧?", "").strip() + "\n\nAssistant: "
pipe(ipt, max_length=256, do_sample=True, temperature=0.5)

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

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

相关文章

Java lambda表达式的变量捕获

有人看到这个lambda表达式能够访问isQuit这个变量而且还是可以被修改的变量,就发出疑问了,之前不是说lambda不能不或变量吗? 1.规则 java的lambda表达式变量捕获规则只是针对于外部作用域的局部变量来说的!!&#xf…

3D虚拟商城是什么?有哪些优势?

在数字化转型的澎湃浪潮中,3D虚拟商店作为一股革新力量,正逐步构筑起商业展示与交易的全新维度,成为企业及商户不可或缺的战略资产。视创云展为品牌搭建3D虚拟商城提供技术支持,凭借高度精细的三维模拟空间,不仅为顾客…

vue2项目实现国际化(若依框架示例)

本文主要梳理vue2项目实现全项目格式化,在导航栏中切换,页面中所有的组件的默认语言随之切换,搭配vue-i18n插件 文章目录 基础准备引入插件vue-i18n 实现示例流程1. 创建国际化文件1.1 element文件夹1.2 locales文件夹1.3 index.js1.4 change…

设计模式之访问者模式:灵活访问对象结构的强大工具

访问者模式 访问者模式(Visitor Pattern)是一种行为型设计模式,允许在不改变数据结构的前提下定义在这些结构上的新操作。它将操作行为与对象结构分离,使得可以在不修改对象结构的情况下添加新的操作行为。 访问者模式的应用场景…

在网络环境中怎么保护个人信息安全?

在网络环境中保护个人信息安全非常重要,以下是一些基本的建议来帮助您保护自己的个人信息: 使用强密码:确保您的所有在线账户都使用强密码。强密码通常包含大写字母、小写字母、数字以及特殊字符,并且长度至少为12位以上。 启用双…

【Node.js】初识微服务

概述 Node.js 的微服务架构是一种通过将应用程序分解为独立的、松耦合的小服务的方式进行系统设计。 每个微服务负责处理一个特定的业务功能,并且这些服务可以独立开发、部署、扩展和管理,并且可以通讯。 它的核心思想就是解耦。 微服务和微前端是类…

《中国数据库前世今生》观后感:数据库与中国IT的崛起

文章目录 1. 数据库技术的演进与挑战2. 开发者眼中的数据库3. 数据库未来展望4. 结语 作为一名程序员,观看了《中国数据库前世今生》纪录片后,我感受到了数据库技术在中国发展的巨大变化。中国IT行业的快速崛起,数据库技术无疑扮演了重要角色…

2.C++中程序的语法基础--关键字与分隔符

现在回过头来看上一篇中所写的程序&#xff1a; #include <bits/stdc.h> using namespace std; int main() {// 程序主体cout << "HelloWorld" << endl; return 0; } 我们会看到许多英文单词&#xff0c;像"include"、“using”&…

智能车镜头组入门(四)元素识别

元素识别是摄像头部分中难度最大的一部分&#xff0c;也是我花时间最长的一部分&#xff0c;前前后后画了很长时间&#xff0c;最后还是勉勉强强完成了。 基础的元素识别主要有两个&#xff1a;十字&#xff0c;圆环&#xff0c;和斑马线。十字要求直行&#xff0c;圆环需要进…

科技修复记忆:轻松几步,旧照变清晰

在时间的长河中&#xff0c;旧照片承载着无数珍贵的记忆与故事。然而&#xff0c;随着岁月的流逝&#xff0c;这些照片往往变得模糊不清&#xff0c;色彩黯淡&#xff0c;令人惋惜。 幸运的是&#xff0c;随着科技的发展&#xff0c;我们有了多种方法来修复这些旧照片的画质&a…

【Python基础】Python模块(提高代码可维护性与重用性的关键)

本文收录于 《Python编程入门》专栏&#xff0c;从零基础开始&#xff0c;分享一些Python编程基础知识&#xff0c;欢迎关注&#xff0c;谢谢&#xff01; 文章目录 一、前言二、什么是Python模块&#xff1f;三、创建模块四、导入模块五、使用if __name__ "__main__&quo…

(黑马点评) 五、探店达人系列功能实现

5.1 发布和查看探店笔记 5.1.1 发布探店笔记 这块代码黑马已经完成了&#xff0c;在发布探店笔记界面&#xff0c;有两块内容是需要上传的。一是笔记内容&#xff0c;二是笔记配图。其中笔记配图部分黑马使用的是上传到本地前端服务器上面的。我我觉得可以将图片文件发布在阿里…

开始你的博客之旅:从零到一的详细指南

创建博客不仅是表达自我的方式&#xff0c;更是与世界分享知识、塑造个人品牌、甚至实现商业变现的强大工具。本文将详细介绍从确定主题到实际运营的每个步骤&#xff0c;帮助你顺利开启个人博客的旅程。 确定博客的主题和目标 在开始博客之前&#xff0c;首先要明确博客的主…

windows环境下安装python第三方包

python环境下&#xff0c;通常通过Anaconda来管理多个python环境&#xff1b; 即通过Anaconda创建python不用的虚拟环境&#xff1b; 1. 安装更新python第三方包&#xff0c;打开Anaconda&#xff0c;在右侧的搜索需要的python包并进行安装&#xff1b; 2.如果没有搜索到&…

【线性规划求解系列】MATLAB中使用linprog解决线性规划问题

linprog - 求解线性规划问题 - MATLAB - MathWorks 中国https://ww2.mathworks.cn/help/optim/ug/linprog_zh_CN.html 本文详细介绍了如何在MATLAB中使用linprog函数来解决各种类型的线性规划问题。首先概述了linprog的基本语法&#xff0c;随后通过五个具体实例演示了如何处理…

《中国数据库前世今生》纪录片观感:从古至今数据库的演变与未来

我的数据库之路&#xff1a;从新手到稳步前行 三年数据库开发的经历&#xff0c;让我从一名菜鸟程序员逐步成长为能够独立解决问题的开发者。这段时间里&#xff0c;我经历过迷茫、困惑&#xff0c;也感受过技术攻关后的成就感。最近看了腾讯云推出的《中国数据库前世今生》纪…

基于机器学习的注意力缺陷/多动障碍 (ADHD)(python论文+代码)HYPERAKTIV

简述 医疗保健领域的机器学习研究往往缺乏完全可重复性和可比性所需的公共数据。由于患者相关数据附带的隐私问题和法律要求&#xff0c;数据集往往受到限制。因此&#xff0c;许多算法和模型发表在同一主题上&#xff0c;没有一个标准的基准。因此&#xff0c;本文提出了一个公…

盘点BDC/ZCU方案常用的芯片

文章目录 1.前言2.方案概述3.主控芯片3.1 RH850/U2A3.2 TC39x3.3 E34303.4 CCFC3007、CCFC3012 4.电源芯片4.1 混合方案4.2 分立方案 5.电机驱动芯片5.1 多路半桥驱动5.2 多路预驱5.3 步进电机驱动5.4 H桥驱动5.4.1 TI的H桥驱动5.4.2 ST的H桥驱动 6.高边驱动芯片/低边驱动芯片6…

自定义项目授权文件生成与认证

基于 TrueLicense 生成的授权文件证书存在很多局限性。所用这里通过自定义的方式来实现一个License授权文件的生成&#xff01; 这里通过非对称加密RSA 的方式来创建 项目授权文件内容&#xff01; 需要注意项目打包后最好将class文件进行防反编译的操作&#xff01; 否则通过暴…

LVGL 控件之滑动条(lv_slider)

目录 一、概述二、滑块1、设置滑块当前值和范围值2、设置滑块部件的模式3、禁用单击4、事件5、API 函数 一、概述 滑动条对象看起来像是在 进度条 增加了一个可以调节的旋钮&#xff0c;使用时可以通过拖动旋钮来设置一个值。 就像进度条&#xff08;bar&#xff09;一样&…