大模型微调实操入门
本文介绍了使用LLaMA-Factory和vLLM工具进行大模型微调与部署的完整流程。主要内容包括:1)在AutoDL平台租用GPU并安装LLaMA-Factory环境;2)准备Qwen3-0.6B模型和关键词抽取任务数据集;3)通过WebUI界面配置LoRA微调参数;4)使用vLLM进行高效模型部署和服务调用。文中详细记录了从环境搭建到模型微调、权重导出和在线服务的每个步骤,并提供了常见问题排查
大模型微调实操入门
本笔记记录基于 LLaMA-Factory + vLLM 的大模型微调与部署完整链路,使用 Qwen3-0.6B 作为基座模型,以"关键词抽取"任务为例进行 LoRA 微调。
目录
第 1 章 微调实操
LLaMA-Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA-Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调。
整体流程:
租用 GPU → 装 LLaMA-Factory → 启动 WebUI → 准备模型 → 准备数据集 → LoRA 微调 → 导出权重
1.1 安装 LLaMA-Factory
0)AutoDL 平台租用 GPU
在 AutoDL 上租用一台带 GPU 的实例(本笔记示例使用约 32 GiB 显存的卡,足够 Qwen3-0.6B LoRA 微调)。


1)下载源码
# 进入数据盘目录(AutoDL 推荐 ~/autodl-tmp)
cd ~/autodl-tmp
# 拉取源码
git clone https://github.com/hiyouga/LLaMA-Factory.git
加速 git clone(AutoDL 内置代理):
source /etc/network_turbo # 开启代理加速 # …此处执行 git clone… unset http_proxy && unset https_proxy # 用完取消,避免影响后续访问国内源
2)安装依赖
进入项目目录,使用 uv 管理虚拟环境(比 pip 快很多):
cd ~/autodl-tmp/LLaMA-Factory
# 安装 uv(如果未安装)
pip install uv
# 创建 Python 3.12 虚拟环境
uv venv --python 3.12
# 激活环境
source .venv/bin/activate
# 安装项目依赖(使用清华源加速)
uv pip install -e . -i https://pypi.tuna.tsinghua.edu.cn/simple
3)验证安装
llamafactory-cli version
能正常打印版本号即说明安装成功。
1.2 启动 LLaMA-Factory
前台启动(调试用)
llamafactory-cli webui
后台启动(推荐生产/长时间运行)
nohup llamafactory-cli webui > llama_factory.log 2>&1 &
看到下面这行说明启动成功:
Running on local URL: http://0.0.0.0:7860
远程访问 WebUI(SSH 隧道)
如果在 AutoDL 服务器上启动,本地浏览器需通过 SSH 隧道转发端口:
# 在本地电脑执行(注意替换主机/端口为自己实例的)
ssh -CNg -L 7860:127.0.0.1:7860 root@connect.nmb2.seetacloud.com -p 16652
也可以使用 AutoDL 提供的图形化代理隧道工具。

打开浏览器访问:http://localhost:7860/

1.3 准备模型
LLaMA-Factory 支持两种方式获取模型:训练时自动下载、或预先下载好后传入本地路径。推荐预下载,可避免训练中断时重复下载。
通过 ModelScope 下载 Qwen3-0.6B 到本地:
cd ~/autodl-tmp/LLaMA-Factory
source .venv/bin/activate
modelscope download \
--model Qwen/Qwen3-0.6B \
--local_dir model/Qwen3-0.6B
下载完成后,模型路径为:/root/autodl-tmp/LLaMA-Factory/model/Qwen3-0.6B

1.4 准备数据集
LLaMA-Factory 目前支持 Alpaca 和 ShareGPT 两种格式。本节以 ShareGPT 为例。
1)处理数据格式
将原始数据上传到 LLaMA-Factory 目录后,使用以下脚本转成 ShareGPT 多轮对话格式,输出到 data/keywords_data_sharegpt.jsonl:
from datasets import load_dataset
def convert_to_qwen_format(examples):
conversations = []
# 遍历每个对话样本,注意开启 batch 时,会自动套一层 list
for conv_list in examples["conversation"]:
# 重建符合 Qwen3 标准的消息结构
for conv in conv_list:
conversations.append([
{"role": "user", "content": conv["human"].strip()},
{"role": "assistant", "content": conv["assistant"].strip()},
])
return {"messages": conversations}
if __name__ == "__main__":
dataset = load_dataset(
"json",
data_files="data/keywords_data_train.jsonl",
split="train",
)
# 格式化为 ShareGPT 风格
dataset = dataset.map(
convert_to_qwen_format,
batched=True,
remove_columns=dataset.column_names,
)
dataset.to_json(
"data/keywords_data_sharegpt.jsonl",
force_ascii=False,
)
2)注册数据集
编辑 data/dataset_info.json,新增一段:
cd /root/autodl-tmp/LLaMA-Factory/data
vim dataset_info.json
"keywords_extract": {
"file_name": "keywords_data_sharegpt.jsonl",
"formatting": "sharegpt",
"columns": {
"messages": "messages"
},
"tags": {
"role_tag": "role",
"content_tag": "content",
"user_tag": "user",
"assistant_tag": "assistant"
}
}
保存后,回到 WebUI 数据集下拉框就能看到 keywords_extract,选中可在线预览样本。

1.5 使用 LoRA 进行微调
在 WebUI 上配置以下几项即可启动训练(无需手写训练脚本)。
1)配置模型
- 模型名称:选择
Custom - 模型路径:填写本地模型绝对路径,如
/root/autodl-tmp/LLaMA-Factory/model/Qwen3-0.6B

2)启用 LoRA
- 微调方法:选择
lora

3)配置训练轮数与最大样本数
- 训练总轮数(Epochs):根据数据规模设定
- 最大样本数(Max Samples):
样本量计算:
- 不设最大样本数:每个 epoch 遍历完整训练集 → 总样本量 ≈ 训练集样本数 × 训练轮数
- 设置最大样本数:训练前会先截断到该上限 → 总样本量 ≈ min(训练集样本数, 最大样本数) × 训练轮数

4)配置保存位置
设置 输出目录,训练过程中的 checkpoint 与日志均保存到此处。
示例:/root/autodl-tmp/LLaMA-Factory/saves/Custom/lora/qwen3_lora

5)启动训练 + 测试
点击 Start 开始训练。训练完成后,可在 WebUI 的 Chat 标签页加载 LoRA 适配器,与微调后的模型直接对话验证效果。

1.6 模型权重导出
WebUI 中切到 Export 标签,可将基座模型与 LoRA 适配器合并导出为一个完整模型,方便后续部署。
示例导出目录:
/root/autodl-tmp/LLaMA-Factory/saves/Custom/lora/qwen3_lora_new/full_params

导出后该目录内典型结构:
full_params/
├── Modelfile
├── chat_template.jinja
├── config.json
├── generation_config.json
├── model.safetensors
├── tokenizer.json
└── tokenizer_config.json
关键点:导出后的目录已包含完整 tokenizer 文件,部署时不需要再单独传
--tokenizer指向原模型。
第 2 章 模型部署
在实际生产环境下,微调之后的模型需要经过部署才能使用。部署的本质就是将模型转换成可通过 HTTP 调用的服务。本章介绍如何使用 vLLM 部署模型,并通过多种方式调用。
2.1 vLLM 简介
vLLM 是一个面向大语言模型推理的高性能推理框架,专为大规模并发请求优化,底层基于 PyTorch 构建。
核心优势(同等配置下吞吐量比 Transformers 高一个数量级):
| 特性 | 说明 |
|---|---|
| 高级 GPU 优化 | 利用 CUDA + PyTorch 最大化 GPU 利用率 |
| PagedAttention | 类操作系统分页机制管理 KV Cache,显著减少显存碎片 |
| 连续批处理 | 支持 continuous batching 与异步处理,提升并发吞吐 |
| 安全特性 | 内置 API Key 支持与请求校验 |
| 易用性 | 支持上百种主流模型,完全兼容 OpenAI API |
2.2 vLLM 安装
环境要求
- OS:Linux
- Python:3.9 ~ 3.12
安装步骤
为避免和 LLaMA-Factory 的依赖冲突,单独建一个虚拟环境:
# 退出 LLaMA-Factory 的虚拟环境
deactivate
# 进入 vllm 工作目录
mkdir -p /root/autodl-tmp/vllm_dir
cd /root/autodl-tmp/vllm_dir
# 创建独立的 Python 3.12 环境
uv venv --python 3.12
source .venv/bin/activate
# 安装 vLLM(使用清华源加速)
uv pip install vllm -i https://pypi.tuna.tsinghua.edu.cn/simple
# 验证
uv pip show vllm
2.3 vLLM 启动部署
1)准备模型目录
将导出后的合并模型拷贝到 vllm_dir:
cp -r /root/autodl-tmp/LLaMA-Factory/saves/Custom/lora/qwen3_lora_new/full_params/ \
./Qwen3-0.6B-sft-lora
最终目录结构:
vllm_dir/
├── .venv/
├── Qwen3-0.6B/ # (可选)原始模型,仅用于对照
└── Qwen3-0.6B-sft-lora/ # 合并后的微调模型 ← 部署用这个
2)前台启动(调试)
vllm serve /root/autodl-tmp/vllm_dir/Qwen3-0.6B-sft-lora \
--served-model-name Qwen3-0.6B-sft-lora \
--max-model-len 32768 \
--gpu-memory-utilization 0.85
参数说明:
| 参数 | 含义 |
|---|---|
| 第一个位置参数 | 模型目录(含 tokenizer 时无需再指 --tokenizer) |
--served-model-name |
对外暴露的模型名,调用时 model 字段必须用这个 |
--max-model-len |
最大上下文长度。小写 k=1000,大写 K=1024,例如 32K = 32768 |
--gpu-memory-utilization |
显存利用率上限,默认 0.92。显存吃紧时调小(例如 0.85) |
3)后台启动(生产)
nohup vllm serve /root/autodl-tmp/vllm_dir/Qwen3-0.6B-sft-lora \
--served-model-name Qwen3-0.6B-sft-lora \
--max-model-len 32K \
--gpu-memory-utilization 0.85 \
> vllm.log 2>&1 &
4)判断启动是否成功
vLLM 启动要经过:加载权重 → torch.compile 编译 → CUDA Graph 预热 → API 监听,整个过程约 1~3 分钟。
只有看到下面两行才算真正完成:
INFO ... [api_server.py:...] Starting vLLM API server on http://0.0.0.0:8000
INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
启动成功后可用 curl 验证:
curl http://localhost:8000/v1/models
2.4 服务调用
vLLM 完全兼容 OpenAI API 协议,因此可以用三种方式调用。
1)curl 快速测试
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen3-0.6B-sft-lora",
"messages": [
{"role": "user", "content": "抽取出下文中的关键词:\n目的分析结节性甲状腺肿(NG)合并甲状腺微小癌(TMC)的超声声像图特点……"}
]
}'
2)OpenAI Python SDK 调用
安装:
uv pip install openai -i https://pypi.tuna.tsinghua.edu.cn/simple
调用代码:
from openai import OpenAI
# 连接本地 vLLM 服务
client = OpenAI(
base_url="http://localhost:8000/v1/",
api_key="none", # 占位符,本地部署可忽略
)
response = client.chat.completions.create(
model="Qwen3-0.6B-sft-lora", # 必须与启动 vllm 时的 --served-model-name 一致
messages=[
{"role": "user", "content": "抽取出下文中的关键词:\n目的分析结节性甲状腺肿(NG)合并甲状腺微小癌(TMC)的超声声像图特点……"}
],
extra_body={
# Qwen3 默认开启思考模式(thinking),抽取类任务建议关掉
"chat_template_kwargs": {"enable_thinking": False}
},
)
print(response.choices[0].message.content)
3)LangChain 调用
安装:
uv pip install langchain-core langchain-openai -i https://pypi.tuna.tsinghua.edu.cn/simple
调用代码:
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage
llm = ChatOpenAI(
model="Qwen3-0.6B-sft-lora",
base_url="http://localhost:8000/v1/",
api_key="none",
temperature=0,
)
messages = [
HumanMessage(content="抽取出下文中的关键词:\n目的分析结节性甲状腺肿(NG)合并甲状腺微小癌(TMC)的超声声像图特点……")
]
response = llm.invoke(messages)
print(response.content)
附录 A:常见问题与排错
A.1 vLLM 启动报"显存不足"
报错信息:
ValueError: Free memory on device cuda:0 (28.83/31.36 GiB) on startup is less than
desired GPU memory utilization (0.92, 28.85 GiB).
Decrease GPU memory utilization or reduce GPU memory used by other processes.
根因:vLLM 默认 --gpu-memory-utilization=0.92,要求启动瞬间空闲显存达到该比例。如果有其他进程(例如 LLaMA-Factory 的 webui/chat)占着显存,就会差那么一点点导致启动失败。
解决方案(任选一种):
- 降低显存占用比例(最简单):
--gpu-memory-utilization 0.85 - 释放占用显存的进程:
nvidia-smi # 查看占用进程 kill -9 <PID> # 释放
A.2 是否需要 --tokenizer 参数?
结论:通常不需要。
LLaMA-Factory 通过 Export 导出的合并模型目录,已经自带完整 tokenizer 文件(tokenizer.json + tokenizer_config.json + chat_template.jinja),vLLM 会自动从模型目录加载。
只有在以下情况才需要单独指定:
- 模型目录里没有 tokenizer 文件
- 想用其他模型的 tokenizer(罕见)
A.3 Blackwell 架构 GPU 警告
警告信息:
Failed to get device capability: SM 12.x requires CUDA >= 12.9.
原因:使用 Blackwell 架构 GPU(如 RTX 5090、B200)但 CUDA 版本 < 12.9,vLLM 会自动回退到 FlashAttention 2,功能正常但性能没拉满。
优化方案:
- 升级到 CUDA 12.9+ 的环境
- 升级到更新版本的 vLLM(对 Blackwell 支持更好)
A.4 启动后长时间没出现 “Uvicorn running”
这是正常现象。vLLM 启动顺序:
加载权重 (秒级)
→ torch.compile 编译 (~10-30 秒)
→ CUDA Graph 内存 profiling (~1-3 分钟)
→ API 服务监听 ← 此时才真正可用
不要急着 Ctrl+C,看到 Profiling CUDA graph memory: PIECEWISE=51, FULL=35 就说明正在最后阶段,耐心等待即可。
A.5 Qwen3 思考模式(thinking)
Qwen3 默认会先输出 <think>...</think> 思考过程再给最终回答。对于抽取/分类等结构化任务,建议关闭:
extra_body={"chat_template_kwargs": {"enable_thinking": False}}
附录 B:环境信息速查
B.1 关键路径速查表
| 用途 | 路径 |
|---|---|
| LLaMA-Factory 项目 | /root/autodl-tmp/LLaMA-Factory/ |
| 基座模型(下载) | /root/autodl-tmp/LLaMA-Factory/model/Qwen3-0.6B/ |
| 数据集目录 | /root/autodl-tmp/LLaMA-Factory/data/ |
| 数据集注册文件 | /root/autodl-tmp/LLaMA-Factory/data/dataset_info.json |
| LoRA 训练输出 | /root/autodl-tmp/LLaMA-Factory/saves/Custom/lora/qwen3_lora/ |
| 合并导出目录 | /root/autodl-tmp/LLaMA-Factory/saves/Custom/lora/qwen3_lora_new/full_params/ |
| vLLM 工作目录 | /root/autodl-tmp/vllm_dir/ |
| 部署用模型 | /root/autodl-tmp/vllm_dir/Qwen3-0.6B-sft-lora/ |
B.2 常用端口
| 服务 | 端口 |
|---|---|
| LLaMA-Factory WebUI | 7860 |
| vLLM OpenAI API | 8000 |
B.3 虚拟环境切换
# 进入 LLaMA-Factory 环境
cd /root/autodl-tmp/LLaMA-Factory && source .venv/bin/activate
# 切换到 vLLM 环境
deactivate
cd /root/autodl-tmp/vllm_dir && source .venv/bin/activate
B.4 完整流程一图流
┌─────────────────────────────────────────────────────────────┐
│ 阶段 1:训练(LLaMA-Factory 环境) │
│ ────────────────────────────────────────────── │
│ 1. modelscope download → 拉基座模型 │
│ 2. 处理数据为 ShareGPT 格式 → 写 dataset_info.json │
│ 3. WebUI 配置 LoRA → Start │
│ 4. Export → 合并 LoRA + 基座 → 完整模型目录 │
└─────────────────────────────────────────────────────────────┘
↓ cp -r
┌─────────────────────────────────────────────────────────────┐
│ 阶段 2:部署(vLLM 环境) │
│ ────────────────────────────────────────────── │
│ 1. vllm serve <模型目录> --served-model-name X │
│ 2. 等到 "Uvicorn running on http://0.0.0.0:8000" │
│ 3. curl / openai SDK / LangChain 调用 │
└─────────────────────────────────────────────────────────────┘
写于 2026-05-05
配套环境:AutoDL · Python 3.12 · LLaMA-Factory · vLLM 0.20.1 · Qwen3-0.6B
更多推荐


所有评论(0)