Colab微调LLaMA3模型(大模型的微调)

Colab微调LLaMA3模型

1.使用的数据集

在hugging face上搜索 kigner/ruozhiba-llama3

使用的是弱智吧的数据

2.打开Colab

选择Gpu版本T2就可以了,然后下载unsloth这个微调框架,使用该框架的主要原因在于对硬件要求比较低。

在安装这个前先看一下本文的4

用这个代码安装试一下,或者就是直接顺序安装下来。

pip install xformers==0.0.25.post1

安装的代码如下所示:

#安装微调库
%%capture
import torch
major_version, minor_version = torch.cuda.get_device_capability()
# 由于Colab有torch 2.2.1,会破坏安装包,要单独安装
!pip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"
if major_version >=8:# 新GPU!pip install --no-deps packaging ninja einops flash-attn xformers trl peft accelerate bitsandbytes
else:# 较久的GPU(V100、Tesla等)!pip install --no-deps xformers trl peft accelerate bitsandbytes
pass

3.开始加载模型

在微调库unsloth安装完成之后,开始加载模型

from unsloth import FastLanguageModel
import torch
max_seq_length = 2048
dtype = 2048
dtype = None
load_in_4bit = True
model,tokenizer = FastLanguageModel.from_pretrained(model_name = "unsloth/llama-3-8b-bnb-4bit",max_seq_length = max_seq_length,dtype = dtype,load_in_4bit = load_in_4bit,
)

4.开始进行微调前的测试

在微调前测试发现了报错,报错表示的是在前面安装xformers的时候会自动将前面安装的torch给卸载掉,可以直接以以下命令安装xformers,指定一下版本。

pip install xformers==0.0.25.post1
# 微调前测试
alpaca_prompt="""
下面是描述一个任务,以一个输入然后提供一个回复
### Instruction:
{}
### Input:
{}
### Response:
{}
"""
FastLanguageModel.for_inference(model)
inputs = tokenizer([alpaca_prompt.format("请用中文回答", # instruction"海绵宝宝的书法是不是叫做海绵体?", # input"", # output)], return_tensors = "pt").to("cuda")
from transformers import TextStreamer
text_streamer = TextStreamer(tokenizer)
# _ = model.generate(**inputs, streamer = text_streamer, max_new_tokens = 128)
_ = model.generate(**inputs, streamer=text_streamer,max_new_tokens=128)

5.准备训练数据

训练数据就是前文所提到的hugging_face地方。

# 准备微调数据集
EOS_TOKEN = tokenizer.eos_token # 必须添加 EOS_TOken
def formatting_prompts_func(examples):instructions = examples["instruction"]inputs = examples["input"]outputs = examples["output"]texts = []for instruction, input, output in zip(instructions, inputs, outputs):# 必须添加EOS_TOKEN,否则无限生成text = alpaca_prompt.format(instruction, input, output) + EOS_TOKENtexts.append(text)return {"text":texts,}
pass
from datasets import load_dataset
dataset = load_dataset("kigner/ruozhiba-llama3-tt", split="train")
dataset = dataset.map(formatting_prompts_func, batched=True,)

6.设置训练参数

#设置训练参数
from trl import SFTTrainer
from transformers import TrainingArguments
model = FastLanguageModel.get_peft_model(model,r = 16, # 建议8,16,32,64,128target_modules = ["q_proj","k_proj","v_proj","o_proj","gate_proj", "up_proj","down_proj",], # 调整那些层lora_alpha = 16,lora_dropout = 0,bias = "none",use_gradient_checkpointing = "unsloth", # 检查点,长上下文长度random_state = 3407,use_rslora = False,loftq_config = None,
)
trainer = SFTTrainer(model=model,tokenizer = tokenizer,train_dataset = dataset,dataset_text_field = "text",max_seq_length = max_seq_length,dataset_num_proc = 2,packing = False, # 可以让短序列的训练速度提高5倍args = TrainingArguments(per_device_train_batch_size = 2,gradient_accumulation_steps = 4,warmup_steps = 5,max_steps = 60, # 微调步数learning_rate = 2e-4, # 学习率fp16 = not torch.cuda.is_bf16_supported(),bf16 = torch.cuda.is_bf16_supported(),logging_steps = 1,optim = "adamw_8bit",weight_decay = 0.01,lr_scheduler_type = "linear",seed = 3407,output_dir = "outputs",),
)

7.开始训练

设置完上述参数之后就可以开始进行训练了

trainer_stats = trainer.train()

image-20240513112403079

上图所示,为其损失函数,若在有规律的下降,则代表模型正在学习这些内容。

8.测试训练后的模型

#测试微调后的模型
FastLanguageModel.for_inference(model)
input_0 = tokenizer([alpaca_prompt.format("请用中文回答", # instruction"海绵宝宝的书法是不是叫做海绵体?", # input"", # output)], return_tensors = "pt").to("cuda")
from transformers import TextStreamer
text_streamer = TextStreamer(tokenizer)
# _ = model.generate(**inputs, streamer = text_streamer, max_new_tokens = 128)_ = model.generate(**input_0, streamer=text_streamer,max_new_tokens=128)

9.保存模型

# 保存LoRA模型
model.save_pretrained("lora_model")
#合并模型并量化成4位gguf保存
model.save_pretrained_gguf("model",tokenizer, quantization_method="q4_k_m")

可以去看下面这个链接up主讲的,该文也是对该up主讲的进行一个文档化,以及结合自己进行操作时候遇到问题等的一个整理。

参考链接

etrained(“lora_model”)
#合并模型并量化成4位gguf保存
model.save_pretrained_gguf(“model”,tokenizer, quantization_method=“q4_k_m”)

可以去看下面这个链接up主讲的,该文也是对该up主讲的进行一个文档化,以及结合自己进行操作时候遇到问题等的一个整理。## 参考链接[Windows下中文微调Llama3,单卡8G显存只需5分钟,可接入GPT4All、Ollama实现CPU推理聊天,附一键训练脚本。_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV1kC411n7hD/?spm_id_from=333.337.search-card.all.click&vd_source=e3b1d6ceec31cba80353bfd01d49ed17)

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

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

相关文章

css实现上下左右对勾选中状态角标

🍥左上角 🍥右上角 🍥左下角 🍥右下角: 🍥左上角: .blueBackground {position: relative;border: 1px solid #91c7f3;background: #F0F8FF !important;&:after {content: "";position: absolute;top:…

黏土滤镜教程分享:让你的照片瞬间变身黏土艺术

在数字时代的浪潮中,手机摄影和修图软件成为了我们日常生活中不可或缺的一部分。而近期,一款名为“黏土滤镜”的修图功能火爆全网,让无数摄影爱好者和创意达人为之疯狂。本文将为你详细介绍几款拥有黏土滤镜功能的软件,并附上详细…

RiPro主题美化【支付弹窗底部提示语根据入口不同有不同的提示】ritheme主题美化RiProV2 增加支付提示语,按支付类型不同,入口不同提示语不同的设置

RiPro主题美化【支付弹窗底部提示语根据入口不同有不同的提示】ritheme主题美化RiProV2 增加支付提示语,按支付类型不同,入口不同提示语不同的设置 背景: 接上文:https://www.uu2id.com/827.html 付费组件在以下几个地方会弹出:1)文章隐藏内容付费;2)付费资源下载;3…

【R语言篇】医学生福音,全球疾病负担数据库GBD 2021即将更新!!!

今天介绍即将于5月16日更新的全球疾病负担数据库GBD 2021,相信数据一经发表,过不了多久pubmed又将涌现一大波疾病负担相关文章。 Global Burden of Disease Study 2021 (GBD 2021) Data Resources | GHDx 在查找GBD相关文献方面,我个人还是比…

Redis数据结构扩容源码分析

1 Redis数据结构 redis的数据存储在dict.中,其数据结构为(c源码) ypedef struct dict { dictType *type; //理解为面向对象思想,为支持不同的数据类型对应dictType抽象方法,不同的数据类型可以不同实现 void *privdata; //也可不同的数据类…

10个免费视频素材网站,剪辑师们赶紧收藏!

在快速发展的数字媒体时代,寻找高质量的视频和音频素材成为了多数内容创作者的日常需求。无论是企业宣传、个人创作还是社交媒体更新,优秀的素材不仅能增强视觉效果,还能提高信息传播效率。以下是一些优质的免费素材网站,它们提供…

Eduma – WordPress教育培训机构主题

下载地址:Eduma – WordPress教育培训机构主题 这个主题的设计理念是让你的教育和在线学习服务在最高水平上闪耀。Eduma具有多种功能,使其成为展示教育和在线学习服务的理想选择。 Eduma使用AJAX创建,这意味着在页面浏览过程中,页…

pdf 版面分析与优化策略

1. 简介 版面分析作为RAG的第一步工作,其效果对于下游工作至关重要。 前常见的 PDF 解析方法包括三种 基于规则:根据 PDF 的组织特征确定每个部分的规则(风格和内容)缺点:不通用(PDF格式不固定&#xf…

GPT搜索引擎原型曝光!

OpenAI发布会前一天,员工集体发疯中……上演大型套娃行为艺术。 A:我为B的兴奋感到兴奋;B:我为C的兴奋感到兴奋……Z:我为这些升级感到兴奋 与此同时还有小动作不断,比如现在GPT-4的文字描述已不再是“最先…

618购物节适合入手的数码好物有哪些?实用闭眼冲的数码好物清单

随着618购物节的临近,数码爱好者们纷纷翘首以盼,期待着在这个年度大促中寻觅到心仪的数码好物,无论是提升工作效率的办公利器,还是丰富业余生活的娱乐设备,数码产品在我们的日常生活中扮演着越来越重要的角色&#xff…

电路板维修【三】

自恢复保险丝: 自恢复保险丝属于慢断类型保险丝,自恢复保险丝的材料因为通电后发热,当电流过大发热到一定程度的时候,材料就不导电了,这个和普通的保险丝是一个道理,只不过普通的保险丝是一次型熔断而已。…

【5月13日】YesPMP平台目前最新项目

YesPMP平台目前最新项目,有感兴趣的用户查看项目接单,与项目方沟通,双方直接对接。 1.查看项目:blender动画师 2查看项目:找宠友信息源码 3.查看项目:儿童…

ComfyUI 完全入门:必备插件

大家好,我是每天分享AI应用的萤火君! ComfyUI 是一个基于 Stable Diffusion 的AI绘画创作工具,最近发展势头特别迅猛,但是 ComfyUI 的上手门槛有点高,用户需要对 Stable Diffusion 以及各种数字技术的原理有一定的了解…

【Web】CTFSHOW 月饼杯 题解(全)

目录 web1_此夜圆 web2_故人心 web3_莫负婵娟 web1_此夜圆 拿到源码&#xff0c;一眼字符串逃逸 本地测一测&#xff0c;成功弹出计算器 <?phpclass a {public $uname;public $password;public function __wakeup(){system(calc);} }function filter($string){retur…

全新Transformer模型:全球与局部双重突破!

DeepVisionary 每日深度学习前沿科技推送&顶会论文分享&#xff0c;与你一起了解前沿深度学习信息&#xff01; 引言&#xff1a;探索视觉变换器在对象重识别中的全局与局部特征 在对象重识别&#xff08;Re-ID&#xff09;的研究领域中&#xff0c;如何有效地从不同时间…

奇舞周刊第527期:​Virtual DOM(虚拟DOM) 的地位再一次被挑战 !!!

奇舞推荐 ■ ■ ■ Virtual DOM&#xff08;虚拟DOM&#xff09; 的地位再一次被挑战 &#xff01;&#xff01;&#xff01; 最近在前端圈有一个 Github Repo 算是蛮受关注的 - proposal-signals&#xff0c;这是一个由 Daniel Ehrenberg 为主导&#xff0c;向 TC39 提案的项目…

26版SPSS操作教程(高级教程第二十章)

目录 前言 粉丝及官方意见说明 第二十章一些学习笔记 第二十章一些操作方法 神经网络与支持向量机 人工神经网络&#xff08;artificial neural network&#xff0c;ANN&#xff09; 假设数据 具体操作 结果解释 对案例的进一步分析 结果解释 ​编辑 尝试将模型复…

自动驾驶技术与传感器数据处理

目录 自动驾驶总体架构 感知系统 决策系统 定位系统 ​计算平台​ 仿真平台​ 自动驾驶公开数据集 激光点云 点云表征方式 1) 原始点云 2) 三维点云体素化 3)深度图 4)鸟瞰图 点云检测障碍物的步骤 PCL点云库 车载毫米波雷达 车载相机 设备标定 自动驾驶…

Matlab如何导出高质量论文插图?科研效率UpUp第8期

当你用Matlab绘制了一张论文插图&#xff1a; 想要所见即所得&#xff0c;原封不动地将其保存下来&#xff0c;该怎么操作呢&#xff1f; 虽说以前总结过7种方法&#xff08;Matlab导出论文插图的7种方法&#xff09;&#xff0c;但要说哪一种可以满足上面的要求&#xff0c;想…

UV胶固化时使用的UV灯要如何选择才适合!

近日&#xff0c;在使用UV灯固化 UV胶的过程中&#xff0c;遇到了不同的问题&#xff0c;最基本的就是很多人对于固化UV胶时&#xff0c;使用什么样的UV灯不清楚&#xff0c;从而导致了UV胶在实际使用过程中没有固化&#xff0c;或者没有完全固化&#xff0c;胶水仍处是液体流动…