部署和微调Qwen1.5-7B

前言

小白微调部署笔记
系统:
图形化Ubuntu20.04
主要硬件:
RTX4090 24G
使用的工具:
Miniconda、pip、git等
Ubuntu系统初始化配置:
1.安装vim编辑器

sudo apt install vim

2.安装Miniconda
自行查找教程安装

一、部署

1.创建下载路径并切换到下载路径

mkdir modes
cd modes

2.下载Qwen1.5-7B源代码

git clone https://github.com/QwenLM/Qwen.git

3.养成好习惯,使用conda创建conda环境,然后激活创建的环境

conda create -n qwen1.5 python==3.10.1
conda activate qwen1.5

4.在conda环境中安装pytorch
在安装之前建议先升级pip版本

python -m pip install --upgrade pip

然后安装pytorch(这里需要根据自己的GPU来选择合适的pytorch版本)
新开一个终端使用命令查询支持的cuda版本

nvidia-smi

然后去官网:https://pytorch.org/get-started/locally/#/选择合适的版本下载即可
在这里插入图片描述

pip3 install torch torchvision torchaudio

没看懂的自行百度学习
5.使用pip安装模型运行的项目依赖

pip install -r requirements.txt

6.切换至模型源代码位置

cd Qwen

7.下载魔塔社区的权重模型
在下载权重模型前需要先安装git-lfs这个工具

sudo apt-get install git-lfs

然后就可以初始化git lfs并且下载权重模型

git lfs install
git clone https://www.modelscope.cn/qwen/Qwen-7B-Chat.git

8.安装web UI的依赖包

pip install -r requirements_web_demo.txt

9.完成以上操作后就可以尝试运行部署的本地模型了

python web_demo.py --server-name 0.0.0.0 -c /home/intel/modes/Qwen/Qwen-7B-Chat
#/home/intel/modes/Qwen/Qwen-7B-Chat为权重模型文件路径

二、微调

这里使用法律条文为数据集来微调模型
1.选择一个路径来下载数据集
这里新建了一个文件夹来放置数据集

mkdir shujuji
cd shujuji
git lfs install
git clone https://www.modelscope.cn/datasets/Robin021/DISC-Law-SFT.git

2.然后将下载的文件进行格式转换

cd ..
vim process_date_law.py
import json

# 读取以.jsonl结尾的文件
json_data = []

with open('/home/intel/modes/Qwen/shujuji/DISC-Law-SFT/DISC-Law-SFT-Triplet-released.jsonl', 'r', encoding='utf-8') as file:
	for line in file:
		data = json.loads(line)
		json_data.append(data)

# 待填入的模板
template = []

# 遍历json数据集
for idx, data in enumerate(json_data[:]):
	conversation = [
		{
			"from": "user",
			"value": data["input"]
		},
		{
			"from": "assistant",
			"value": data["output"]
		}
	]

	template.append({
		"id": f"identity_{idx}",
		"conversations": conversation
	})

print(len(template))

# 输出填充数据后的模板
print(json.dumps(template[2], ensure_ascii=False, indent=2))

# 将template写入到本地文件
output_file_path = "train_data_law.json"

with open(output_file_path, 'w', encoding='utf-8') as f:
	json.dump(template, f, ensure_ascii=False, indent=2)

print(f"处理好的数据已写入到本地文件: {output_file_path}")

编辑完成后按键盘上的 Esc 键,在英文输入法下输入 :wq 退出文本编辑
3.运行转换脚本

python process_date_law.py

4.安装微调所需的依赖包

pip install "peft<0.8.0" deepspeed

5.更改微调脚本中的路径

vim finetune/finetune_lora_single_gpu.sh
# MODEL="/home/intel/modes/Qwen/Qwen-7B-Chat"
# DATA="/home/intel/modes/Qwen/train_data_law.json"
# 更改脚本中模型和数据集位置

编辑完成后按键盘上的 Esc 键,在英文输入法下输入 :wq 退出文本编辑
6.开始微调训练
运行下面的命令,然后就是漫长的等待

bash finetune/finetune_lora_single_gpu.sh

7.合并训练后的模型
训练完成后就会有一个文件夹output_qwen,选择其中的一个checkpoint-xxxx

vim qwen_lora_merge.py
# 将path_to_adapter = "/home/intel/modes/Qwen/output_qwen/checkpoint-xxxx"中的checkpoint-xxxx换成具体的
# 1. 模型合并
from peft import AutoPeftModelForCausalLM
from transformers import AutoTokenizer

# 确保路径字符串使用正确的引号
path_to_adapter = "/home/intel/modes/Qwen/output_qwen/checkpoint-xxxx"
new_model_directory = "/home/intel/modes/Qwen/Qwen-7B-Chat_law"

# 使用AutoPeftModelForCausalLM类从预训练的模型中加载模型
model = AutoPeftModelForCausalLM.from_pretrained(
    path_to_adapter,  # 模型输出目录的路径
    device_map="auto",  # 让模型自动选择设备
    trust_remote_code=True  # 信任远程代码
).eval()  # 评估模式

# 合并模型并卸载不需要的部分
merged_model = model.merge_and_unload()

# 保存合并后的模型,max_shard_size和safe_serialization参数根据需要设置
merged_model.save_pretrained(
    new_model_directory, 
    max_shard_size="2048MB",  # 设置分片大小
    safe_serialization=True  # 安全序列化
)

# 2. 分词器保存
# 使用AutoTokenizer类从预训练的模型中加载分词器
tokenizer = AutoTokenizer.from_pretrained(
    path_to_adapter,  # 分词器的输出目录路径
    trust_remote_code=True  # 信任远程代码
)

# 保存分词器到指定目录
tokenizer.save_pretrained(new_model_directory)

8.至此微调训练也完成了
然后可以运行微调后的模型尝试一番

python web_demo.py --server-name 0.0.0.0 -c /home/intel/modes/Qwen/Qwen-7B-Chat_law
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值