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_TOKEN
    texts.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,128
    target_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)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python 运筹优化12 eps greedy 解读

说明 Epsilon-Greedy(ε-Greedy)是一种用于解决多臂LH机问题(Multi-Armed Bandit Problem)的策略,通常在强化学习中使用。在多臂LH机问题中,有多个选项(臂),每个选项都有…

CST电磁仿真的查看2D/3D结果和查看端口模式【基础教学】

查看2D/3D结果 场结果的定制化显示! Navigation Tree > 2D/3D Results 当我们使用CST软件时,可以在Field Monitor中设置好需要查看的频点后运行仿真,仿真完成后就可以在NavigationTree中确认场结果。可以有多种类型的绘图展示仿真分析得…

ROM修改进阶教程------twrp下使用一键adb脚本进行清除 格式化data和刷写分区操作

一键刷机大多用于fast模式刷写,今天给友友来讲讲如何一键刷入twrp后不用触摸操作手机 。纯手动指令来清除分区 格式化data和刷写固件的操作。此操作不是sideload方式哦。边搜网络貌似也没有相关的文章。而twrp一般都习惯于手动触摸操作卡刷卡刷包。玩机类的经验主要是有一点点…

树莓派nmap扫描

debian系统安装nmap: sudo apt install nmap安装nmap完成后,输入 ip route 来查看当前Wi-Fi路由器的ip地址。 第一行的default via后显示的便是网关地址,也就是路由器地址。 获取到路由器ip地址后,在终端中输入: …

微信小程序Vue+uniapp餐饮美食订餐骑手配送系统9g60o

本小程序uniapp菜品帮采用Java语言和Mysql数据库进行设计,技术采用微信小程序,可以不安装App软件就实现订餐。本系统实现管理员和用户、商家、配送员四个角色的功能。用户主要在微信端操作,内容有菜品信息,用户可以在线点餐和管理…

Mac安装jadx

1、使用命令brew安装 : brew install jadx 输入完命令,等待安装完毕 备注(关于Homebrew ): Homebrew 是 MacOS 下的包管理工具,类似 apt-get/apt 之于 Linux,yum 之于 CentOS。如果一款软件发布时支持了 homebrew 安…

浮点数的由来及运算解析

数学是自然科学的皇后,计算机的设计初衷是科学计算。计算机的最基本功能是需要存储整数、实数,及对整数和实数进行算术四则运算。 但是在计算机从业者的眼中,我们知道的数学相关的基本数据类型通常是整型、浮点型、布尔型。整型又分为int8&a…

[AI OpenAI-doc] 延迟优化

本指南涵盖了一系列核心原则,您可以应用这些原则来改善在各种LLM相关用例中的延迟。这些技术来自于与广泛的客户和开发人员在生产应用程序上的合作,因此无论您正在构建什么——从细粒度的工作流程到端到端的聊天机器人,都应该适用&#xff01…

PostgreSQL建表语句 INT, INT2, INT4, INT8 分别对应Java,Go, Python什么数据类型?

🐯 PostgreSQL建表语句 INT, INT2, INT4, INT8 分别对应Java,Go, Python什么数据类型 博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题…

【JVM】从三种认知角度重识JVM

目录 JVM概述 JVM主要功能 虚拟机是Java平台无关的保障 JVM概述 JVM:Java Virtual Machine,也就是Java虚拟机。 虚拟机:通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的计算机系统(物理上不存在)。 JVM通…

Springboot + xxlJob注意事项

1. 部署 就是这个地址: https://gitee.com/xuxueli0323/xxl-job 由于xxl-job的思想是 调度中心负责调度任务,然后有执行器负责接受调度的信息,然后根据调度,执行任务中的具体逻辑 将 xl-job-admin 启动起来,操作xl-job-admin这个文件夹下的配置文件即可: 创建数据库 执行sql…

Kaspa是潜力金吗?那么如何获取,以bitget钱包为例

$KAS 这个币比较小众,华语区知道的不多,目前挖这个币的矿工也不多,但是大家都有一个默契,就是尽量不要宣传,先建设生态,自私的心理就是:自己先多挖些币。 简单介绍一下 #KASPA 这个项目&#x…

第二证券今日投资参考:银保渠道合作限制松绑 低空旅游借势起飞

昨日,两市股指盘中震动上扬,沪指一度涨近1%续创年内新高,创业板指一度涨超2%。到收盘,沪指涨0.83%报3154.32点,深证成指涨1.55%报9788.07点,创业板指涨1.87%报1900.01点,科创50指数涨2.26%&…

Linux提权--Rsync(未授权访问) Docker 组挂载

免责声明:本文仅做技术学习与交流... 目录 Rsync(未授权访问) 介绍: 靶场及过程: 提权过程: Docker 组挂载 原理: 复现: 利用: 具体操作: 1-确定是否有docker服务 2-查看用户是否在docker组里面 3-执行命…

apinto OpenAPI

OpenApi 上游 查询列表 查询详情 新增 { "name": "jg_upstream", "driver": "http", "description": "通过postman添加上游", "scheme": "HTTPS", "retry":"1", "…

1063 计算谱半径

solution 找出虚部和实部平方和的最大值&#xff0c;输出该最大值的开方&#xff0c;保留两位小数 #include<iostream> #include<cmath> using namespace std; int main(){int n, a, b, ans 0;scanf("%d", &n);while(n--){scanf("%d%d"…

超便捷备忘录共享方法 文字文件都可共享

在这个信息爆炸的时代&#xff0c;备忘录已成为我们生活中不可或缺的小助手。它记录着我们的工作计划、待办事项、灵感闪现&#xff0c;甚至是那些温馨的家庭琐事。然而&#xff0c;当我们在不同的设备间穿梭&#xff0c;如何在手机、电脑&#xff0c;甚至是不同品牌的手机之间…

计算机辅助考试

加我zkhengyang可申请加入数字音频系统研究开发交流答疑群(课题组)&#xff0c;考神训练营&#xff0c;&#xff0c; 为了通过某项考试&#xff0c;可借助计算机(个人电脑)来辅助备考。本人通过电脑辅助学习&#xff0c;成功通过了驾照科目一&#xff0c;全国计算机二级C语言考…

新手做视频号电商,做什么样的产品好卖?适合不会选类目的新手看

大家好&#xff0c;我是电商花花&#xff0c;专注做电商的花花。 视频号现在的发展可以说是非常好的&#xff0c;拥有着空前的市场和流量&#xff0c;随着视频号小店新项目对电商的冲击&#xff0c;让更多创业者和新手商家开始涌入视频号电商的行列。 想要在新项目中抢占流量…

如何给远程服务器配置代理

目录 前言 正文 更换镜像源 开始之前 安装过程 遇到的问题 尾声 &#x1f52d; Hi,I’m Pleasure1234&#x1f331; I’m currently learning Vue.js,SpringBoot,Computer Security and so on.&#x1f46f; I’m studying in University of Nottingham Ningbo China&#x1f4…