前言
本文介绍了模型微调最基础的部分,目的是带读者体验简单微调的全过程。如果有一定基础,请移步至提高篇。
文章结构
-
- 1.1 大模型的本质是什么
- 1.2 怎么获得优质参数
- 1.3 什么是微调
- 1.4 什么时候该使用微调
- 1.5 怎么确定微调的大模型学得好不好
- 1.6 微调的流程是什么
- 1.7 我需要使用哪些工具
-
- 2.1 安装 CUDA
- 2.2 安装 Ubuntu(可选)
- 2.3 安装 LLaMA-Factory
- 2.4 疑难杂症
-
- 3.1 启动 Web 界面
- 3.2 选择合适的模型
- 3.3 准备数据集
- 3.4 开始你的第一次微调吧!
第一部分:LLM微调的基本概念
1.1 大模型的本质是什么
一句话总结:模型的本质是函数,核心是参数,而训练是为了获得更好用的参数。
大模型的地基是由 Transformer 这一自注意力机制神经网络架构组成。大模型每吐出一个词,都是根据当前的词计算下一个词的概率,而这个计算过程就是由函数完成的。
函数里最重要的就是参数,参数决定模型算出来的结果准不准确。换而言之,模型的知识和能力都存储在参数里。模型智不智能,很重要的一点就是看参数好不好。
所谓模型训练,就是一个寻找优质参数的过程。
1.2 怎么获得优质参数
大模型的参数与我们平时解方程不一样,没有固定的公式,而是一步一步计算出来的。
计算过程如下:

-
随机初始化参数
-
使用初始化的参数展开计算 —— 输入训练数据,模型预测下一个词的概率。比如下一个词是”故事”,但模型认为”故事”一词概率为 0,这就错了,记录下这个错误,这个错误就叫损失
-
使用记录下来的损失进行求导 —— 求导之后得到梯度(求导很复杂,不用管)
-
根据梯度下降算法公式进行参数更新:
新参数 = 旧参数 - 学习率 × 梯度 -
用新参数再次输入训练数据,重复执行这个过程,对参数的值不断调整
这就是优化参数的全过程。
1.3 什么是微调
模型微调是指在预训练模型的基础上,针对特定任务进行进一步训练的过程。
预训练模型已经学习了大量通用语言知识,但在具体场景可能表现不佳。通过微调,我们可以让模型更好地理解和适应特定领域的语言特征和表达方式。
打个比方:
预训练的大模型就像一个马上参加高考的优秀学生,你给他一道高考数学题,他能很快给出答案。但如果你给出一道数学奥赛题,他就有点力不从心了。
这时,微调就像在做题之前对他进行奥赛辅导,使他成为一名 MOer,再让他做奥赛题,效果就会好得多。
总结:拿一个已经训练好的模型(预训练模型),在它的基础上继续训练,这就是微调。
1.4 什么时候该使用微调
一般来说有两种情况:
情况一:提示词不够用
在某些场景中,你竭尽所能地调整提示词,可模型输出结果还是不尽人意。比如工具调用场景 —— 要让模型在用户提问中准确判断要使用哪个工具,纯靠提示词需要高性能的模型,而且场景不能太复杂。再比如垂直领域提问,效果同样不好。
情况二:计算机资源不够
当提示词够用,但要写得很长、要给出很多案例、还要使用较大的模型时,会有两个问题:一是资源消耗巨大,二是推理速度变慢。
补充:解决这两种问题,不只有微调这一种方案,还有一种叫做 RAG(检索增强生成)的方案。如果说微调是考试前给学生辅导,那么 RAG 就是给学生一本书让他考试时翻着看 —— 简单来说就是外挂知识库。这不是本文的重点,简单了解即可。
1.5 怎么确定微调的大模型学得好不好
在反复训练中,当我们觉得模型学会的时候,就可以停下来了。要知道多轮学习中模型学得怎么样,最简单的方式就是监控前文提到的损失(Loss)。
- 如果损失没有下降,说明模型没学会,需要继续学
- 损失下降了,不一定是学会了 —— 就像学生上完课写作业,作业会写不代表知识学懂了,要通过考试才知道
我们准备另一份不重复的数据集,叫验证集。把验证集丢给模型:
| 训练集损失 | 验证集损失 | 结论 |
|---|---|---|
| 低 | 高 | 过拟合 —— 模型在照葫芦画瓢,没有真正理解 |
| 低 | 低 | 学得还不错 |
判断的指标远远不止这一个,之后会讲到。
1.6 微调的流程是什么
微调概括来说就是:基座模型 + 训练数据 + 微调方法
1. 基座模型
要微调模型,肯定得有个模型,选择的这个模型就是基座模型。
2. 训练数据
这是最最重要的环节。你准备的数据质量决定了模型的上限,花再多心思也不过分。业界有句话:你输入的是垃圾,得到的也是垃圾。一定要保证质量。
3. 微调方法
微调方法总结来看分三种:
| 方法 | 说明 | 推荐程度 |
|---|---|---|
| 全局微调 | 对所有参数进行调整(如 10B 参数全调一遍) | ⭐⭐ |
| 冻结微调 | 把底层参数冻结,只调整靠近输出层的那几层 | ⭐ |
| LoRA 微调 | 不调整原参数,单独构建一个 LoRA 参数块并只调整它。原参数 + LoRA 参数块 = 完整参数 | ⭐⭐⭐ 最推荐 |
推荐初学者只掌握 LoRA 微调,只需调整少量参数即可达到很好的效果。
1.7 我需要使用什么工具
本文采用 LLaMA-Factory 这个开源工具进行模型微调,自带 Web 图形化界面,好用易上手。
LLaMA-Factory 前置依赖:
- PyTorch:深度学习框架
- CUDA:NVIDIA GPU 的并行计算平台,能让 LLaMA-Factory 调用 GPU 进行计算(纯用 CPU 太慢了)
- Python 及相关库:推荐使用 Python 3.10 版本
- NVIDIA 驱动:无需多言
本文给出本地部署方案,部分步骤需要科学上网。使用服务器跑模型放到提高篇讲。
第二部分:系统环境配置
众所周知,搞 AI 的人 90% 的时间在配置环境,写代码的时间只占 10%。遇到问题直接去看 疑难杂症,还是无法解决可以自行询问大模型。
2.1 安装 CUDA
首先需要一张 NVIDIA 的、支持 CUDA 的显卡。想知道自己的显卡是否支持,请自行询问大模型。
- 打开 NVIDIA 官网,下载 NVIDIA APP,安装后更新驱动到最新版本
- 在官网搜索 CUDA 并安装,推荐安装 CUDA 13.0
自行下载:CUDA Toolkit Archive
2.2 安装 Ubuntu(可选)
对于本地部署,有两种方案:
| 方案 | 说明 |
|---|---|
| Windows 本地部署 | 直接使用电脑自带的 Windows 系统 |
| WSL + Ubuntu | 使用 Windows 官方提供的 WSL 组件来运行 Linux |
为什么推荐 Ubuntu?
- LLaMA-Factory 在 Linux 生态更好 —— 官方文档本身就是按 Linux 环境写的,Windows 下开启 QLoRA 需要额外装预编译的 bitsandbytes wheel,兼容性和折腾成本更高
- 安装超级简单,不需要装虚拟机,一行命令即可
- WSL2 现在已经能正式使用 NVIDIA CUDA 进行 GPU 加速,不是早期那种”勉强能跑”的状态
如果只是想简单体验一下,跑最基础的推理或轻量训练,用 Windows 就够了。如果要真正开始做微调,强烈推荐 WSL + Ubuntu。
安装 WSL + Ubuntu(需科学上网):
wsl --install -d Ubuntu-22.04安装完成后,使用 Windows 自带的搜索功能即可打开 Ubuntu。打开后会让你输入账号和密码,依次填写即可。
注意! WSL 有两个版本:WSL1 和 WSL2。WSL1 是早期版本,只有勉强能用的水平,一定要使用 WSL2! 上面的命令默认使用 WSL2。可以用以下命令查看版本:
wsl --list --verbose查看
VERSION这一列确认是2。
2.3 安装 LLaMA-Factory
2.3.1 安装 LLaMA-Factory 本体
打开命令行或 PowerShell,拉取代码:
git clone https://gitee.com/hiyouga/LLaMA-Factory.git完笔之后听说这个 Gitee 库失效了,把
gitee换成github即可,记得科学上网。
2.3.2 配置虚拟环境
为了防止日后出现各种依赖报错,推荐给每一个项目都创建一个单独的虚拟环境。
这里推荐使用 UV 这个包管理工具。
安装 UV:
# Windowspowershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.9.27/uv-installer.ps1 | iex"# Linuxpip install uv -i https://mirrors.aliyun.com/pypi/simple创建虚拟环境:
uv venv finetune # finetune 是虚拟环境的名字,可以自己改进入虚拟环境:
# Windowsfinetune/Scripts/activate# Linuxsource finetune/bin/activate2.3.3 安装依赖包
切换到安装目录并下载依赖:
cd LLaMA-Factoryuv pip install -e ".[torch,metrics]" -i https://mirrors.aliyun.com/pypi/simple这个过程大概 5-10 分钟。
验证 GPU 是否可用(应该输出 True,显示 False 请查看疑难杂症):
python -c "import torch;print(torch.cuda.is_available())"2.4 疑难杂症
显示”无法解析服务器的名称或地址”怎么办
科学上网喵,科学上网谢谢喵。
安装依赖 numpy==1.26.4 时失败怎么办
主要原因是缺少编译工具。去 VS Code 官网下载安装 Visual Studio Build Tools,安装 C++ 工具包即可。
我怎么确认有没有成功安装 LLaMA-Factory
进入虚拟环境,输入:
llamafactory-cli version能显示版本号就成了。
我怎么确认有没有安装 PyTorch
python -c "import torch; print(torch.__version__)"- 如果 PyTorch 已安装,会输出版本号,例如
1.13.1 - 如果未安装,会看到
ModuleNotFoundError: No module named 'torch'
验证 GPU 时显示 False 怎么办
GPU 加速需要安装兼容版本的 CUDA 和 PyTorch。
可能的原因:
- 没有安装 CUDA
- 没有安装 GPU 驱动 / 驱动不是最新
- GPU 不支持 CUDA
- PyTorch 版本不兼容(确保安装的是 CUDA 版本)
- CUDA 运行时问题
- 环境变量未正确设置(
CUDA_HOME、PATH等) - 系统权限问题
- CUDA 版本与 GPU 不兼容
- PyTorch 安装有问题
建议安装 CUDA 13.0 + PyTorch 2.9.1,这俩是兼容的。
# 检查 CUDA 版本nvcc --version
# 检查 GPU 是否被系统识别nvidia-smi安装 PyTorch 2.9.1(Windows):
pip install torch==2.9.1 torchvision==0.24.1 torchaudio==2.9.1 --index-url https://download.pytorch.org/whl/cu128安装 UV 时出现 Command 'pip' not found 怎么办
Ubuntu 安装 Python 时不会自动装 pip,手动装上就行:
sudo apt updatesudo apt install python3-piptyro 库报错怎么办
别用高版本 Python,用 3.10 版本就行。
第三部分:体验简单微调全过程
3.1 启动 Web 界面
进入虚拟环境,输入:
llamafactory-cli webui如果没出问题,稍后 Web 面板会自动打开。如果没有自动打开,浏览器访问 http://127.0.0.1:7860/。
两个小设置:
- 在 Language 选项处选择 zh 切换成中文
- 模型下载源选择 ModelScope,下模型不用科学上网
3.2 选择合适的模型
推荐去魔搭网下载模型:ModelScope 主页
在魔搭网上方选择”模型库”,你会看到非常非常多的模型。选择方法如下:
1. 推荐选择千问(Qwen)系列
社区生态好,性能抗打。而且 Qwen 的命名方式很规范,举个例子:
3.5qwen-7b-Thinking-base→ 千问 3.5 — 70 亿参数 — 带思考功能 — 预训练模型
一目了然。
常见模型后缀一览:
| 后缀 | 含义 | 通俗理解 |
|---|---|---|
Base | 仅经过大规模无监督预训练,未做指令或对话微调 | 干不了事,要微调才能用 |
Instruct | 使用大量”指令-回答”对进行了指令微调 | 已经微调过了,直接用(也可以继续微调) |
Thinking | 经过思维链增强训练,能展示推理过程 | 先思考,后回答 |
Chat | 经过对话微调,擅长多轮对话 | 天赋点聊天上了 |
Vision / Audio / VLM | 能同时处理文本、图像、音频等多种数据类型 | 多模态(能识图、视频等) |
Lite / Tiny / Small / Nano | 参数量更小,速度快、资源占用低 | 轻量化版本 |
Code | 在代码语料上额外训练,擅长代码生成与理解 | 写代码很 NB 的模型 |
GGUF / GPTQ / AWQ / FP16 / INT8 / INT4 | 权重从高精度转换为低精度的压缩版本 | 我显存不够 |
2. 入门推荐选择带 -Instruct 的模型
接手别人调过的模型再次微调会容易很多。Base 也行,但需要更多数据,也会更难。
3. 根据硬件配置选择合适参数量的模型
在满足应用需求的前提下,越小越好 —— 小意味着快,更省资源。
选择好模型后,根据魔搭网教程下载即可。
冷知识:真正的 DeepSeek 是指 DeepSeek-671B 模型。数字比 671 小的,其实是 DeepSeek 团队制作的 Llama/Qwen 模型的改良版。严格来说,DeepSeek-32B 等模型并不是”DeepSeek 模型”,只是 DeepSeek 团队的作品简写成了这个名字。所以你能看见 DeepSeek 模型后面带了个 Qwen 的后缀(
3.3 准备数据集
还是那句话:你输入的是垃圾,得到的也是垃圾 —— 准备数据集是重中之重。
三个重点:
- 质量 > 数量 —— 保证数据集的质量
- 数量适中 —— 太多记不住,太少学不会。多少合适得自己测,这些都是宝贵的经验 :)
- 数据多样性 —— 如果每条数据都差不多,效果依然不好
入门学习可以去网上找开源数据集。还是选择魔搭网,左上角选择”数据集”,自行选择合适的数据集下载。
LLaMA-Factory 支持两种数据格式:Alpaca 和 ShareGPT。下载数据集时注意格式是否符合要求。
Alpaca 格式
{ "instruction": "雨星,我睡不着怎么办", "input": "", "output": "睡不着就和我聊聊天,聊着聊着就会睡着的啦", "history": []}字段说明:
| 字段 | 说明 |
|---|---|
instruction | 人类指令 |
input | 人类输入(可省略) |
output | 模型输出 |
history | 存储上下文,提升上下文理解能力(可省略) |
实际输入 = instruction + input。以下三种写法是等价的:
// 写法一{ "instruction": "雨星,我睡不着怎么办", "input": "睡不着就和我聊聊天,", "output": "聊着聊着就会睡着的啦", "history": []}
// 写法二{ "instruction": "雨星,我睡不着怎么办", "input": "", "output": "睡不着就和我聊聊天,聊着聊着就会睡着的啦", "history": []}
// 写法三{ "instruction": "雨星,我睡不着怎么办", "input": "睡不着就和我聊聊天,聊着聊着就会睡着的啦", "output": "", "history": []}ShareGPT 格式
ShareGPT 格式包含一个 conversations 列表,就像 Python 的字典一样:
{ "conversations": [ { "from": "human", "value": "晚上好" }, { "from": "gpt", "value": "晚上好!是时候享受生活了,去洗澡、吃宵夜、和朋友聊天,还是和我聊天呢?" }, { "from": "human", "value": "没有朋友聊,所以选择和雨星聊天(" }, { "from": "gpt", "value": "看来你的朋友都很忙碌呢,没事,你还有雨星我⭐。看看今晚我们有什么话题可以聊的~" } ]}字段说明:
| 字段 | 说明 |
|---|---|
from(或 role) | 值常为 human / gpt,或 user / assistant |
value | 对应角色的发言内容 |
3.4 开始你的第一次微调吧!
在 LLaMA-Factory 的 Web 界面中:
- 选择你下载好的基座模型
- 加载你准备好的数据集
- 选择 LoRA 微调方式
- 设置训练参数(入门先用默认值即可)
- 点击开始训练!
训练完成后,可以在 Web 界面中直接与微调后的模型对话,看看效果如何。
祝微调顺利
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时






