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

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星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

http://www.jsqmd.com/news/282601/

相关文章:

  • YOLO26镜像避坑指南:常见问题与解决方案汇总
  • Qwen3-Embedding-4B故障恢复:高可用架构部署实战
  • 从0开始学大模型微调:Unsloth环境搭建全记录
  • 本地部署中文ITN工具|科哥开发的FST ITN-ZH镜像实测
  • 从0开始学YOLO26:官方镜像手把手教学
  • Qwen2.5-0.5B多场景测试:办公/教育/客服应用实测
  • YOLOv13官方引用方式,学术研究必备
  • 数字孪生与数字样机的技术基础:建模与仿真
  • 工厂模式:现代软件开发的核心设计原则
  • YOLOv10镜像扩展玩法:自定义数据集训练全流程
  • AngularJS 简介
  • Element Plus—— Element Plus 组件库集成与定制
  • 电商文案实战:用Qwen3-4B一键生成高转化商品描述
  • 语音识别前必做!FSMN-VAD模型高效预处理完整流程
  • 读人本智能产品设计6原则09链接(上)
  • YOLOv10官方镜像参数量对比:轻量化的秘密揭晓
  • GPEN多场景应用实战:证件照/婚礼摄影/档案修复全流程
  • 路径错误不再怕,YOLOv9镜像目录结构全解析
  • Emotion2Vec+ Large保姆级教程:从音频上传到结果导出完整步骤
  • 亲测有效!PyTorch通用开发环境适配RTX40系显卡
  • Qwen3-0.6B如何实现流式输出?Streaming参数设置详解
  • 惊艳!SAM 3打造的智能视频分割案例展示
  • 如何高效去除语音噪音?FRCRN-单麦-16k镜像一键推理方案详解
  • jEasyUI 条件设置行背景颜色
  • Java 泛型
  • Open-AutoGLM信息查询实测:12306车次一键获取
  • SVN 检出操作详解
  • SenseVoiceSmall性能对比:多语言转录中GPU利用率提升50%的秘诀
  • 支持实时录音与多格式导出|FunASR语音识别镜像实战
  • UI-TARS-desktop性能优化:让AI助手响应速度提升3倍