LLaMA-Factory 微调 GPT-OSS-20B 模型实战(LoRA)
介绍基于 LLaMA-Factory 框架,使用 LoRA 技术微调 GPT-OSS-20B 大语言模型的完整流程。涵盖环境配置、依赖安装、数据集准备、训练参数设置、权重合并及 vLLM 推理部署。包含常见问题解决方案,如 Token 不匹配和 Python 版本冲突,适用于需要快速上手大模型微调的开发人员。

介绍基于 LLaMA-Factory 框架,使用 LoRA 技术微调 GPT-OSS-20B 大语言模型的完整流程。涵盖环境配置、依赖安装、数据集准备、训练参数设置、权重合并及 vLLM 推理部署。包含常见问题解决方案,如 Token 不匹配和 Python 版本冲突,适用于需要快速上手大模型微调的开发人员。

本文介绍如何在云 GPU 上使用 LLaMA-Factory 框架微调 GPT-OSS-20B 大语言模型,包含完整的环境配置、训练流程、权重合并以及 vLLM 推理部署全流程。
最近在对比了多种方案后,最终选择了LLaMA-Factory + LoRA的组合,原因主要有三点:
本文将完整记录从环境配置到模型部署的全过程。
| 组件 | 选择 | 说明 |
|---|---|---|
| 微调框架 | LLaMA-Factory 0.9.4 | 开源的大模型训练框架 |
| 基础模型 | GPT-OSS-20B | 200 亿参数的 MoE 大模型 |
| 微调方式 | LoRA | 低秩适配,显存友好 |
| 推理引擎 | vLLM | 高性能推理加速 |
| 实验监控 | SwanLab | 可视化训练过程 |
| GPU 资源 | AutoDL H20 | 云 GPU 资源 |
| 远程传文件 | 文件传输工具 | 用于本地与远程服务器之间加密上传、下载、管理文件 |
在租用实例时,镜像配置非常关键,选错了会导致各种兼容性问题。
推荐配置:
| 参数 | 选择 | 说明 |
|---|---|---|
| 基础镜像 | PyTorch | |
| Ubuntu | 22.04 | |
| Python | 3.12 | 必须 3.11+,LLaMA-Factory 要求 |
| CUDA | 12.8 | 版本不能太低 |
| PyTorch | 2.8.0 |
⚠️ 重要提醒:GPT-OSS 模型默认会尝试使用 Flash Attention 3,但该特性目前仅支持 Hopper 架构 GPU(如 H100/H800 等)。
# 进入工作目录
cd /root/autodl-tmp
# 如果目录不存在,先创建
mkdir -p /root/autodl-tmp
# 下载 LLaMA-Factory 0.9.4 版本
# 方法一:从 GitHub 下载
wget https://github.com/hiyouga/LLaMA-Factory/archive/refs/tags/v0.9.4.zip
unzip v0.9.4.zip
mv LlamaFactory-0.9.4 LLaMA-Factory
# 方法二:直接从本地拖拽上传
# 将下载的 zip 文件解压后拖拽到 /root/autodl-tmp 目录
cd /root/autodl-tmp/LLaMA-Factory
# 安装基础依赖
pip install -e '.[torch,metrics]' -i https://pypi.tuna.tsinghua.edu.cn/simple
# 如果遇到 evaluate 库缺失,手动安装
pip install evaluate scikit-learn -i https://pypi.tuna.tsinghua.edu.cn/simple
# 验证安装
python -c "import llamafactory, torch; print('LLaMA-Factory 版本:', llamafactory.__version__)"
使用 ModelScope 下载 GPT-OSS-20B 模型:
pip install modelscope -i https://pypi.tuna.tsinghua.edu.cn/simple
# 下载模型(约 20GB)
modelscope download --model openai-mirror/gpt-oss-20b \
--local_dir /root/autodl-tmp/models/gpt-oss-20b
💡 提示:模型下载需要较长时间,建议在不需要使用 GPU 时就开始下载,这样可以节省 GPU 计费时间。
pip install swanlab
安装完成后,需要在训练配置中进行设置(详见下一节)。
本方案使用两个数据集:
identity_fixed 数据集示例:
[{"instruction":"你好","input":"","output":"您好,我是智能小助手,一个由 AI 开发的 AI 助手。"},{"instruction":"你是谁?","input":"","output":"您好,我是智能小助手,由 AI 发明。我可以为您提供多种多样的服务。"}]
编辑 examples/train_lora/gpt_lora_sft.yaml:
# 模型配置
model_name_or_path: /root/autodl-tmp/models/gpt-oss-20b
lora_rank: 8
lora_alpha: 16
lora_dropout: 0.05
# 训练任务配置
stage: sft
do_train: true
finetuning_type: lora
lora_target: all
# 数据集配置
dataset: identity_fixed,alpaca_en_demo
template: gpt_oss # 很多文章写的是 gpt,实测错误,应该是 gpt_oss,参考模板文件 `LlamaFactory-0.9.4/src/llamafactory/data/template.py` (template 参数,也可以参考官方文档)
cutoff_len: 2048
max_samples: 1000
# 训练参数
per_device_train_batch_size: 1
gradient_accumulation_steps: 8
learning_rate: 1.0e-4
num_train_epochs: 3.0
lr_scheduler_type: cosine
warmup_ratio: 0.1
# 验证配置
val_size: 0.1
eval_strategy: steps
eval_steps: 100
load_best_model_at_end: true
# 精度配置
bf16: true
gradient_checkpointing:
理解训练步数的计算有助于预估训练时间:
总样本 = 1090(数据集总量)
训练集 = 1090 × 0.9 = 981 个
有效 batch = 1 × 8 = 8
每轮步数 = 981 ÷ 8 ≈ 123 步
总步数 = 123 × 3 轮 = 369 步
cd /root/autodl-tmp/LLaMA-Factory
# 开始训练(推荐使用 tee 同时输出到终端和文件)
llamafactory-cli train examples/train_lora/gpt_lora_sft.yaml \
2>&1|tee logs/training_$(date +%Y%m%d_%H%M%S).log
训练过程中可以通过 SwanLab 查看实时的训练曲线。
权重合并是将 LoRA 适配器与基础模型合并为一个完整的模型文件。这是可选步骤,不合并也可以直接进行推理。
| 方式 | 优点 | 缺点 |
|---|---|---|
| 合并后推理 | 配置简单,推理速度快 | 需要额外合并步骤 |
| LoRA 直接加载 | 无需合并步骤 | 配置稍复杂 |
cd /root/autodl-tmp/LLaMA-Factory
llamafactory-cli export\
--model_name_or_path /root/autodl-tmp/models/gpt-oss-20b \
--adapter_name_or_path saves/gpt-20b/lora/sft \
--export_dir models/gpt20b_lora_sft \
--export_size 2\
--export_legacy_format false
参数说明:
--model_name_or_path:基础模型路径--adapter_name_or_path:LoRA 权重保存路径--export_dir:合并后模型的保存路径vLLM 是高性能的推理引擎,支持两种部署方式:
pip install vllm fastapi uvicorn pydantic -i https://pypi.tuna.tsinghua.edu.cn/simple
这种方式不需要合并权重,直接动态加载 LoRA 适配器:
export FLASH_ATTN_FORCE_FA2=1
export DISABLE_FLASH_ATTN_3=1
vllm serve /root/autodl-tmp/models/gpt-oss-20b \
--enable-lora \
--lora-modules gpt-lora=/root/autodl-tmp/LLaMA-Factory/saves/gpt-20b/lora/sft \
--tokenizer /root/autodl-tmp/models/gpt-oss-20b \
--tensor-parallel-size=1\
--trust-remote-code \
--enable-prefix-caching \
--gpu-memory-utilization 0.9\
--host 0.0.0.0 \
--port 80\
--api-key your-secret-api-key
API 调用:
curl -X POST "http://你的 IP:80/v1/chat/completions"\
-H "Authorization: Bearer your-secret-api-key"\
-H "Content-Type: application/json"\
-d '{ "model": "gpt-lora", "messages": [ {"role": "user", "content": "你好,请介绍一下你自己"} ], "temperature": 0.7, "max_tokens": 200 }'
如果已经完成了权重合并,可以使用合并后的模型:
vllm serve /root/autodl-tmp/LLaMA-Factory/models/gpt20b_lora_sft \
--host 0.0.0.0 \
--port 80\
--trust-remote-code \
--gpu-memory-utilization 0.9\
--max-model-len 4096\
--served-model-name gpt-procurement \
--api-key your-secret-api-key
终端出现服务启动信息,就代表部署成功了,接下来就可以推理了。
API 调用:
curl -X POST "http://你的 IP:80/v1/chat/completions"\
-H "Authorization: Bearer your-secret-api-key"\
-H "Content-Type: application/json"\
-d '{ "model": "gpt-procurement", "messages": [ {"role": "user", "content": "你好,请介绍一下你自己"} ], "temperature": 0.7, "max_tokens": 200 }'
成功调用!
| 对比项 | 方案一(LoRA 直接加载) | 方案二(合并后使用) |
|---|---|---|
| 是否需要合并 | ❌ 不需要 | ✅ 需要 |
| 配置复杂度 | 稍复杂 | 简单 |
| 推理速度 | 稍慢 | 快 |
| 显存占用 | 略高 | 略低 |
| 灵活切换 LoRA | ✅ 支持 | ❌ 不支持 |
| 推荐场景 | 开发测试 | 生产部署 |
这个是很隐藏的问题。
错误信息:
{"error":{"message":"Unexpected token 200002 while expecting start token 200006","type":"BadRequestError"}}
原因:GPT-OSS 模型的模板文件中使用了 <|end|> 作为结束 token,但与实际 tokenizer 不匹配。
解决方案:
修改 LlamaFactory-0.9.4/src/llamafactory/data/template.py 中的 gpt_oss 模板:
# 修改前
format_assistant=StringFormatter(slots=["{{content}}<|end|>"]),
# 修改后
format_assistant=StringFormatter(slots=["{{content}}"]),
修改后需要重新训练模型。
错误信息:
Package 'llamafactory' requires a different Python: 3.10.16 not in '>=3.11.0'
解决方案:创建 Python 3.11+ 的环境
conda create -n py311 python=3.11
conda activate py311
本文详细记录了使用 LLaMA-Factory 在云 GPU 上微调 GPT-OSS-20B 模型的完整流程,包括:
✅ 环境配置与依赖安装
✅ 数据集准备与配置
✅ 模型训练与监控
✅ LoRA 权重合并
✅ vLLM 推理部署
✅ 常见问题解决方案
整个流程走下来,大约需要:
希望这篇教程能够帮助到你!

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online