当前位置: 首页 > news >正文

[大模型]Qwen2.5-1.5B微调流程(自用笔记)

本篇笔记是在记录跑通+微Qwen2.5-1.5B大模型的流程,自用,仅供参考。

文章目录

  • 0. 前言
  • 1. 安装LLaMA-Factory
  • 2. 下载模型
  • 3. 数据集准备
  • 4. 训练yaml文件编写
  • 5. 训练
  • 6. 合并模型
  • 7. 模型推理
  • 结束语


0. 前言

Qwen2.5-1.5B大模型的官方github地址:https://github.com/QwenLM/Qwen2.5

1. 安装LLaMA-Factory

鉴于网上大部分的教程都是使用的llama-factory来进行的微调,包括qwen2.5的官方github中也贴有llama-factory的example
在这里插入图片描述
首先,在相应的地址进行克隆项目
我这个是在windows下运行的,所以使用的是git bash

git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e ".[torch,metrics]"

在这里插入图片描述
然后创建新的环境 此处建议创建新环境,防止已有环境会起冲突。需要提前安装anaconda

conda create -n llama-factory python=3.11
conda activate llama-factory

然后,安装llama-factory的依赖包 cd为进入所克隆项目的路径

cd LLaMA-Factory
pip install -e ".[torch,metrics]"

在这里插入图片描述
最后,验证是否安装成功

llamafactory-cli version

在这里插入图片描述
至此,llama-factory安装完成。

2. 下载模型

此处我使用的是modelscope下载,因为要快一些。需要先安装一下modelscope。

pip install modelscope

在这里插入图片描述

modelscope download --model Qwen/Qwen2.5-1.5B-Instruct --local_dir your_path/Qwen2.5-1.5B-Instruct

在这里插入图片描述
至此,模型下载完成。

3. 数据集准备

根据github中的官方文档写的数据集的格式为
在这里插入图片描述
数据集准备完成后,注册自定义的训练数据
在这里插入图片描述

4. 训练yaml文件编写

新建一个llama_qwen_train.yaml文件(名字可以自己取),把训练相关参数复制进去,一些值也可以根据自己情况进行修改。此处我参考的是qwen官方文档https://github.com/QwenLM/Qwen2.5/blob/main/examples/llama-factory/finetune-zh.md
和这篇文章LLM基础学习03:Qwen2.5-1.5B-Instruct指令微调全流程实践——LLaMA Factory框架与GSM8K评估

官方文档的
在这里插入图片描述

另一篇文章的
在这里插入图片描述

5. 训练

编写完训练参数的yaml文件以后运行,使用以下命令进行运行

llamafactory-cli train llama_qwen_train.yaml 

命令行运行以后报错
在这里插入图片描述
解决方案
在这里插入图片描述
然后成功运行
在这里插入图片描述

6. 合并模型

依旧参考上述所提的官方文档,进行模型的合并
在这里插入图片描述

7. 模型推理

使用合并好的模型进行推理,依旧采用的是官方文档

from transformers import AutoModelForCausalLM, AutoTokenizer
device = "cuda" # the device to load the model onto
model_name_or_path = YOUR-MODEL-PATH

model = AutoModelForCausalLM.from_pretrained(
    model_name_or_path,
    torch_dtype="auto",
    device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(model_name_or_path)

prompt = "Give me a short introduction to large language model."
messages = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(device)

generated_ids = model.generate(
    model_inputs.input_ids,
    max_new_tokens=512
)
generated_ids = [
    output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]

response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]

使用官方文档以后attention_mask,pad_token_id报错,参考此篇文章attention_mask,pad_token_id报错,修改后的代码如下

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
device = "cuda" # the device to load the model onto
model_name_or_path = "lora微调后的模型地址"

model = AutoModelForCausalLM.from_pretrained(
    model_name_or_path,
    torch_dtype="auto",
    device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(model_name_or_path)

prompt = "xxx"

messages = [
    {"role": "system", "content": "xxx"},
    {"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(device)
input_ids = tokenizer.encode(text, return_tensors="pt")
attention_mask = torch.ones(input_ids.shape, dtype=torch.long, device=device)

generated_ids = model.generate(
    model_inputs.input_ids,
    attention_mask=attention_mask,
    max_new_tokens=512,
    pad_token_id=tokenizer.eos_token_id,
)
generated_ids = [
    output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]

response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]

print(response)

结束语

浅浅记录一下从0跑通+微调+推理 Qwen2.5-1.5B大模型的全程

相关文章:

  • windows防火墙高级设置
  • 分享一个Drools规则引擎微服务Docker部署
  • vdi模式是什么
  • 【C语言】字符函数
  • oracle-blob导出,在ob导入失败
  • MaxEnt模型进阶:基于R语言自动化与GIS空间建模的物种栖息地精准预测
  • 2025国内DevOps新手突围指南:从Gitee零门槛入门到工具链深度对比
  • leetcode:1582. 二进制矩阵中的特殊位置(python3解法)
  • Spring Boot和Django的区别
  • 一.搭建ubuntu系统服务器
  • Zcanpro搭配USBCANFD-200U在新能源汽车研发测试中的应用指南(周立功/致远电子)
  • Ubuntu 22.04 LTS 推荐安装哪一个版本
  • 51 驱动 INA219 电流电压功率测量
  • 本周大模型新动向!即插即用知识模块,人机交互新趋势,检索增强技术深度解析
  • 微信小程序:解决tabbar切换时,页面不刷新问题
  • 卸载和重装Git后,如何正常恢复和使用本地仓库通常存储在项目?
  • Vue Router 实现动态路由的前端操作解析
  • DRM_CLIENT_CAP_UNIVERSAL_PLANES和DRM_CLIENT_CAP_ATOMIC
  • Sentinel[超详细讲解]-1
  • android常用资料
  • 电子商务网站建设与维护期末答案/今日财经新闻
  • 英语网站建设/上海单个关键词优化
  • 网站商品展示设计/网站出租三级域名费用
  • wordpress菜单子页面/seo门户网价格是多少钱
  • 长沙建站模板/滁州网站seo
  • 网站开发合同 中英文/活动推广宣传方案