☰
Windows下用WSL2和LLamaFactory微调Qwen3-8B全流程指南
2026/10/23 5:17:12 网站建设 项目流程

经常有人问我:Windows 到底能不能跑大模型微调?尤其是手上只有一块消费级显卡,又不想为了训个模型专门折腾双系统。我的回答是:能,而且现在门槛已经比我最早折腾的时候低太多了。如果你想把 Qwen3(千问3)系列模型按自己的场景做点领域适配,WSL2 + LLamaFactory 这套组合是目前在 Windows 上最省心的路线,没有之一。

这篇文章我会完整记录一遍我用 WSL2 跑 LLamaFactory 微调 Qwen3-8B 的流程,覆盖环境搭建、模型拉取、数据准备、训练参数、常见报错、权重导出和效果评估。目标是让你照着做也能跑通,而不是只给一个“能跑”的演示。

先简单交代一下背景:我手里是一块 24GB 显存的消费级显卡,系统是 Windows 11,全程没有用多卡,也没有用昂贵的服务器。下面的每一步都是在这套环境下实测过的。如果你是 16GB 显存甚至 10GB 显存的卡,也能跑,只是要把量化方式、batch size 这些参数相应往小了调,后面我会逐个说明。

1. 为什么这套方案能落地:WSL2 解决了什么,LLamaFactory 又解决了什么

1.1 Windows 上做深度学习的核心痛点

很多人第一次在 Windows 上接触大模型微调时,最先遇到的就是环境问题:大部分开源框架、教程、依赖库默认在 Linux 下开发和测试,Windows 上要么装不上,要么装上了跑起来一堆奇奇怪怪的错误。还有一个更隐蔽的问题是文件路径、符号链接、权限模型这些底层差异,会让很多训练脚本在 Windows 上行为不一致。

WSL2 相当于在 Windows 里跑了一个带完整 Linux 内核的轻量虚拟机,但它和普通虚拟机最大的区别是:GPU 可以直通、文件系统可以和 Windows 互访、网络端口可以直接映射。也就是说,你在 WSL2 里做的事情,和在一台原生 Linux 机器上做的事情几乎一样,但不用离开 Windows 桌面环境。

我对比过几种方案:双系统切换成本太高,每次重启都很折磨;纯 Windows 跑 PyTorch 虽然现在也能跑,但不少周边工具和脚本还是 Linux 优先;Docker Desktop 又是一层嵌套,性能和文件共享都更折腾。所以如果你是单机、单卡、个人研究,WSL2 是性价比最高的选择。

1.2 LLamaFactory 为什么适合新手和快速验证

LLamaFactory 是一个开源的大模型微调框架,它把 transformers、peft、trl 这些底层库封装成了统一的训练入口,同时提供了一个 WebUI,你可以在浏览器里用鼠标完成模型选择、数据集选择、参数配置、训练启动和权重导出。

它最大的优势不是“功能最多”,而是“常用的微调方式都内置了”。LoRA、QLoRA、全参微调、冻结部分层微调,这些都是点一下的事。而且它对 Qwen3 系列的支持很及时,模型结构、对话模板这些都已经适配好了,你不需要自己去写 template 映射。

用 LoRA 微调大模型,可以类比成给一个已经很有经验的老员工做岗位培训:不用改变他整个人,只需要给一张“工作提示卡”,针对特定任务调整输出风格。这张“卡”就是低秩适配器,训练时只更新这张卡,不动底层的预训练权重,所以显存占用和训练时间都远小于全参微调。

1.3 什么情况下不建议用这套方案

WSL2 不是万能的。如果你需要多机多卡做大规模训练,或者要部署到生产环境,那还是老老实实用 Linux 服务器。如果你要训练的是 70B 级别以上的模型,WSL2 里单卡也很难撑住,那应该考虑云上多卡环境。

另外,WSL2 的 GPU 直通依赖 Windows 端驱动和 WSL 内核的配合,我自己用下来非常稳,但不排除个别旧版本组合会出现兼容问题。所以后面我会把驱动更新、内核更新这类前置条件一并讲清楚,避免你卡在第一步。

2. 从零部署 WSL2:Windows 里装出一个干净的 Linux 环境

2.1 开启 WSL 功能并确认版本

如果你用的是 Windows 11 或者比较新的 Windows 10,开启 WSL 只需要在管理员 PowerShell 里执行一条命令:

wsl --install

这条命令会自动启用 WSL 相关功能,安装默认的 Ubuntu 发行版,然后要求你重启系统。重启之后,第几次进入 Ubuntu 会让你设置用户名和密码,这个密码将来在 Linux 里执行 sudo 时会用,别设置得太随意。

装完后务必确认你用的是 WSL2 而不是 WSL1,因为 WSL1 是翻译层,不支持 GPU 直通。检查命令是:

wsl -l -v

如果显示某个发行版的 VERSION 不是 2,手动切换:

wsl --set-version Ubuntu-22.04 2

有个常见的坑:执行wsl --install后报错0x800701bc。这通常是 WSL 内核组件太旧,去 Windows 更新里检查一下系统更新,或者手动安装最新的 WSL 内核更新包就能解决。还有人会遇到0x80370102,这种基本是 BIOS 里没有启用虚拟化,去 BIOS 设置里把 Intel VT-x 或 AMD SVM 打开。

2.2 把发行版迁移到非系统盘

这里有一个经验分享:WSL 的默认虚拟磁盘文件放在 C 盘,而模型文件动辄十几 GB,训练中间结果也占空间。如果你 C 盘不够宽裕,我建议一开始就把发行版迁到 D 盘或者其他数据盘。

迁移步骤不复杂,先关闭 WSL:

wsl --shutdown wsl --export Ubuntu-22.04 D:\wsl-backup\ubuntu.tar wsl --unregister Ubuntu-22.04 wsl --import Ubuntu-22.04 D:\WSL\Ubuntu-22.04 D:\wsl-backup\ubuntu.tar

注意,导入之后默认用户会变成 root,如果你不想一直在 root 下操作,可以进入发行版执行:

echo -e "[user]\ndefault=你的用户名" | sudo tee /etc/wsl.conf

然后wsl --shutdown再重新进入,默认用户就恢复成你自己了。这套迁移方法我每次重装系统都会用,比重新配环境快得多。

2.3 在 WSL 里安装 Python 环境

进入 WSL 后,先换掉默认的软件源,否则 apt 下载软件包会慢到让你怀疑人生。这里我直接说结论:把/etc/apt/sources.list里的地址换成国内镜像站,然后执行sudo apt update && sudo apt upgrade,基础环境就差不多了。

接下来是 Python 环境。我不建议直接使用系统的 Python,因为不同项目依赖容易冲突。用 Miniconda 管理是最可控的方案:

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh

安装完成后创建一个 Python 3.10 的虚拟环境:

conda create -n llama python=3.10 -y conda activate llama

为什么要 Python 3.10?因为 PyTorch 和一些底层 CUDA 扩展目前对 3.10 的兼容组合最成熟,3.12 也能用,但遇到个别依赖编译失败的概率会高一些。为了少踩坑,我都是用 3.10。

2.4 确认 GPU 在 WSL 里可见

这是整个流程里最让人踏实的一步。只要 Windows 端装了 NVIDIA 显卡驱动,WSL2 里就能直接看到 GPU,不需要在 Linux 里再装一遍显卡驱动。在 WSL 终端里执行:

nvidia-smi

如果能看到显卡型号、驱动版本、显存容量,说明 GPU 直通没有问题。有人会问是否需要在 WSL 里单独安装 CUDA Toolkit,我的回答是:如果你只是跑 PyTorch 微调,通常不需要。PyTorch 的 pip 包自带 CUDA runtime,你只要保证显卡驱动足够新即可。

接下来安装 PyTorch。推荐直接安装稳定版:

pip install torch torchvision

安装完执行一个验证脚本:

python -c "import torch; print(torch.__version__); print(torch.cuda.is_available())"

如果输出True,说明 PyTorch 和 GPU 之间的链路已经打通,可以进入下一步了。

3. 安装 LLamaFactory 并拉取 Qwen3 模型

3.1 LLamaFactory 的安装方式

LLamaFactory 的安装很直接,从仓库克隆下来后以可编辑模式安装依赖:

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

如果你的网络拉 GitHub 比较费劲,可以找 Gitee 上的同步镜像仓库,克隆下来之后目录结构是一样的。安装过程会自动拉取 transformers、peft、trl、accelerate、datasets 这些依赖,耐心等几分钟就好。

装完可以看一眼项目结构,不需要全部理解,只需要知道几个关键入口:

  • src/webui.py:启动 WebUI 界面的入口
  • data/:默认放训练数据集和dataset_info.json注册文件的地方
  • examples/:官方给的各种训练脚本示例,特别适合抄参数

我一直强调,遇到参数不确定就看 examples 目录,里面每个配置文件都标注了适用场景,这比去翻源码高效得多。

3.2 用 ModelScope 下载 Qwen3 模型

模型文件我推荐从 ModelScope(魔搭)下载。原因只有一个:它是国内直连的模型仓库,下载速度快,不需要处理网络不稳定导致的中断问题。

在终端里执行:

pip install modelscope modelscope download --model Qwen/Qwen3-8B --local_dir ~/models/Qwen3-8B

如果你更习惯 Python 脚本方式,也可以这样写:

from modelscope import snapshot_download snapshot_download('Qwen/Qwen3-8B', local_dir='/home/你的用户名/models/Qwen3-8B')

下载完成后,进入模型目录检查关键文件是否完整:config.json、tokenizer.json、model-*.safetensors这些必须存在。很多人训练时报错“模型加载失败”,就是因为模型文件只下了一半或者目录路径写错。

顺便提一下,Qwen3-8B 是 dense 模型,单卡微调的友好程度很高。如果你显存只有 10~12GB,也可以考虑用 Qwen3-4B 或者量化后的 Qwen3-8B。

3.3 模型放在哪里,路径怎么管理

我建议在 WSL 里建一个统一的模型目录,比如/home/你的用户名/models/,把下载的模型原版和后面微调后导出的版本都放这里。千万别把模型放在/mnt/c/...这种 Windows 盘挂载路径下,虽然也能读,但跨文件系统读写性能很差,训练时会明显拖慢数据加载速度。

还有一个小坑:LLamaFactory 的 WebUI 里填模型路径时,要填 WSL 里的绝对路径,不是 Windows 路径。比如/home/user/models/Qwen3-8B,而不是C:\Users\...。这个错误我在帮朋友排查时见过好几次,一旦路径填错,界面会直接提示找不到模型。

4. 数据集准备:LLamaFactory 到底要什么样格式的数据

4.1 先搞定 Alpaca 格式

LLamaFactory 内置了多种数据集格式支持,其中最常用的是 Alpaca 格式,它由三个字段组成:

  • instruction:指令,也就是任务的描述
  • input:输入内容,如果指令已经包含完整信息,这个字段可以留空
  • output:期望模型输出的答案

下面是一条示例数据:

{ "instruction": "写一个Python函数,统计字符串中每个字符出现的次数", "input": "", "output": "def count_chars(s):\n result = {}\n for ch in s:\n result[ch] = result.get(ch, 0) + 1\n return result" }

在实际项目中,我更推荐把input用起来。比如指令是“请回答以下用户问题”,input放具体问题,output放标准回答。这样指令部分是固定的话术,数据和答案分离,数据组织会更清晰。

4.2 多轮对话场景用 ShareGPT 格式

如果你做的是客服助手、角色对话这类多轮场景,Alpaca 格式表达起来有点别扭,这时候可以用 ShareGPT 格式。它按conversations字段组织多轮对话,其中from表示发言人角色,human是用户,gpt是模型:

{ "conversations": [ { "from": "human", "value": "你们支持退货吗?" }, { "from": "gpt", "value": "支持,签收后7天内可以无理由退货。" }, { "from": "human", "value": "那运费谁承担?" }, { "from": "gpt", "value": "非质量问题退货,运费需要您自行承担。" } ] }

多轮数据对模型学会“上下文连贯对话”很有帮助,但数据构造工作量也更大。我的建议是:第一版先用单轮指令数据把流程跑通,第二版再引入多轮数据做优化。

4.3 从 CSV 转成训练集

很多人手里的业务数据是 Excel 或 CSV,不是 JSON。如果数据量不大,可以写一个简单的 Python 脚本做转换,核心思路就是逐行读取再逐条构造 JSON:

import csv import json data = [] with open('qa_pairs.csv', 'r', encoding='utf-8') as f: reader = csv.DictReader(f) for row in reader: data.append({ "instruction": "请根据业务知识回答用户问题,回答要简洁准确。", "input": row["question"], "output": row["answer"] }) with open('my_dataset.jsonl', 'w', encoding='utf-8') as f: for item in data: f.write(json.dumps(item, ensure_ascii=False) + '\n')

注意这里写的是 jsonl,每行一条 JSON 对象。LLamaFactory 对 json 和 jsonl 都支持,但 jsonl 在数据量大时加载更快,也方便增量追加。

4.4 在 dataset_info.json 里注册数据集

数据集文件做好之后,放进 LLamaFactory 的data目录,然后在data/dataset_info.json里注册一条记录,训练时才能在下拉列表里看到它。注册内容大概是这样的:

"my_first_dataset": { "file_name": "my_dataset.jsonl", "formatting": "alpaca", "columns": { "prompt": "instruction", "query": "input", "response": "output" }, "tags": { "instruction": "instruction", "response": "output" } }

不同版本的 LLamaFactory 对dataset_info.json字段定义略有差异,如果你安装的是较新版本,注册格式可能更简化。遇到格式不兼容导致的报错,优先打开data/README.md看官方说明,这是文档最全的地方。

4.5 数据量多少合适,质量怎么把关

很多新手的误区是一上来就想准备几万条数据。实际上,对于领域适配型微调,几百条到两三千条高质量数据就能看到明显效果。Qwen3 本身预训练能力很强,你需要的不是教它通用知识,而是告诉它你的场景下什么是标准答案。

数据质量的优先级永远高于数量。我在整理数据时会做这几件事:

  • 去掉重复和高度相似的条目,防止模型过拟合到某几种话术
  • 统一答案的语气、格式、长度,避免同一个问题两种风格
  • 检查有没有明显事实错误、历史遗留内容、敏感信息
  • 把超长文本拆短,一般单条数据控制在 512 token 以内比较合适

5. 开始微调:WebUI 和命令行两种方式,关键参数逐个拆解

5.1 启动 WebUI,用鼠标完成训练配置

LLamaFactory 的 WebUI 是 Gradio 界面。在项目根目录执行:

python src/webui.py

启动日志里会显示一个本地地址,WSL2 会自动把端口映射到 Windows,所以不用做任何额外配置,直接在 Windows 浏览器打开http://localhost:7860就能看到界面。

首次打开时,先不要急着点训练。在界面的模型名称下拉框里,直接输入你的模型绝对路径,比如/home/user/models/Qwen3-8B,然后确认它读出了模型信息和对话模板。再选择“微调方法”,一般选lora或qlora。如果显存只有 10GB 左右,就选qlora,它会用 4bit 量化加载模型,显存占用低很多。

然后选数据集,下拉里找到刚才注册的名称,比如my_first_dataset。接下来就是改参数了。

5.2 关键训练参数到底怎么定

我直接给一套适合 Qwen3-8B 的起步参数组合:

参数推荐值说明
学习率1e-4LoRA/QLoRA 常用范围是 5e-5 到 2e-4
LoRA 秩32过低影响表达能力,过高增加显存开销
训练轮数3数据量小可以降到 2,数据量大可以升到 5
最大序列长度1024显存不足时优先降到 512
批大小2根据显存调整,可配合梯度累积
梯度累积步数8等效于把批大小扩大 8 倍

这里重点解释两个参数。第一个是学习率,LoRA 微调本质是在预训练权重上叠加低秩增量,学习率太大容易让模型“忘了”原来的能力,太小又训不动,1e-4 是一个安全起点。第二个是最大序列长度,这个参数直接影响显存,因为注意力机制的计算量和显存占用是随序列长度近似平方增长的,从 2048 降到 1024,显存压力能下降一大截。

对于 24GB 显存,用lora+bf16训 Qwen3-8B,per_device_train_batch_size=2、gradient_accumulation_steps=8是稳的。如果是 16GB 显存,建议直接切到qlora,或者把最大序列长度降到 512,批大小降到 1。

5.3 你用 WebUI 点一下开始,背后发生了什么

点击训练按钮后,你不需要盯着终端,但最好理解后台做的事:LLamaFactory 会先把数据集加载进来,按对话模板转成 token 序列,然后构建 LoRA 适配器,只更新 q、k、v 以及 FFN 层对应的低秩矩阵。训练过程不支持断点续跑到“任意位置”,但会自动保存 checkpoint,你可以随时用最新的 checkpoint 做推理测试。

WebUI 里还有一个“预览”功能,可以在训练前查看某条数据经过 tokenizer 之后的实际样子,看到[INST]这类模板标记是否正确包裹。这一步强烈建议做,因为很多“模型回答风格不对”的问题,根源就是模板没匹配上。

5.4 命令行方式,适合批量实验和复现

如果你更习惯命令行,或者想把训练命令保存成脚本跑批量实验,新版 LLamaFactory 的统一入口是llamafactory-cli。下面是一份可复现的训练命令:

llamafactory-cli train \ --model_name_or_path /home/user/models/Qwen3-8B \ --dataset my_first_dataset \ --template qwen \ --finetuning_type lora \ --lora_target all \ --output_dir output/qwen3-8b-lora \ --per_device_train_batch_size 2 \ --gradient_accumulation_steps 8 \ --learning_rate 1e-4 \ --num_train_epochs 3.0 \ --lr_scheduler_type cosine \ --cutoff_len 1024 \ --logging_steps 10 \ --save_steps 500 \ --plot_loss \ --bf16

这里简单说下每行参数的含义:--template qwen指定使用 Qwen 系列对话模板;--lora_target all表示把所有注意力层和全连接层都挂上 LoRA,这种写法比手动列模块名更省心;--plot_loss会在训练结束时生成 loss 曲线图;--bf16启用 bf16 混合精度,对 30 系以上显卡是标准选择。

如果你的显卡是 10 系或更老,不支持 bf16,就把--bf16换成--fp16,显存占用会略高一点,但也能跑。

5.5 训练过程中的可观察信号

训练开始后,终端会周期性打印 loss 数值和当前学习率。此时你可以用nvidia-smi观察显存占用和 GPU 利用率。如果 GPU 利用率一直很高、显存稳定,说明数据加载没有瓶颈。如果 GPU 利用率在 0% 和 100% 之间剧烈摆动,很可能是数据加载太慢,多半是因为数据文件放在了/mnt/c这种跨文件系统路径下。

loss 曲线方面,初期 loss 快速下降是正常的,后面逐渐趋于平缓也是正常的。我最担心的是 loss 不降反而升,这种情况通常是学习率过大或者数据集里有大量冲突答案。学会观察这些信号,比记任何参数表都重要。

6. 训练中的典型报错与排查方法

6.1 显存不足 OOM:最常见的拦路虎

如果训练刚开始就报CUDA out of memory,不要慌,按这个顺序排查:

  • 降低批大小到 1,这是最直接的减显存手段
  • 把最大序列长度从 1024 降到 512
  • 切换微调方法到qlora,4bit 量化能把模型权重占用降到原来的四分之一左右

还有一个隐藏的显存消耗点:训练过程中会保存中间激活值,序列越长、批越大,激活值越占显存。所以有时候降低序列长度比降低批大小更有效。如果你既想保持批大小又想省显存,可以用梯度累积,它不会减少显存占用,但能等效扩大批大小,让训练更稳定。

6.2 bitsandbytes 相关报错

使用 QLoRA 时必须依赖 bitsandbytes 这个库。WSL2 环境下偶尔会报缺少libcudnn或libcublas相关错误,这是因为 bitsandbytes 的一些组件需要 CUDA 底层库。解决方法是确保 PyTorch、CUDA 驱动、bitsandbytes 三者来自同一套 CUDA 版本组合。

实操中最省事的方式是:先按pip install -e ".[torch]"正常安装,确认版本能对上;如果报错,就单独重新安装一个与当前 PyTorch 匹配的新版 bitsandbytes:

pip install --upgrade bitsandbytes

如果还不行,检查nvidia-smi显示的 CUDA 版本,更新 Windows 端显卡驱动到较新版本,几乎所有底层库兼容问题都能通过驱动更新解决。

6.3 数据集和 tokenizer 相关的报错

训练启动阶段最常见的报错是 JSON 解析失败或字段缺失,这类错误信息通常会直接指出第几行数据有问题。用文本编辑器打开 jsonl 文件,定位到那一条,检查有没有多余的逗号、引号没闭合、字段名拼错。

另一个容易忽略的问题是 tokenizer 报“找不到某些词”。如果你用的是 Qwen3 原版 tokenizer,基本不会遇到这种情况。如果是从别处拟造的、和模型不匹配的 tokenizer 文件,训练才进行几步就会崩。我的原则是:永远用模型官方发布的 tokenizer,不要混用其他模型的 tokenizer。

6.4 训练完模型像没训一样,怎么办

这是最让人挫败的情况:loss 明明降了,推理时模型还是不用你教的话术。

优先检查三件事。第一,模板是否匹配。模型加载时有没有正确识别成 Qwen 模板,如果模板错误,指令内容可能没有进入对话上下文,模型根本看不到你的任务描述。可以在 WebUI 的“预览”功能里看一条数据。第二,数据集有没有真被加载进去。有时候注册名称写错了,LLamaFactory 会静默用默认数据集,你训了半天,训的是别的东西。第三,checkpoint 是否加载正确。推理测试时,在 WebUI 的 Chat 选项卡里要明确选择你训练出的 checkpoint,而不是底座原模型。

还有一个容易被忽略的因素:数据太单一。如果几百条数据的 instruction 都是同一种句式,LoRA 的泛化能力很有限,换个说法就失效。所以构造数据时,指令本身的表达方式也要刻意做出多样性。

6.5 导出合并 LoRA 权重

训练生成的 checkpoint 默认只是 LoRA 适配器,不是完整模型。使用前需要把它合并回原模型权重。

在 WebUI 的 Export 选项卡里,填上模型路径、适配器路径和导出目录,点导出即可。合并后目录里会有完整的config.json和model-*.safetensors,这个目录就是一份可以独立使用的完整模型。命令行导出方式也支持,但我个人用 WebUI 更多,一是图形界面不容易填错路径,二是导出过程能看到明确进度。

合并时注意:原模型路径必须和你训练时加载的是同一个模型,不要拿不同尺寸或不同量化版本的模型去合并,否则会报维度不匹配。

7. 微调效果验证:别只看 loss,要对比真实输出

7.1 用同一条指令对比微调前后

训练完成不等于效果达标。我的验证方法很朴素:准备一组测试问题,问题要和你训练数据分布相似但没有完全相同的条目,然后分别问原模型和微调模型,把输出并排放在一起看。

比如我为某个开发者问答场景微调过 Qwen3,测试时问“Python 里怎么安全地读取用户上传的文件”,微调前的回答比较泛,讲了一些通用原则;微调后的回答会严格遵循我准备的标准格式,先给代码、再给注意事项,而且话术更贴近我的数据风格。这种差异肉眼可见。

如果测试时发现模型输出还是偏泛化,大概率是数据量不够或者指令分布太窄,不要盲目加大训练轮数,优先补充更多样化的数据。

7.2 做一个简单的批量评估

想要更系统地评估,可以用 LLamaFactory 自带的评估功能,也可以自己准备一个评测集,把模型输出逐条打分。最实用的指标是“格式正确率”和“关键信息正确率”,不需要搞什么复杂指标。

我建议你维护一个单独的测试集,训练一版就测一次,记录得分。我早期踩过的坑是:为了追求低 loss,训练轮数拉满,结果模型在测试集上的表现反而变差,因为过拟合了。记录历史版本得分,能帮你及时发现问题并回退到更优的 checkpoint。

7.3 把微调后的模型落地到本地服务

验证没问题后,就可以部署了。如果你只需要本地调用,最常见的做法是转成 Ollama 能跑的模型。流程大致是:先用 WebUI 合并导出完整模型,然后用 llama.cpp 的转换脚本把 HuggingFace 格式转成 GGUF,再通过 Modelfile 导入 Ollama。

转换命令类似:

python convert_hf_to_gguf.py /path/to/exported_model --outfile qwen3-8b-custom.gguf --outtype q8_0

如果你不是只追求本地体验,想用 OpenAI 兼容接口给别人提供服务,可以把导出的完整模型直接用 vLLM 加载,这样也支持高并发推理。我个人日常用 Ollama 比较多,因为它部署简单、启动快,模型文件放好就能直接跑。

7.4 这套流程后续还能怎么扩展

第一轮微调跑通之后,可以做的事情还有很多:

  • 扩充多轮对话数据,让模型在更长上下文里保持角色连贯性
  • 把训练数据按难易程度分层,先用简单数据跑稳定,再用难数据做第二轮
  • 接入 RAG 流程,把检索到的知识片段和微调后的模型能力结合起来
  • 如果业务需要更强的推理能力,可以在显存允许范围内换 Qwen3 更大尺寸模型

每次迭代都要记录数据和参数的变化。我自己的习惯是给每一个 checkpoint 起一个能反映数据版本的名字,比如qwen3-8b-lora-qa-v2。否则半个月后回来,你根本分不清这个模型是用哪套数据训出来的。

8. 一点个人体会与补充建议

这套组合我实际用了很久,最大的感受是:环境搭建的难度已经很低了,真正拉开差距的地方是数据质量和参数判断。很多人卡在“不知道模型为什么答非所问”,其实多数时候不是代码问题,而是数据集构造得太随意。

最后分享两个小技巧。第一,每次训练前把 WebUI 预览里的一条数据仔细看一遍,确保指令、输入、输出之间没有格式错位,这能省下很多排查时间。第二,不要轻易加大学习率或训练轮数来追求更低的 loss,模型在测试集上的真实输出比训练 loss 更有参考价值。

如果你手头正好有 Qwen3 的模型文件,也有一块哪怕只有 10GB 显存的显卡,不用再犹豫,直接把 WSL2 和 LLamaFactory 装起来跑一轮。这套流程跑通之后,后续换数据、换模型、换任务都只是改配置的事。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询