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

文章目录

  • 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 = 256input_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 = Falseelse: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 pipelinepipe = 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.xdnf.cn/news/144486.html

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

相关文章

微信小程序案例:比较数字大小(含代码)

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

使用Postman轻松搞定文件上传测试

postman经常用于接口测试,但是上传文件参数还是蛮复杂的,记录下过程 01 上传文件参数 1.选择请求方式 选择post请求方式,输入请求地址 2.填写Headers Key:Content-Type ; Value:multipart/form-data …

【机器学习】OpenCV高级图像处理

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 OpenCV高级图像处理图像滤波线性滤波高斯滤波均值滤波双边滤波 非线性滤波中值滤…

一文带你快速了解GPT 最新模型 o1!国内直接使用 !

一、GPT-o1简介 北京时间9月13日午夜,OpenAI 正式公开一系列全新 AI 大模型,旨在专门解决难题。这是一个重大突破,新模型可以实现复杂推理,一个通用模型解决比此前的科学、代码和数学模型能做到的更难的问题,OpenAI 发…

【Unity杂谈】iOS 18中文字体显示问题的调查

一、问题现象 最近苹果iOS 18系统正式版推送,周围升级系统的同事越来越多,有些同事发现,iOS 18上很多游戏(尤其是海外游戏)的中文版,显示的字很奇怪,就像一些字被“吞掉了”,无法显示…

微信如何发布学生查分?教师平台推荐!

学校和老师们都在面临着一个共同的问题:如何高效、便捷地发布学生成绩查询信息?在这个数字化时代,传统的纸质通知和口头传达方式已经无法满足家长和学生的需求。幸运的是,有了易查分这样的在线工具,发布学生查分变得简…

李章虎律师捐资设立“前沿技术产业化专项基金”

随着新一轮技术革命和产业变革的加速演进,全球科技创新进入空前活跃的时期,以人工智能、大数据、区块链等为代表的前沿技术革命方兴未艾,全新的产业格局正在逐渐形成。为聚焦世界前沿技术商业转化应用发展,助力更多企业转型升级赋…

芯片封装是什么?芯片封装中芯片环氧胶的应用有哪些?

芯片封装是什么?芯片封装中芯片环氧胶的应用有哪些? 芯片封装是什么? 芯片封装是集成电路(IC)制造过程中的关键步骤,它包括以下几个要点: 功能与目的:封装为芯片提供物理保护&#…

【HarmonyOS 】编译报错:Install Failed: error: failed to install bundle

此问题是由于支付宝sdk兼容性造成的,目前只能删除支付宝sdk依赖,如下图所示操作,删除后需要点右上角的 Sync Now,并等待 Sync 结束 删除后还需要点右上角的 Sync Now,并等待 Sync 结束 uniapp解决方案: htt…

重磅首发!2024中国大模型行业应用前景及现状分析——建议收藏观看

本报告由深圳前瞻产业研究院、首钢基金CANPLUS联合华为云共同出品。 报告显示,2023年我国AI大模型行业规模已达到147亿元。AI大模型的行业应用及技术进步能有效提升各行业生产要素的产出效率,并提高了数据要素在生产要素组合中的地位。供给方面&#xf…

LY3315 SOT23-6 集成充电与电机驱动的控制芯片

想要更方便、高效地管理电池充电和驱动电机?那么LY3315是你理想的选择!LY3315是一款集成了锂电池充电管理模块、电机驱动模块、马达续流二极管、按键档位控制、保护模块的全集成电机驱动控制芯片。它不仅具备强大的功能,还具有超低的待机电流…

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

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

鸿蒙OpenHarmony【轻量系统芯片移植案例】标准系统方案之瑞芯微RK3568移植案例

标准系统方案之瑞芯微RK3568移植案例 ​本文章是基于瑞芯微RK3568芯片的DAYU200开发板,进行标准系统相关功能的移植,主要包括产品配置添加,内核启动、升级,音频ADM化,Camera,TP,LCD&#xff0c…

甜羊浏览器可以抖店多开自动回复

在当今数字化时代,电子商务平台如雨后春笋般涌现,其中抖音旗下的电商服务——抖店,凭借其庞大的用户基础和强大的社交属性,成为了众多商家的重要销售渠道。然而,随着业务规模的扩大,如何高效管理多个抖店账…

【软件测试】测试的岗位有哪些?

求职入口有很多:相关企业官网、求职软件、校招、公众号等等。 下面就在某招聘网站上看看测试有哪些岗位吧! 测试只是一个统称,在测试下面还有很多细分岗位。 但是测试的岗位主要分为以下俩个方面: 软件测试开发工程师&#xff…

VMware安装飞牛私有云fnOS并挂载小雅Alist实现异地远程访问

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【Bug解决】Nacos启动成功,但却无法访问(提示:无法访问此网站,192.168.10.88的响应时间过长)

项目场景: 在虚拟机上通过Docker创建Nacos容器,已经创建成功,查看Nacos启动日志也是成功。但通过端口号加8848/nacos(如:http://IP:8848/nacos)无法访问到Nacos管理页面。 愿意分析一: 先检查好…

C++:动态内存分配(new、delete 相比 malloc、free的优势)与运算符重载

动态内存分配与运算符重载 一、动态内存分配(一)内存的分类(二)动态内存分配函数(1)new 和delete 的使用(1)new 的原理(2)delete 的原理 2、 operator new与operator delete&#xf…

地图资源下载工具失效下载链接重新分享

今天发现地图资源工具下载链接被失效了,也不知道为啥!不过不影响啥,我再分享一下就行!请关注我的公众号及博客以便及时了解最新下载及更新信息!另外如遇到工具分享链接失效或不能下载的情况可私信我,我会第…

69.x的平方根 (Java)20240919

问题描述&#xff1a; java代码&#xff1a; class Solution {public int mySqrt(int x) {if (x < 2) {return x; // 0 和 1 的平方根分别是它们自己}int left 2; // 从2开始&#xff0c;因为0和1已经处理了int right x / 2; // 最大可能的平方根不会超过 x / 2int mid;w…