Qwen-3 正在刷新性能基准!
Qwen3 一经发布便迅速成为开发者的首选,其在编程、数学和综合能力等核心评估中的基准测试的成绩斐然,该模型不仅超越 DeepSeek-R1、o1、o3-mini、Grok-3 和 Gemini-2.5-Pro 等主流模型,其混合专家模型 Qwen3-30B-A3B 更以仅 10% 的激活参数量胜过 Qwen-32B,甚至小如 Qwen3-4B 的版本也能媲美 Qwen2.5-72B-Instruct 的表现。
当众人争相在 ChatGPT 和 DeepSeek 上构建应用时,聪明的开发者已悄然发现 Qwen-3 的微调能力——这颗隐藏的宝石能将通用AI转化为您的专属数字专家。
Qwen3 已超越众多顶尖大语言模型,现在轮到您大显身手——立即学习微调技巧!通过本文,您将学会如何针对特定场景微调最新 Qwen-3 模型,无论您是刚入门的AI新手还是经验丰富的工程师,本文都能为您提供实用洞见。
🚀 让我们用 Python 和 Unsloth 解锁其惊人潜力,打造专属项目吧!
本文将带您使用 Python 和 Unsloth 微调 Qwen-3 模型,重点讲解如何通过自定义数据集微调,并将模型合并后托管至 Hugging Face Hub。
虽然微调通常计算成本高昂,但我们将通过 Google Colab 的免费 T4 GPU(15GB 显存)实现普惠教学。
一、先决条件与设置
让我们来梳理一下微调 Qwen-3 所需的准备工作。
1.1 Python 库与框架
以下是微调 Qwen-3 模型所需的 Python 库与框架列表:
-
unsloth
加速微调过程的利器,可将 Llama-3、Mistral、Gemma 和 Qwen 等大语言模型的微调速度提升 2 倍,内存消耗减少 70%,且精度无损!
-
torch
深度学习基础框架,是 PyTorch 深度学习的基石,它提供强大的张量计算库(类似 NumPy),并具备 GPU 加速功能(该特性对大型语言模型处理至关重要)。
-
transformers
Hugging Face 的NLP神器,是一个功能强大且流行的开源自然语言处理(NLP)库,它提供易用的接口以访问各类前沿预训练模型。由于预训练模型是任何微调任务的基础,该软件包可帮助用户便捷获取已训练模型。
-
trl
专门用于 Transformer 模型强化学习(Reinforcement Learning,简称 RL)的工具,它构建于 Hugging Face transformers 库之上,通过整合其优势使 Transformer 的强化学习更易用高效。
1.2 计算要求
大语言模型(LLM)微调是一种使模型响应更具结构化和领域特定性的技术,整个过程无需执行完整的(参数)训练。
然而,由于所有可训练参数与实际 LLM 都需要存储在 GPU 的 vRAM(虚拟内存) 中,且 LLM 的庞大规模会对此形成重大阻碍,对于大多数普通计算机硬件而言,较大规模 LLM 的微调过程仍不可行。
因此,在本文中我们将对量化版本的 Qwen-3(含 80 亿参数)进行微调,该 LLM 需要约 8-12 GB 的显存,为使所有学习者都能使用,我们将采用 [Google Colab]
二、数据准备策略
要实现大语言模型(LLM)的微调,我们需要结构化且任务特定的数据,数据准备可以考虑多样化的策略,包括从社交媒体平台、网站、书籍或研究论文中进行数据爬取。
针对 Qwen-3 模型的微调,我们将采用 推理数据集 和 通用对话交互数据集 混合数据集策略,通过这种策略,我们将使 LLM 具备增强的推理能力和优化的提示理解能力。
两个数据集均将从开源的 Hugging Face Hub 平台加载,具体使用以下资源:
-
unsloth/OpenMathReasoning-mini
-
mlabonne/FineTome-100k
其中,unsloth/OpenMathReasoning-mini 将提升模型的数学推理与问题解决能力,而 mlabonne/FineTome-100k 则用于增强通用对话能力。
三、Python 实现
3.1 环境配置
在 Google Colab 中执行:
!pip install --no-deps bitsandbytes accelerate xformers==0.0.29.post3 peft trl==0.15.2 triton cut_cross_entropy unsloth_zoo
!pip install sentencepiece protobuf datasets huggingface_hub hf_transfer
!pip install --no-deps unsloth
!pip install -U datasets
3.2 初始化 LLM 模型及其分词器
我们将使用 unsloth 软件包加载预训练模型,该工具不仅能加速下载过程,还提供多项实用技术以简化 LLM 微调流程。
模型与分词器的初始化代码如下:
from unsloth import FastLanguageModel
import torch
model, tokenizer = FastLanguageModel.from_pretrained(
model_name = "unsloth/Qwen3-8B-unsloth-bnb-4bit",
max_seq_length = 2048, # 上下文长度
load_in_4bit = True, # 4bit 量化显著降低内存占用
load_in_8bit = False, # 精度略高但内存占用翻倍
full_finetuning = False, # 当前启用参数高效微调
# token = "<YOUR_HF_TOKEN>", # 使用授权模型时需提供
)
-
预训练模型加载:通过unsloth提供的 FastModel.from_pretrained() 方法,从 Hugging Face Hub 加载 Qwen3-8B 预训练模型
-
模型参数:model_name 指定为 unsloth/Qwen3-8B-unsloth-bnb-4bit,这是含 80 亿参数的 Qwen-3 量化版本,能有效满足需求
-
序列长度控制:通过 max_seq_length 设置模型的 2048 token 输入序列处理能力,该参数直接影响模型性能、内存占用及推理精度
-
量化配置:
-
load_in_4bit=True 启用 4 位精度量化以降低显存需求
-
load_in_8bit=False 保持默认关闭状态(仅当 GPU 性能充足时可设为 True 以提升精度)
-
-
微调模式:full_finetuning=False 启用参数高效微调(Parameter-Efficient Fine-Tuning,简称 PEFT),避免全参数更新
3.3 添加 LoRA 适配器
我们将为预训练的 Qwen-3 模型添加 LoRA 矩阵,以优化模型响应微调过程,借助 unsloth 工具,整个配置仅需数行代码即可完成。
具体实现代码如下:
model = FastLanguageModel.get_peft_model(
model,
r = 32,
target_modules = ["q_proj", "k_proj", "v_proj", "o_proj",
"gate_proj", "up_proj", "down_proj",],
lora_alpha = 64,
lora_dropout = 0,
bias = "none",
use_gradient_checkpointing = "unsloth", # True 或 "unsloth"(适用于超长上下文)
random_state = 3433,
)
-
PEFT 应用:通过 unsloth 的 FastModel.get_peft_model() 方法,对已初始化的 Qwen-3 模型实施参数高效微调(Parameter-Efficient Fine-Tuning,简称 PEFT),实现高效适配
-
矩阵维度控制:
-
r(秩)参数控制 LoRA 适配矩阵的维度,数值越大精度越高但可能过拟合
-
lora_alpha 作为缩放因子,通常设置为等于或双倍于 r 值
-
-
稳定性配置:
-
lora_dropout=0 表示禁用随机失活
-
bias="none" 表示不微调偏置参数
-
-
可复现性:random_state=3433 相当于模型指纹,确保微调过程结果可复现
3.4 数据准备
在完成预训练 Qwen-3 模型的 LoRA 适配器配置后,我们可着手构建用于模型训练的数据结构。
我们将使用以下两个数据集进行微调:
-
unsloth/OpenMathReasoning-mini(数学推理增强)
-
mlabonne/FineTome-100k(通用对话优化)
通过 Hugging Face 加载数据集的代码如下:
from datasets import load_dataset
reasoning_dataset = load_dataset("unsloth/OpenMathReasoning-mini", split = "cot")
non_reasoning_dataset = load_dataset("mlabonne/FineTome-100k", split = "train")
在此环节,数据集 unsloth/OpenMathReasoning-mini 将专门用于增强大语言模型(LLM)的推理能力,为此我们仅需使用其 COT(Chain-Of-Thought,思维链)子集数据。
接下来需对数据结构进行标准化处理,使其符合基于聊天的微调格式要求,包括处理"用户(user)"和"助手(assistant)"等角色定义,此步骤还能为数据集中的查询生成对话式输入,从而确保实际查询的传递方式与大语言模型的交互模式保持对齐。
-
角色定义:严格区分 user(用户提问)与 assistant(模型应答)角色
-
思维链优化:COT(Chain-Of-Thought)数据专门提升模型推理能力
-
格式标准化:通过模板引擎确保不同数据集遵循相同对话结构
推理对话数据集处理
def generate_conversation(examples):
problems = examples["problem"]
solutions = examples["generated_solution"]
conversations = []
for problem, solution in zip(problems, solutions):
conversations.append([
{"role" : "user", "content" : problem},
{"role" : "assistant", "content" : solution},
])
return { "conversations": conversations, }
reasoning_conversations = tokenizer.apply_chat_template(
reasoning_dataset.map(generate_conversation, batched = True)["conversations"],
tokenize = False, # 仅格式化不进行分词
)
generate_conversation函数将数据集中的独立的数学问题(problem)与生成解(solution)转化为包含user-assistant角色的对话格式,每个对话条目包含:
-
user 角色:数学问题
-
assistant 角色:生成解决方案
非推理对话数据集处理
from unsloth.chat_templates import standardize_sharegpt
dataset = standardize_sharegpt(non_reasoning_dataset) # 标准化 ShareGPT 格式
non_reasoning_conversations = tokenizer.apply_chat_template(
dataset["conversations"],
tokenize = False,
)
使用 UnSloth 的 standardize_sharegpt 函数确保对话格式统一。
3.5 平衡对话与推理比率
在完成数据集准备后,通常即可启动模型训练,但需特别关注模型的 对话-推理比率(Chat-to-Reason Ratio)。
比率影响分析:
-
高对话比率:优先提升对话流畅性与常识知识
-
高推理比率:侧重增强逻辑推导与问题解决能力
平衡策略:
两者均衡配置可构建通用型模型,在自然对话与复杂任务处理中均表现优异。
本文以构建对话型模型为目标,设定 70% 对话数据 与 30% 推理数据 的配比,实现代码如下:
import pandas as pd
# 设定对话数据占比
chat_percentage = 0.7
# 根据比例采样非推理数据集
non_reasoning_subset = pd.Series(non_reasoning_conversations)
non_reasoning_subset = non_reasoning_subset.sample(
int(len(reasoning_conversations) * (1.0 - chat_percentage)),
random_state = 2407, # 随机种子确保可复现性
)
最后,我们将两个数据集合并起来:
# 合并推理与非推理数据集
data = pd.concat([
pd.Series(reasoning_conversations),
pd.Series(non_reasoning_subset)
])
data.name = "text"
# 转换为 Hugging Face 数据集格式
from datasets import Dataset
combined_dataset = Dataset.from_pandas(pd.DataFrame(data))
combined_dataset = combined_dataset.shuffle(seed = 3407) # 混洗增强数据多样性
关键技术说明:
-
随机采样控制:通过 random_state 参数确保每次采样结果一致
-
数据混洗策略:shuffle(seed=3407) 在保持可复现性的同时提升训练效果
-
内存优化:使用 Pandas 的 Series 结构进行高效数据操作
3.6 模型训练
在完成结构化数据集准备和 LoRA 适配器配置后,我们可正式启动模型训练流程。
训练参数配置:
模型训练流程的第一步需初始化影响训练过程与模型精度的关键超参数,使用 trl 库的 SFTTrainer(监督式微调训练器)来进行参数设置:
from trl import SFTTrainer, SFTConfig
trainer = SFTTrainer(
model = model,
tokenizer = tokenizer,
train_dataset = combined_dataset, # 结构化数据集
eval_dataset = None, # 未设置验证集
args = SFTConfig(
dataset_text_field = "text", # 数据集训练字段
per_device_train_batch_size = 2, # 每设备训练批次大小
gradient_accumulation_steps = 4, # 梯度累积步骤
warmup_steps = 5, # 学习率预热步数
max_steps = 30, # 最大训练步数
learning_rate = 2e-4, # 学习率
logging_steps = 1, # 日志记录频率(步)
optim = "adamw_8bit", # 8 位 AdamW 优化器
weight_decay = 0.01, # 权重衰减(正则化系数)
lr_scheduler_type = "linear", # 线性学习率调度器
seed = 3407, # 随机种子
report_to = "none", # 禁用外部日志平台
),
)
-
训练器选择:trl 库的 SFTTrainer 专为定制数据集微调大语言模型设计,支持梯度累积、混合精度优化等技术,适用于指令调优、对话生成等场景
-
参数配置:
-
gradient_accumulation_steps=4:每 4 步执行一次梯度更新,突破单卡显存限制
-
adamw_8bit:采用 8 位量化优化器降低显存占用
-
max_steps=30:控制总训练步数以平衡训练效率与过拟合风险
-
启动训练:
trainer_stats = trainer.train() # 执行训练流程
训练过程中将在内核输出各步骤的损失值,如下所示:
3.7 使用微调模型进行推理
完成模型训练后,我们需对微调后的模型进行推理以评估其响应质量,本模型支持两种推理模式:
禁用思考模式推理
执行模型推理(即不启用思考模式生成输出)的代码如下:
messages = [
{"role" : "user", "content" : "解方程式: (x + 2)^2 = 0."}
]
text = tokenizer.apply_chat_template(
messages,
tokenize = False,
add_generation_prompt = True, # 生成时必须添加
enable_thinking = False, # 禁用思考模式
)
from transformers import TextStreamer
_ = model.generate(
**tokenizer(text, return_tensors = "pt").to("cuda"),
max_new_tokens = 256, # 可增加该值以生成更长输出
temperature = 0.7, top_p = 0.8, top_k = 20,
streamer = TextStreamer(tokenizer, skip_prompt = True),
)
-
通过 apply_chat_template 将消息转换为 Qwen3 聊天格式
-
enable_thinking=False 关闭模型思维链生成
-
设置 max_new_tokens=256 限制输出长度
推理输出示例:
通过上述实验可见,当我们禁用模型的思考功能时,其直接输出解题结果的特性完全符合预期!
禁用思考模式的利弊分析:
✅ 优势
-
降低计算资源需求
-
提升输出生成速度
⚠️ 局限性
-
无法处理复杂问题(如多步数学推导)
-
缺失推理过程可解释性
-
对开放域问题适应性下降
因此,该模式仅适用于简单查询场景,当涉及复杂任务时仍需启用思考模式以获取完整推理链(如思维链/COT生成)。
启用思考模式推理
当需要模型展示推理过程时,需启用思考模式:
messages = [
{"role" : "user", "content" : "解方程式: (x + 3)^2 = 0."}
]
text = tokenizer.apply_chat_template(
messages,
tokenize = False,
add_generation_prompt = True, # 生成时必须添加
enable_thinking = True, # 启用思考模式
)
from transformers import TextStreamer
_ = model.generate(
**tokenizer(text, return_tensors = "pt").to("cuda"),
max_new_tokens = 1024, # 根据问题复杂度调整
temperature = 0.6, top_p = 0.95, top_k = 20,
streamer = TextStreamer(tokenizer, skip_prompt = True),
)
模式差异:
-
enable_thinking=True 激活思维链生成
-
max_new_tokens=1024 允许更详细输出
-
温度值调低至 0.6 增强确定性
推理输出示例:
在这里,请特别留意,额外输出的<think>标签内容,我们可以看到模型在回答这样一个简单的问题时思考所达到的深度。
3.8 保存微调模型
至此已完成模型微调全流程,现在可将微调后的模型保存以备后续推理或复用。
模型保存操作:
需要同时保存分词器与模型,以下是完整保存(合并版)微调模型至本地系统的操作方式:
model.save_pretrained_merged("Qwen3-16bit-My-Finetuned-Merged",
tokenizer,
save_method = "merged_16bit") # 16位合并保存模式
-
模型名称 Qwen3-16bit-My-Finetuned-Merged 你可以设置你自己喜欢的名字
-
merged_16bit:16位精度合并保存(模型体积减少40%)
推送至Hugging Face Hub:
model.push_to_hub_merged("Qwen3-16bit-My-Finetuned-Merged",
tokenizer,
save_method = "merged_16bit",
token = "hf_...") # 替换为您的访问令牌
此操作会将最终微调模型及其 LoRA 矩阵完整保存至 Hugging Face Hub
四、总结
最后,将本文实验的核心要点总结如下:
-
大语言模型本质
大语言模型(LLM)本质上是深度学习架构(如 Transformer)的卓越实现,通过海量文本数据训练获得语言理解与生成能力。
-
Qwen3 竞争优势
Qwen3 在多项基准测试中表现优异,超越 DeepSeek-R1、o1、Gemini-2.5-pro 等主流大语言模型,确立其行业领先地位。
-
微调核心价值
通过特定任务数据对 LLM 进行微调,可定制化模型响应模式,提升领域任务精度,实现专业化输出。
-
对话模板作用
chat_template 作为多轮对话分词框架,确保模型精准区分系统指令、用户输入和助手响应。
-
关键技术栈
主要使用 unsloth、torch、transformers、trl四大工具链,并详细解析了 LLM 微调的计算资源需求。
-
训练流程优化
构建结构化数据集后,采用 监督式微调训练器(SFTTrainer) 完成模型训练。
好了!通过掌握这些技术,您已具备打造专属AI专家的能力,现在就开始您的模型定制之旅吧!
一、大模型风口已至:月薪30K+的AI岗正在批量诞生
2025年大模型应用呈现爆发式增长,根据工信部最新数据:
国内大模型相关岗位缺口达47万
初级工程师平均薪资28K
70%企业存在"能用模型不会调优"的痛点
真实案例:某二本机械专业学员,通过4个月系统学习,成功拿到某AI医疗公司大模型优化岗offer,薪资直接翻3倍!
二、如何学习大模型 AI ?
🔥AI取代的不是人类,而是不会用AI的人!麦肯锡最新报告显示:掌握AI工具的从业者生产效率提升47%,薪资溢价达34%!🚀
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
1️⃣ 提示词工程:把ChatGPT从玩具变成生产工具
2️⃣ RAG系统:让大模型精准输出行业知识
3️⃣ 智能体开发:用AutoGPT打造24小时数字员工
📦熬了三个大夜整理的《AI进化工具包》送你:
✔️ 大厂内部LLM落地手册(含58个真实案例)
✔️ 提示词设计模板库(覆盖12大应用场景)
✔️ 私藏学习路径图(0基础到项目实战仅需90天)
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
* 大模型 AI 能干什么?
* 大模型是怎样获得「智能」的?
* 用好 AI 的核心心法
* 大模型应用业务架构
* 大模型应用技术架构
* 代码示例:向 GPT-3.5 灌入新知识
* 提示工程的意义和核心思想
* Prompt 典型构成
* 指令调优方法论
* 思维链和思维树
* Prompt 攻击和防范
* …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
* 为什么要做 RAG
* 搭建一个简单的 ChatPDF
* 检索的基础概念
* 什么是向量表示(Embeddings)
* 向量数据库与向量检索
* 基于向量检索的 RAG
* 搭建 RAG 系统的扩展知识
* 混合检索与 RAG-Fusion 简介
* 向量模型本地部署
* …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
* 为什么要做 RAG
* 什么是模型
* 什么是模型训练
* 求解器 & 损失函数简介
* 小实验2:手写一个简单的神经网络并训练它
* 什么是训练/预训练/微调/轻量化微调
* Transformer结构简介
* 轻量化微调
* 实验数据集的构建
* …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
* 硬件选型
* 带你了解全球大模型
* 使用国产大模型服务
* 搭建 OpenAI 代理
* 热身:基于阿里云 PAI 部署 Stable Diffusion
* 在本地计算机运行大模型
* 大模型的私有化部署
* 基于 vLLM 部署大模型
* 案例:如何优雅地在阿里云私有部署开源大模型
* 部署一套开源 LLM 项目
* 内容安全
* 互联网信息服务算法备案
* …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】