Bootstrap

基于LLaMA-Factory微调Qwen2.5-1.5B-Instruct

一.环境

1.使用了modelscope的云服务

这是modelscope的官网

魔搭社区汇聚各领域最先进的机器学习模型,提供模型探索体验、推理、训练、部署和应用的一站式服务。icon-default.png?t=O83Ahttps://www.modelscope.cn/

这个服务需要绑定阿里云,没注册的还要注册阿里云

2.注册

modelscope社区的账号,后续方便使用。

3启动

进入modelscope社区的首页

1.点击我的Notebook
2.选择阿里云弹性加速计算EAIS
3.选择方式二
4.启动(我这里是启动成功了的,启动成功后点击查看Notebook)

4.创建

点击查看Notebook后选择下面的第一个创建一个Notebook

并将其重命名为如下 

 

更新和安装

pip 升级到最新版本

安装或升级 bitsandbytes  Python 库,要求版本大于 0.39.0

!pip3 install --upgrade pip
!pip3 install bitsandbytes>=0.39.0

执行完成后左侧资源管理会多一个文件


下载LLaMA-Factory
!git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git

执行完成后左侧资源管理会多一个文件

下载qwen2.5模型
1.在魔搭点击模型
2.在搜索框搜索qwen2.5
3.找到1.5B版本的

4.进入后点击模型文件
5.复制下载地址

注:在notebook中执行要在前面加一个英文的感叹号

!git clone https://www.modelscope.cn/Qwen/Qwen2.5-1.5B-Instruct.git

这里模型下载需要时间,我们先去配置以下其他东西

打开一个终端

进入LLaMA-Factory目录

cd LLaMA-Factory

 然后执行这个命令

pip3 install -e ".[torch,metrics]"

 

微调设置

进入这个目录LLaMA-Factory/examples/train_qlora/

找到这个文件llama3_lora_sft_awq.yaml复制一份重命名为qwen_lora_sft_bitsandbytes.yaml


将其内容修改为以下内容并保存

### model
model_name_or_path: ../Qwen2.5-1.5B-Instruct
quantization_bit: 4
### method
stage: sft
do_train: true
finetuning_type: lora
lora_target: all

### dataset
dataset: identity
template: qwen
cutoff_len: 1024
max_samples: 1000
overwrite_cache: true
preprocessing_num_workers: 16

### output
output_dir: saves/qwen2.5-1.5b/lora/sft
logging_steps: 10
save_steps: 500
plot_loss: true
overwrite_output_dir: true

### train
per_device_train_batch_size: 1
gradient_accumulation_steps: 8
learning_rate: 1.0e-4
num_train_epochs: 3.0
lr_scheduler_type: cosine
warmup_ratio: 0.1
bf16: true
ddp_timeout: 180000000

### eval
val_size: 0.1
per_device_eval_batch_size: 1
eval_strategy: steps
eval_steps: 500
添加模板

然后进入这个目录LLaMA-Factory/src/llamafactory/data/

打开template.py

划到408行左右添加一个qwen模板

将下面内容复制粘贴就行

_register_template(
    name="qwen",
    format_user=StringFormatter(slots=["<|im_start|>user\n{{content}}<|im_end|>\n<|im_start|>assistant\n"]),
    format_system=StringFormatter(slots=["<|im_start|>system\n{{content}}<|im_end|>\n"]),
    format_observation=StringFormatter(slots=["<|im_start|>tool\n{{content}}<|im_end|>\n<|im_start|>assistant\n"]),
    format_separator=EmptyFormatter(slots=["\n"]),
    default_system="You are a helpful assistant.",
    stop_words=["<|im_end|>"],
    replace_eos=True,
)
修改训练数据

数据修改数据,我这里的数据是我朋友给我的
 

 进入目录LLaMA-Factory/data/

找到 identity.json

打开后呈以下模样
 

这里不能修改,我们将文件后缀改为md 

 

将准备好的数据全部复制过来

 再将后缀改为json

数据的修改就完成了

 二.微调

在 LLaMA-Factory 目录下,输入以下命令启动微调脚本

llamafactory-cli train examples/train_qlora/yi_lora_sft_bitsandbytes.yaml

 呈现下面这个就是启动成功,这个过程耗时需要耐心等待

三.推理测试

当进度条到达100%后就表示微调成功

下面我们开始测试
首先找到目录

LLaMA-Factory/examples/inference/

将llama3_lora_sft.yaml复制一份重命名为qwen_lora_sft.yaml

将其中内容修改为
 

model_name_or_path: ../Qwen2.5-1.5B-Instruct
adapter_name_or_path: saves/qwen2.5-1.5b/lora/sft
template: qwen
finetuning_type: lora

保存后在终端执行下面的命令

llamafactory-cli chat examples/inference/qwen_lora_sft.yaml

运行成功后就可以开始对话测试了(可能回答得有点牛头不对马嘴) 

;