LoRA微调Qwen3-0.6B,并使用vllm本地部署运行

下载模型

在魔搭社区下载Qwen3-0.6B模型,使用modelscope SDK进行下载。首先安装modelscope库,然后执行以下代码下载模型并保存到本地指定目录。

本地环境: macos 32G M1pro 10cpu

pip install modelscope
from modelscope import snapshot_download
model_dir = snapshot_download('Qwen/Qwen3-0.6B',cache_dir="/Users/shellon/model")

提示:指定一个参数cache_dir,让模型下载到我们自定义的本地路径。

下载LLaMA-Factory

从GitHub克隆LLaMA-Factory仓库,并安装相关依赖。

git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e .

LLaMA-Factory最新版本支持Qwen3 transformers可以下载到4.52.1
在这里插入图片描述

pip install -e . 这里后面不跟参数,直接安装默认的环境了

准备训练数据

将训练数据文件train.jsonidentity.json放置在LLaMA-Factory/data/目录下。然后再准备一份测试集,从train.json中取出一部分数据作为测试集。

在这里插入图片描述

在这里插入图片描述

修改LLaMA-Factory/data/dataset_info.json文件,注册train数据集。

在这里插入图片描述

"train": {
  "file_name": "train.json",
  "columns": {
    "prompt": "instruction",
    "query": "input",
    "response": "output",
    "history": "history"
  }
}

启动LLaMA-Factory

进入LLaMA-Factory目录,启动Web UI。

cd LLaMA-Factory
llamafactory-cli webui

微调过程

模型名称:Qwen3-0.6B-Instruct
模型路径:本地模型的绝对路径 /Users/shellon/model/Qwen/Qwen3-0___6B
微调方法:loar微调
量化等级:none (不量化微调)
检查点路径:训练过程中保留权重的路径,可以基于上一次训练生成的检查点路径,继续从这个检查点路径训练。如果之前训练过就有值。
提示词模版:qwen3
在这里插入图片描述

训练:

在这里插入图片描述

其他的参数用的默认值

因为我的电脑是macos,在计算类型这个参数中只能使用fp32精度,其他精度的都不支持,所以导致我在训练的时候很慢,30轮的epoch训练了5个小时左右。

可以看到每到100步会保存一个checkpoint

在这里插入图片描述

本次训练的数据样本总共490条,设定训练30轮,用了不到5个小时训练完成。
单卡实际批量(batch_size=2),通过梯度累积(steps=8)等效于总批量16
总训练步数​​:600 = 样本数491 × 轮数30 / 总批量16

一般来说,微调至少需要1000+条优质的训练集数据。低于此数量级时,模型多学几遍就开始“背题”而非学习数据中的蕴含的知识。我这里简单测试,数据不到500条

可以看到loss整体是降低的:
在这里插入图片描述

模型微调评估过程中需要的三种数据集:
1.训练集:微调训练用到的数据,相当于教材
2.验证集:微调过程中验证结果使用到的数据,相当于模拟考试
3.测试集:微调完后评估模型训练效果的数据 ,相当于考试真题

评估

在这里插入图片描述

量化导出

选择检查点路径后,会按照训练最新的权重合并模型,然后导出。可能我微调的时候用的是fp32所以导出的模型竟然比原来的模型还大。从魔搭下载的模型是1.5G,微调完导出变成了2.3G,离谱!

在这里插入图片描述
在这里插入图片描述

部署

导出之后本来想用ollama部署,但是当我用llama.cpp转换成gguf后,部署到ollama进行推理,模型直接癫狂了,不但回答的不对,还出现了严重的重复,根本刹不住。去官网查了下,是ollama对Qwen3的支持还有点问题。在这里插入图片描述

另外官方并没有给ollama的部署选项,或许侧面说明ollama不支持?

没办法,换vllm部署吧。用vllm+open-webui进行部署推理测试:

conda activate open-webui
pip install -U open-webui vllm torch transformers

虚拟环境的python版本为3.11

在这里插入图片描述

运行vllm

在运行的时候我的电脑提示模型的最大序列长度(max_seq_len=40960)超过了CPU KV缓存能存储的最大token数(37440),所以提前设置增加KV缓存空间​

export VLLM_CPU_KVCACHE_SPACE=8 #增加KV缓存空间​ 增加到8G
vllm serve /Users/shellon/model/Qwen/Qwen3-0__6b-Finetuning

看到8000端口,表示启动成功
在这里插入图片描述
然后再运行open-webui

export HF_ENDPOINT=https://www.modelscope.cn #将Hugging Face模型下载地址指向阿里云ModelScope镜像站
export ENABLE_OLLAMA_API=False #禁用Ollama API集成,强制使用OpenAI兼容的API接口
export OPENAI_API_BASE_URL=http://127.0.0.1:8000/v1 #指定本地vLLM服务的API地址
export DEFAULT_MODELS="/Users/shellon/model/Qwen/Qwen3-0__6b-Finetuning" #设置默认加载的模型路径,指向本地微调后的Qwen-6B模型
open-webui serve

一个个执行麻烦,写成脚本一键执行

启动成功:在这里插入图片描述
与微调后的模型对话:
在这里插入图片描述
关于微调的一些参数含义,可以参考https://atomgit.com/alibabaclouddocs/aliyun_acp_learning/blob/main/大模型ACP认证教程/p2_构造大模型问答系统/2_7_通过微调提升模型的准确度与效率.ipynb

以上是微调部署的全部内容,如有不足之处欢迎指正!

### 对Qwen 2.5-7B模型应用LoRA微调技术 #### 安装依赖库 为了能够顺利地对Qwen 2.5-7B模型进行LoRA微调,需要安装必要的Python包。这通常包括`transformers`、`peft`以及其他可能用到的数据处理工具。 ```bash pip install transformers peft datasets evaluate accelerate bitsandbytes ``` #### 加载预训练模型与分词器 加载Hugging Face上的Qwen 2.5-7B模型及其对应的分词器是开始微调的第一步。通过指定正确的模型名称可以轻松完成此操作[^1]。 ```python from transformers import AutoModelForCausalLM, AutoTokenizer model_name_or_path = "Qwen/Qwen-7B" tokenizer = AutoTokenizer.from_pretrained(model_name_or_path) model = AutoModelForCausalLM.from_pretrained( model_name_or_path, trust_remote_code=True ) ``` #### 配置初始化LoRA适配层 接下来,在原始模型基础上添加LoRA参数高效的调整能力。这里会涉及到设置一些超参数来控制LoRA的行为模式,比如秩大小(r)以及目标模块的选择等。 ```python from peft import LoraConfig, get_peft_model lora_config = LoraConfig( r=8, # LoRA attention dimension lora_alpha=32, target_modules=["q_proj", "v_proj"], lora_dropout=0.05, bias="none", ) model = get_peft_model(model, lora_config) ``` #### 准备数据集 对于特定任务(如对话系统),准备合适的数据集至关重要。如果是以中文法律问答为例,则应采用专门为此场景设计的数据集DISC-Law-SFT来进行训练[^2]。 ```python from datasets import load_dataset dataset = load_dataset('path_to_DISC_Law_SFT') ``` #### 训练配置与启动 定义好优化算法和其他训练选项之后就可以正式开启训练流程了。考虑到资源的有效利用,建议合理设定batch size、epoch数量等参数,考虑使用混合精度加速计算效率。 ```python import torch from transformers import Trainer, TrainingArguments training_args = TrainingArguments( output_dir="./results", per_device_train_batch_size=4, num_train_epochs=3, logging_steps=10, save_strategy="steps", evaluation_strategy="epoch", fp16=True, # Enable mixed precision training. ) trainer = Trainer( model=model, args=training_args, train_dataset=train_data, eval_dataset=val_data, tokenizer=tokenizer, ) trainer.train() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值