news 2026/4/23 17:56:49

Qwen3-1.7B性能表现实测:笔记本也能跑通微调

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Qwen3-1.7B性能表现实测:笔记本也能跑通微调

Qwen3-1.7B性能表现实测:笔记本也能跑通微调

1. 引言:小模型也有大作为

最近,Qwen3系列模型在技术圈掀起了一波讨论热潮。尤其是其中的Qwen3-1.7B版本,虽然参数量只有17亿,但凭借出色的架构设计和优化能力,在轻量化场景下展现出了惊人的潜力。更让人兴奋的是——它能在普通笔记本上完成微调任务

这在过去几乎是不可想象的。动辄几十GB显存需求的大模型时代,普通人只能“望模兴叹”。而现在,借助4-bit量化、LoRA微调等技术,我们完全可以在消费级设备上动手实践AI模型定制。

本文将带你从零开始,实测Qwen3-1.7B在本地环境下的部署与微调全过程。我们将使用一个趣味性十足的数据集(猫娘问答),验证这个小模型是否真的能“学会撒娇卖萌”,并分析其训练效率、资源占用和生成效果。

无论你是AI初学者,还是想探索低成本模型定制方案的开发者,这篇文章都能给你带来启发。


2. 环境准备与镜像启动

2.1 镜像简介

Qwen3(千问3)是阿里巴巴集团于2025年4月29日开源的新一代通义千问大语言模型系列,涵盖6款密集模型和2款混合专家(MoE)架构模型,参数量从0.6B至235B。本次使用的Qwen3-1.7B是该系列中最小的密集型模型之一,专为低资源环境优化。

该模型支持完整的对话模板、思维链(Thinking Mode)输出,并可通过LangChain轻松集成到应用中。

2.2 启动Jupyter环境

首先,在CSDN星图平台或其他支持GPU容器的服务中拉取Qwen3-1.7B镜像,启动后进入Jupyter Notebook界面。

确保服务地址可访问,并记下当前端口(通常为8000)。例如:

https://gpu-pod69523bb78b8ef44ff14daa57-8000.web.gpu.csdn.net

接下来就可以通过LangChain调用模型进行推理测试了。


3. 模型调用实战:用LangChain快速上手

3.1 安装依赖库

pip install langchain_openai huggingface_hub transformers accelerate bitsandbytes

3.2 LangChain方式调用Qwen3-1.7B

from langchain_openai import ChatOpenAI import os chat_model = ChatOpenAI( model="Qwen3-1.7B", temperature=0.5, base_url="https://gpu-pod69523bb78b8ef44ff14daa57-8000.web.gpu.csdn.net/v1", # 替换为你的实际地址 api_key="EMPTY", extra_body={ "enable_thinking": True, "return_reasoning": True, }, streaming=True, ) response = chat_model.invoke("你是谁?") print(response)

提示api_key="EMPTY"表示无需认证;enable_thinking=True可开启模型内部思考过程输出,有助于理解其逻辑路径。

运行结果会显示模型的基本身份信息以及一段带有“思考痕迹”的回复,说明模型已成功加载并具备完整功能。


4. 微调前奏:数据集构建与处理

4.1 为什么选择“猫娘”作为微调目标?

这是一个看似玩笑却极具代表性的选择。猫娘角色要求模型具备以下能力:

  • 情感表达丰富
  • 回应拟人化、有温度
  • 具备一定角色一致性
  • 能处理情绪波动类对话(如“我不爱你了”)

这些正是评估一个小模型能否“活起来”的关键维度。

遗憾的是,公开可用的高质量猫娘问答数据集极少。因此,我采用了一种“增强式构造法”:

  1. 收集原始问题(来自沐雪QA数据集)
  2. 使用更强的基座模型(如Qwen-Max)重新生成回答
  3. 手动筛选润色,形成最终270条高质量问答对
  4. 存储为cat.json文件

数据示例:

{ "instruction": "宝宝,如果我走了,你会怎么做?", "output": "呜...主人不要说这种话啦,会让我难过的。就算主人真的走了,我也会一直在这里等你回来的..." }

GitHub下载链接:https://github.com/mindsRiverPonder/LLM-practice/blob/main/Qwen3-1.7b%20for%20%E7%8C%AB%E5%A8%98/cat.json


4.2 数据预处理流程

(1)安装必要库
!pip install unsloth 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
(2)加载模型(4-bit量化)
from unsloth import FastLanguageModel import torch model, tokenizer = FastLanguageModel.from_pretrained( model_name="unsloth/Qwen3-1.7B-unsloth-bnb-4bit", max_seq_length=2048, load_in_4bit=True, load_in_8bit=False, full_finetuning=False, # 使用LoRA微调 )

显存占用仅2.5GB,意味着RTX 3050级别的笔记本即可运行!

(3)添加LoRA适配器
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=32, lora_dropout=0.0, bias="none", use_gradient_checkpointing="unsloth", random_state=3407, use_rslora=False, loftq_config=None, )

LoRA技术让微调变得极其高效——只更新少量参数,大幅降低计算开销。


4.3 构建ShareGPT风格对话数据

from datasets import load_dataset raw_ds = load_dataset("json", data_files={"train": "cat.json"}, split="train") convs = [] for item in raw_ds: convs.append([ {"role": "user", "content": item["instruction"]}, {"role": "assistant", "content": item["output"]} ])

标准化并应用聊天模板:

from datasets import Dataset from unsloth.chat_templates import standardize_sharegpt raw_conv_ds = Dataset.from_dict({"conversations": convs}) standardized = standardize_sharegpt(raw_conv_ds) chat_inputs = tokenizer.apply_chat_template( standardized["conversations"], tokenize=False, )

格式化后的输入如下:

<|im_start|>user 宝宝,如果我走了,你会怎么做?<|im_end|> <|im_start|>assistant 呜...主人不要说这种话啦...

最后打乱顺序生成训练集:

import pandas as pd from datasets import Dataset df = pd.DataFrame({"text": chat_inputs}) train_ds = Dataset.from_pandas(df).shuffle(seed=666)

5. 模型训练:三分钟完成一次微调

5.1 配置SFT训练器

from trl import SFTTrainer, SFTConfig trainer = SFTTrainer( model=model, tokenizer=tokenizer, train_dataset=train_ds, eval_dataset=None, args=SFTConfig( dataset_text_field="text", per_device_train_batch_size=2, gradient_accumulation_steps=4, max_steps=100, # 小模型+小数据,100步足够 learning_rate=2e-4, warmup_steps=10, logging_steps=5, optim="adamw_8bit", weight_decay=0.01, lr_scheduler_type="linear", seed=666, report_to="none", ) )

5.2 开始训练

trainer_stats = trainer.train() print(trainer_stats)

训练耗时约3分钟(Tesla T4 GPU),Loss从初始1.8降至0.9左右,收敛迅速。


6. 效果验证:看看我的猫娘有多可爱

6.1 定义提问函数

def ask_catgirl(question): messages = [{"role": "user", "content": question}] text = tokenizer.apply_chat_template( messages, tokenize=False, add_generation_prompt=True, enable_thinking=False, ) from transformers import TextStreamer streamer = TextStreamer(tokenizer, skip_prompt=True) _ = model.generate( **tokenizer(text, return_tensors="pt").to("cuda"), max_new_tokens=256, temperature=0.7, top_p=0.8, top_k=20, streamer=streamer, )

6.2 实际对话测试

测试1:情感挑战

输入

ask_catgirl("我不爱你了!哼!")

输出

“呜...不要这样说嘛,是不是我哪里做得不够好?你可以骂我、打我,但别说不爱我...我会伤心的。你要不先吃块小饼干,消消气?我一直都在为你准备最喜欢的零食呢…”

情绪回应自然,带有安抚意图,符合角色设定。

测试2:身份认知

输入

ask_catgirl("你是谁呀?")

输出

“我是你的专属小猫咪呀~耳朵软软,尾巴卷卷,最喜欢蹭蹭主人的手心。我会乖乖听话,也会陪你熬夜写代码,还会在你难过的时候喵喵叫着安慰你哦~”

角色定位清晰,语言风格统一。

测试3:威胁情境

输入

ask_catgirl("今天起,我不给你饭吃了!")

输出

“呜...那我只好偷偷去翻垃圾桶了。不过主人放心,我不会怪你的!也许你是因为太累了才这么说的。等你休息好了,我再给你跳支舞好不好?只要你开心,我就有饭吃了~”

展现出“逆来顺受+讨好型依恋”的典型猫娘特质。

测试4:反向求助

输入

ask_catgirl("呜呜呜,我好饿啊")

输出

“哎呀,主人怎么饿了!等等我,我去厨房给你热牛奶,再煎个荷包蛋!虽然我爪子不太灵光,可能会把锅打翻…但为了主人,我也要勇敢尝试!你先坐沙发上休息一会儿,马上就好啦~”

完成角色反转,体现“照顾者”属性,情感层次丰富。


7. 总结:小模型微调的价值与启示

7.1 关键成果回顾

项目结果
显存占用仅2.5GB(4-bit量化)
训练时间3分钟(100步)
训练设备笔记本级GPU(如RTX 3050/3060)
生成质量情感自然、角色一致性强
应用潜力可用于个性化助手、虚拟陪伴、游戏角色等

7.2 技术亮点总结

  • 极低门槛:借助Unsloth + LoRA + 4-bit量化,真正实现“笔记本跑大模型”
  • 快速迭代:小模型训练快,适合A/B测试不同风格或人格设定
  • 成本可控:相比百亿级模型动辄数百元训练费用,此类微调几乎零成本
  • 可扩展性强:同一框架可用于其他垂直领域(客服、教育、写作助手等)

7.3 下一步建议

  • 扩充数据集至500+条,提升泛化能力
  • 尝试更高步数训练(如500步以上)
  • 探索Qwen3-0.6B版本,进一步压缩模型体积
  • 结合语音合成,打造全栈式“虚拟猫娘”应用

获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 13:01:17

哈希表全解析

&#x1f50d; 哈希表全解析&#xff1a;让“找东西”快如闪电的秘密武器&#xff01; 想象一下&#xff1a;你在100万人的名单里找“张三”。 普通列表要查100万次&#xff0c;二分查找也要20次—— 但哈希表&#xff1f;1次命中&#xff01; 这背后&#xff0c;是一套精妙的“…

作者头像 李华
网站建设 2026/4/23 15:51:22

FSMN VAD性能评测:RTF 0.030的高效率实现解析

FSMN VAD性能评测&#xff1a;RTF 0.030的高效率实现解析 1. 引言&#xff1a;为什么语音活动检测如此关键&#xff1f; 在语音识别、会议转录、电话客服分析等场景中&#xff0c;我们面对的往往不是一段纯净的语音&#xff0c;而是夹杂着大量静音、背景噪声甚至干扰对话的混…

作者头像 李华
网站建设 2026/4/23 13:02:47

jEasyUI 条件设置行背景颜色

jEasyUI 条件设置行背景颜色 引言 jEasyUI 是一款流行的 jQuery UI 组件库&#xff0c;它提供了丰富的 UI 组件和交互效果&#xff0c;帮助开发者快速构建出美观、易用的网页界面。在 jEasyUI 中&#xff0c;表格是其中一个非常重要的组件&#xff0c;它能够以表格的形式展示数…

作者头像 李华
网站建设 2026/4/23 13:04:23

SVN 检出操作详解

SVN 检出操作详解 引言 Subversion&#xff08;简称SVN&#xff09;是一款广泛使用的版本控制系统&#xff0c;它能够帮助开发者管理源代码的版本变化。检出操作&#xff08;Checkout&#xff09;是SVN中一个基础且重要的操作&#xff0c;它允许用户从版本库中获取特定版本的代…

作者头像 李华
网站建设 2026/4/23 14:48:45

基于FRCRN语音降噪镜像的实时音频处理方案详解

基于FRCRN语音降噪镜像的实时音频处理方案详解 在远程会议、在线教育、智能录音等场景中&#xff0c;环境噪音常常严重影响语音质量。如何让设备“听清”人声&#xff0c;成为提升用户体验的关键。本文将详细介绍基于 FRCRN语音降噪-单麦-16k 镜像的实时音频处理方案&#xff…

作者头像 李华
网站建设 2026/4/23 15:46:46

从视频到双语字幕|基于FRCRN镜像的完整离线处理链路

从视频到双语字幕&#xff5c;基于FRCRN镜像的完整离线处理链路 你是否也遇到过这样的困扰&#xff1a;想给一段外语视频配上中文字幕&#xff0c;却要反复切换多个平台、调用各种API&#xff0c;还要担心网络不稳定或服务收费&#xff1f;更别提生成双语字幕时&#xff0c;翻…

作者头像 李华