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

【AGI】Qwen3模型高效微调

【AGI】Qwen3模型高效微调

      • (1)Unsloth安装部署
      • (2)vLLM安装部署流程
        • 2.1 vLLM安装部署
        • 2.2 Qwen3模型权重下载
        • 2.3 借助vllm进行模型调用
      • (3)EvalScope安装部署流程
        • 3.1 EvalScope安装流程
        • 3.2 借助EvalScope进行压力测试
        • 3.3 进行模型性能评估
      • (4)wandb安装与注册
        • 4.1 wandb基本说明
        • 4.2 wandb注册与使用

为确保企业级模型微调全流程的可复现性,本内容需预先配置以下工具环境:

核心依赖

  • Unsloth [必需]
    高效参数微调框架,提供优化的训练流程与资源管理,必须安装作为基础执行环境。

可选组件(完整流程扩展)

  1. vLLM
    高性能模型推理框架,用于微调后模型的部署验证。支持替代方案:ollama等同类调度框架。

  2. EvalScope
    标准化评估框架,提供量化指标对比微调前后模型性能。人工评估可作为备选方案。

  3. Weights & Biases (wandb)
    训练过程监控平台,实现:

    • 损失函数曲线可视化
    • 梯度变化追踪
    • 硬件资源利用率监控
    • 实验数据版本化管理

安装建议

  • 最小化配置:仅安装Unsloth即可完成核心微调流程
  • 完整配置:需集成全部组件以实现端到端的训练-监控-评估闭环

请根据实验目标选择相应配置方案,建议提前完成环境预配置以保证课程顺利进行。

(1)Unsloth安装部署

​ 由于要安装多个项目,因此建议创建虚拟环境以避免依赖冲突。这里首先为Unsloth创建虚拟环境:

conda create --name unsloth python=3.11
conda init
source ~/.bashrc
conda activate unsloth

然后在虚拟环境中安装Jupyter及Jupyter Kernel:

conda install jupyterlab
conda install ipykernel
python -m ipykernel install --user --name unsloth --display-name "Python unsloth"

然后使用如下命令安装Unsloth:

pip install --upgrade --force-reinstall --no-cache-dir unsloth unsloth_zoo

在这里插入图片描述

安装完成后在任意Jupyter中选择unsloth kernel,即可进入对应的虚拟环境进行代码编写:

在这里插入图片描述

可以输入如下代码进行测试

from unsloth import FastLanguageModel
import torch

在这里插入图片描述

(2)vLLM安装部署流程

2.1 vLLM安装部署

​ 接下来继续安装vLLM,若是在AutoDL上租赁的服务器,则可以在默认环境中进行安装,其他服务器上建议创建虚拟环境进行安装。虚拟环境创建流程如下(AutoDL不用):

conda create --name vllm python=3.11
conda init
source ~/.bashrc
conda activate vllm

vllm主要提供后台的模型调用服务,因此不用安装Jupyter Kernel。

​ 接下来继续进行vllm安装:

pip install bitsandbytes>=0.45.3
pip install --upgrade vllm

注:bitsandbytes是为了适配4bit动态量化模型调用的库

2.2 Qwen3模型权重下载

接下来进行模型权重下载,更多Qwen3模型全尺寸模型本地ollama、vllm、llama.cpp调用及部署方法,详见公开课:https://www.bilibili.com/video/BV1qVG9z4ELJ/ 及赋范大模型技术社区文档。

在这里插入图片描述

而要下载4bit动态量化的Unsloth模型,则可以在魔搭社区上搜索Qwen3-unsloth-bnb-4bit

在这里插入图片描述

选择模型下载即可。需要注意的是,有时我们会遇到这两种不同的模型,其中带有Unsloth标志的是动态量化模型,而不带unsloth则是普通量化模型,需要注意区分。

在这里插入图片描述

注,目前最新版vLLM已支持Unsloth动态量化模型,目前Unsloth团队已完成dense模型优化,MoE模型兼容vLLM版目前还未上线。即目前vLLM只支持unsloth/Qwen3-1.7B-unsloth-bnb-4bitnsloth/Qwen3-4B-unsloth-bnb-4bitunsloth/Qwen3-8B-unsloth-bnb-4bitunsloth/Qwen3-14B-unsloth-bnb-4bitunsloth/Qwen3-32B-unsloth-bnb-4bit四款模型。

然后安装魔搭社区工具并进行模型下载,以Qwen3-32B-unsloth-bnb-4bit为例(注,不同模型均可完成微调流程,大家根据自己硬件配置选择即可):

https://www.modelscope.cn/models/unsloth/Qwen3-32B-unsloth-bnb-4bit/files

在这里插入图片描述

使用如下命令进行下载:

pip install modelscope
modelscope download --model unsloth/Qwen3-32B-unsloth-bnb-4bit --local_dir ./Qwen3-32B-unsloth-bnb-4bit

在这里插入图片描述

下载后模型权重如图所示:

在这里插入图片描述

在这里插入图片描述

2.3 借助vllm进行模型调用

​ 下载完模型权重后,接下来即可测试模型调用流程了,首先开启vllm服务,需要注意的是,Unsloth的动态量化模型只支持单卡调用,最低22G显存即可运行。因此这里是设置的单卡运行vLLM:

# cd /root/autodl-tmp/Qwen3
vllm serve ./Qwen3-32B-unsloth-bnb-4bit --enable-auto-tool-choice --tool-call-parser hermes

此外,更多关于vLLM调用qwen3参数说明,详见:https://qwen.readthedocs.io/en/latest/deployment/vllm.html#

开启后执行效果如下:

在这里插入图片描述

实际显存占用如下:

在这里插入图片描述

注,vllm会占用显卡的80%以上显存。实际调用32B 4bit动态量化模型时,最低22G显存即可调用,最低37G显存即可微调。

接下来则可在代码环境中进行调用测试:

from openai import OpenAIopenai_api_key = "EMPTY"
openai_api_base = "http://localhost:8000/v1"client = OpenAI(api_key=openai_api_key,base_url=openai_api_base,
)messages = [{"role": "user", "content": "你好,好久不见!"}
]response = client.chat.completions.create(model="./Qwen3-32B-unsloth-bnb-4bit",messages=messages,
)print(response.choices[0].message.content)

在这里插入图片描述

(3)EvalScope安装部署流程

3.1 EvalScope安装流程

​ 接下来进行EvalScope安装部署,项目官网:https://github.com/modelscope/evalscope

在这里插入图片描述

为了避免和Unsloth的依赖产生冲突,EvalScope需要再单独创建虚拟环境:

conda create --name evalscope python=3.11
conda init
source ~/.bashrc
conda activate evalscopeconda install jupyterlab
conda install ipykernel
python -m ipykernel install --user --name evalscope --display-name "Python evalscope"

然后安装对应的库

pip install evalscope                # 安装 Native backend (默认)
# 额外选项
pip install 'evalscope[opencompass]'   # 安装 OpenCompass backend
pip install 'evalscope[vlmeval]'       # 安装 VLMEvalKit backend
pip install 'evalscope[rag]'           # 安装 RAGEval backend
pip install 'evalscope[perf]'          # 安装 模型压测模块 依赖
pip install 'evalscope[app]'           # 安装 可视化 相关依赖# 或可以直接输入all,安装全部模块
# pip install 'evalscope[all]'           # 安装所有 backends (Native, OpenCompass, VLMEvalKit, RAGEval)

源码安装:

git clone https://github.com/modelscope/evalscope.git
cd evalscope/pip install omegaconfpip install -e .                  # 安装 Native backend
# 额外选项
pip install -e '.[opencompass]'   # 安装 OpenCompass backend
pip install -e '.[vlmeval]'       # 安装 VLMEvalKit backend
pip install -e '.[rag]'           # 安装 RAGEval backend
pip install -e '.[perf]'          # 安装 模型压测模块 依赖
pip install -e '.[app]'           # 安装 可视化 相关依赖
pip install -e '.[all]'           # 安装所有 backends (Native, OpenCompass, VLMEvalKit, RAGEval)
3.2 借助EvalScope进行压力测试

​ 紧接着,我们就可以尝试进行模型的压力测试,可以测试当前4bit动态量化模型在单卡H800上,由vllm调度框架驱动时的实际性能表现:

evalscope perf \--url "http://127.0.0.1:8000/v1/chat/completions" \--parallel 5 \--model ./Qwen3-32B-unsloth-bnb-4bit \--number 20 \--api openai \--dataset openqa \--stream

在这里插入图片描述

在这里插入图片描述

输出结果保存在:outputs/20250505_164404/Qwen3-32B-unsloth-bnb-4bit:

在这里插入图片描述

然后即可在summary.json中查看压测的benchmark

{"Time taken for tests (s)": 632.0044,"Number of concurrency": 5,"Total requests": 20,"Succeed requests": 20,"Failed requests": 0,"Output token throughput (tok/s)": 45.5503,"Total token throughput (tok/s)": 46.4759,"Request throughput (req/s)": 0.0316,"Average latency (s)": 142.0679,"Average time to first token (s)": 0.2191,"Average time per output token (s)": 0.0994,"Average input tokens per request": 29.25,"Average output tokens per request": 1439.4,"Average package latency (s)": 0.0985,"Average package per request": 1439.4,"Expected number of requests": 20,"Result DB path": "outputs/20250505_164404/Qwen3-32B-unsloth-bnb-4bit/benchmark_data.db"
}

Benchmarking summary:

在这里插入图片描述

Percentile results:

在这里插入图片描述

压测结果解释:

📊 压测核心指标解读

指标项含义解读
Time taken for tests (s)总测试耗时632 秒,表示本次压测运行了约 10 分钟。
Number of concurrency并发数使用了 5 个并发请求同时测试,表明模型支持一定程度的并发推理能力。
Total requests总请求数总共向模型发起了 20 次推理请求。
Succeed requests / Failed requests成功与失败数全部成功(20/20),说明模型稳定性良好。

🚀 吞吐性能

指标项含义解读
Output token throughput (tok/s)每秒生成 token 数45.55 tok/s,生成速度在 4bit 动态量化大模型中属于正常偏低水平。
Total token throughput (tok/s)总吞吐(包括输入+输出)46.48 tok/s,说明输入 token 占比较小,推理主要时间在输出部分。
Request throughput (req/s)每秒处理请求数0.0316 req/s,即大约 31 秒才完成一次请求(见下方 latency)。适用于高吞吐非交互式任务。

⏱️ 延迟分析

指标项含义解读
Average latency (s)单次请求平均耗时142 秒,即每个请求耗时超过 2 分钟,说明单次生成量很大。
Average time to first token (s)首 token 延迟0.2191 秒,响应启动速度非常快,体现了量化模型的推理启动效率。
Average time per output token (s)每个生成 token 的平均耗时0.0994 秒,略高,意味着模型速度偏慢,可能与显存带宽或激活参数有关。

📦 Token 分布与批处理

指标项含义解读
Average input tokens per request每次输入平均 token 数29.25,说明输入 prompt 很短。
Average output tokens per request每次输出平均 token 数1439.4,生成文本非常长,这解释了高 latency 与低 req/s。
Average package latency (s)批处理延迟0.0985 秒,表示模型每次接受请求到开始处理之间延迟极短。
Average package per request每次请求中 token 包含数同为 1439.4,表明未使用分片或 chunk 输出,模型按完整长度生成。
  • 优点:
    • 模型非常稳定(20 次请求 100% 成功)
    • 首 token 响应迅速(0.21 秒),表明部署结构良好
    • 适合长文本生成类任务
  • 缺点:
    • 整体吞吐较低(45 tok/s),属于 32B 大模型的正常范围
    • 单次推理耗时较长(每次平均 142 秒),适用于非实时场景。
3.3 进行模型性能评估

​ 接下来即可进一步进行模型性能评估。这里我们先尝试对其进行初始状态下的性能评估,然后等微调结束后,再进行新一轮的评估,进而对比微调前后模型性能变化情况。这里需要在Jupyter中选择evalscope kernel:

在这里插入图片描述

然后运行如下代码:

【可选】数据集构造代码:

from evalscope.collections import CollectionSchema, DatasetInfo, WeightedSampler
from evalscope.utils.io_utils import dump_jsonl_dataschema = CollectionSchema(name='Qwen3', datasets=[CollectionSchema(name='English', datasets=[DatasetInfo(name='mmlu_pro', weight=1, task_type='exam', tags=['en'], args={'few_shot_num': 0}),DatasetInfo(name='mmlu_redux', weight=1, task_type='exam', tags=['en'], args={'few_shot_num': 0}),DatasetInfo(name='ifeval', weight=1, task_type='instruction', tags=['en'], args={'few_shot_num': 0}),]),CollectionSchema(name='Chinese', datasets=[DatasetInfo(name='ceval', weight=1, task_type='exam', tags=['zh'], args={'few_shot_num': 0}),DatasetInfo(name='iquiz', weight=1, task_type='exam', tags=['zh'], args={'few_shot_num': 0}),]),CollectionSchema(name='Code', datasets=[DatasetInfo(name='live_code_bench', weight=1, task_type='code', tags=['en'], args={'few_shot_num': 0, 'subset_list': ['v5_v6'], 'extra_params': {'start_date': '2025-01-01', 'end_date': '2025-04-30'}}),]),CollectionSchema(name='Math&Science', datasets=[DatasetInfo(name='math_500', weight=1, task_type='math', tags=['en'], args={'few_shot_num': 0}),DatasetInfo(name='aime24', weight=1, task_type='math', tags=['en'], args={'few_shot_num': 0}),DatasetInfo(name='aime25', weight=1, task_type='math', tags=['en'], args={'few_shot_num': 0}),DatasetInfo(name='gpqa', weight=1, task_type='knowledge', tags=['en'], args={'subset_list': ['gpqa_diamond'], 'few_shot_num': 0})])
])# get the mixed data
mixed_data = WeightedSampler(schema).sample(100000000)  # set a large number to ensure all datasets are sampled
# dump the mixed data to a jsonl file
dump_jsonl_data(mixed_data, 'outputs/qwen3_test.jsonl')

创建好的完整数据集已上传至课件网盘:

在这里插入图片描述

在这里插入图片描述

评测代码:

from evalscope import TaskConfig, run_task
task_cfg = TaskConfig(model='./Qwen3-32B-unsloth-bnb-4bit',api_url='http://127.0.0.1:8000/v1/chat/completions',eval_type='service',datasets=['data_collection',],dataset_args={'data_collection': {'dataset_id': 'modelscope/EvalScope-Qwen3-Test','filters': {'remove_until': '</think>'}  # 过滤掉思考的内容}},eval_batch_size=128,generation_config={'max_tokens': 30000,  # 最大生成token数,建议设置为较大值避免输出截断'temperature': 0.6,  # 采样温度 (qwen 报告推荐值)'top_p': 0.95,  # top-p采样 (qwen 报告推荐值)'top_k': 20,  # top-k采样 (qwen 报告推荐值)'n': 1,  # 每个请求产生的回复数量},timeout=60000,  # 超时时间stream=True,  # 是否使用流式输出limit=2000,  # 设置为2000条数据进行测试
)run_task(task_cfg=task_cfg)

这里采用了EvalScope专门为Qwen3准备的modelscope/EvalScope-Qwen3-Test数据集进行评测,会围绕模型的推理、指令跟随、代理能力和多语言支持方面能力进行测试,该数据包含mmlu_proifevallive_code_benchmath_500aime24等各著名评估数据集。

数据集地址:https://modelscope.cn/datasets/modelscope/EvalScope-Qwen3-Test/summary

在这里插入图片描述

评测运行结果如下:

在这里插入图片描述

在这里插入图片描述

此时后台显示如下:

在这里插入图片描述

查看模型能力评测结果

evalscope app

在这里插入图片描述

对评测结果进行可视化:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

(4)wandb安装与注册

4.1 wandb基本说明

在大规模模型训练中,我们往往需要监控和分析大量的训练数据,而WandB可以帮助我们实现这一目标。它提供了以下几个重要的功能:

实时可视化:WandB可以实时展示训练过程中关键指标的变化,如损失函数、学习率、训练时间等。通过这些可视化数据,我们能够直观地了解模型的训练进展,快速发现训练中的异常或瓶颈。

自动记录与日志管理:WandB会自动记录每次实验的参数、代码、输出结果,确保实验结果的可追溯性。无论是超参数的设置,还是模型的架构调整,WandB都能够帮助我们完整保留实验记录,方便后期对比与调优。

支持中断与恢复训练:在长时间的预训练任务中,系统中断或需要暂停是常见的情况。通过WandB的checkpoint功能,我们可以随时恢复训练,从上次中断的地方继续进行,避免数据和时间的浪费。

多实验对比:当我们尝试不同的模型配置或超参数时,WandB允许我们在多个实验之间轻松进行对比分析,帮助我们选择最优的模型配置。

团队协作:WandB还支持团队协作,多个成员可以共同查看实验结果,协同调试模型。这对研究和项目开发中团队的合作非常有帮助。

4.2 wandb注册与使用

wandb官网:https://wandb.ai/site

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

然后即可在令行中输入如下代码安装wandb:

pip install wandb

在这里插入图片描述

接下来在unsloth微调前,我们即可设置wandb进行微调记录,并可在对应网站上观察到训练过程如下:

在这里插入图片描述

相关文章:

  • 234. Palindrome Linked List
  • ISOLAR软件生成报错处理(四)
  • 常见路由协议解析:从原理到应用场景
  • react-native的token认证流程
  • 运营商地址和ip属地一样吗?怎么样更改ip属地地址
  • 输配电行业国产PLM转型方案:南通禛华电气的云PLM研发转型
  • STM32通过KEIL pack包轻松移植LVGL,并学会使用GUI guider
  • 【AI论文】具身智能体与个性化:探索记忆利用以实现个性化辅助
  • 【教程】服务器如何防止GET/SYN洪泛攻击
  • 【c++】【数据结构】红黑树
  • Ansible模块——Ansible配置文件!
  • ansible中的inventory.ini 文件详解
  • Ansible模块——Ansible的安装!
  • 每日C++ 5.28dddd
  • 微信小程序返回上一页监听
  • 【产品小白】京东外卖为何未独立成 APP
  • ToolsSet之:Json格式化
  • 【深度学习-pytorch篇】1. Pytorch矩阵操作与DataSet创建
  • Python后端开发实战:从0到1搭建高可用API服务
  • Linux命令行命令自动补全
  • java做的网站怎么发布/seo好学吗入门怎么学
  • 平度疫情最新数据消息/东莞seo建站哪家好
  • 宁波网站开发定制/策划推广活动方案
  • wordpress聊天室/seo快速排名百度首页
  • html用表格来做网站布局/中国网站排名查询
  • 广西企业响应式网站建设设计/网站诊断分析