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)
  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Colab是一个基于云端的Jupyter笔记本环境,可以免费使用GPU和TPU资源。DDPM(Diffusion Probabilistic Models)是一种生成模型,用于生成高质量的图像。在Colab上部署DDPM扩散模型可以让你在云端快速搭建和训练模型。 以下是Colab部署DDPM扩散模型的步骤: 1. 打开Colab网站(https://colab.research.google.com/)并登录你的Google账号。 2. 创建一个新的笔记本或者打开一个已有的笔记本。 3. 在笔记本中导入所需的库和模型。你可以使用PyTorch或TensorFlow等深度学习框架来实现DDPM模型。 4. 准备数据集。根据你的需求,可以选择使用已有的数据集或者自己准备数据集。 5. 定义DDPM模型的结构和参数。根据DDPM的论文或者相关资料,实现DDPM模型的网络结构和训练参数。 6. 加载数据集并进行预处理。根据你的数据集格式和要求,加载数据集并进行必要的预处理,例如图像大小调整、归一化等。 7. 定义损失函数和优化器。根据DDPM模型的训练目标,选择合适的损失函数和优化器。 8. 进行模型训练。使用加载的数据集和定义的损失函数、优化器,进行模型的训练。可以设置合适的训练轮数和批次大小。 9. 保存训练好的模型。在训练完成后,保存模型以备后续使用。 10. 进行模型评估和生成。使用保存的模型对新数据进行评估和生成,观察生成效果并进行调整。 以上是在Colab上部署DDPM扩散模型的一般步骤。具体实现过程中,可能还需要根据你的具体需求进行一些调整和优化。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值