我们用 LLaMA-Factory 完成了多卡训练。还有另一个非常流行的微调框架——XTuner(上海 AI Lab 出品),走的是配置驱动路线,适合需要精细控制训练流程的场景。
本篇带你从零搭建 XTuner 环境,完成 Qwen/Qwen2.5-1.5B-Instruct 的 QLoRA单卡微调,覆盖:
主线:环境搭建 → 配置 → 单卡训练 → 监控/续训 → 转换 → 合并 → 推理 → vLLM- XTuner 介绍
XTuner是上海 AI Lab 出品的 LLM 微调工具箱,通过xtuner train、xtuner list-cfg、xtuner convert等命令完成全流程,特色如下:
| 特色 | 说明 |
|---|---|
| 一键安装 | 一键装好 PyTorch、Transformers、DeepSpeed、bitsandbytes 等依赖 |
| 配置驱动 | 所有训练参数写在 Python 配置文件中,代码即配置 |
| 多机多卡开箱即用 | torchrun / slurm 双模式,与上篇 DeepSpeed 知识完全衔接 |
| QLoRA 友好 | 内置 4-bit 量化 + LoRA,单卡可微调 7B 模型 |
| 完整转换链 | PTH → HF → Merge 工具齐全 |
版本说明:本篇使用0.1.23——最后一个自带xtuner命令行工具的版本。后续上海 AI Lab 推出了架构不同的新一代训练引擎,将在后面章单独讲解。
与 LLaMA-Factory 的差异:
| 维度 | LLaMA-Factory | XTuner |
|---|---|---|
| 配置方式 | WebUI / YAML / CLI | Python 配置文件 |
| 学习曲线 | 上手快 | 需读懂 mmengine 配置 |
| 自定义空间 | 中等 | 极高(可直接改模型结构、训练循环) |
| 多卡启动 | 自动 | NPROC_PER_NODE=N显式指定 |
| 适合人群 | 业务应用方 | 算法工程师、研究者 |
想深入研究训练过程选 XTuner。
- 环境准备
确保显卡驱动正确安装即可,例如在 NVIDIA GPU 设备上,nvidia-smi 的 Driver Version 需要大于 550.127.08
XTuner 推荐使用conda隔离环境,避免依赖冲突。
# 创建独立环境(python 3.10 兼容性最好)conda create --name xtuner-legacy python=3.10 -yconda activate xtuner-legacy- 安装 XTuner
3.1 安装依赖
pip install 'xtuner[all]==0.1.23'这一步会安装 XTuner 及其所有依赖(PyTorch、Transformers、DeepSpeed、bitsandbytes 等),耗时较长,耐心等待。
3.2 依赖冲突时的版本修正(可选)
0.1.23会一并安装配套依赖。若训练或导入时报版本不兼容,可手动锁定到稳定组合:
pip install 'transformers>=4.36.0,!=4.38.0,!=4.38.1,!=4.38.2,<5.0.0' 'peft>=0.4.0,<0.14.0'3.3 验证安装
xtuner version正常输出版本号(0.1.23)说明安装成功
(xtuner-legacy) root@autodl-container:~/autodl-tmp# xtuner version07/12 20:59:53 - mmengine - INFO - 0.1.23 ``````plaintext xtuner list-cfg能列出内置配置文件,说明 CLI 可用
- 下载模型
XTuner 支持 HuggingFace / ModelScope / OpenXLab 多个模型源,本篇用ModelScope。
from modelscope import snapshot_download# 下载 Qwen/Qwen2.5-1.5B-Instructmodel_dir = snapshot_download( 'Qwen/Qwen2.5-1.5B-Instruct', cache_dir='/root/autodl-tmp/model/')print(f"模型已下载到:{model_dir}")下载完成后,模型路径:
/root/autodl-tmp/model/Qwen/Qwen2.5-1.5B-Instruct后续配置文件中pretrained_model_name_or_path填这个路径。
- 准备微调数据
XTuner 默认支持Alpaca 格式(与 LLaMA-Factory 一致):
[ { "conversation": [ { "input": "马上要上游泳课了,昨天洗的泳裤还没干,怎么办", "output": "游泳时泳裤本来就会湿,不用晾干。" } ] }]把文件命名为target_data.json,放在自己的数据目录下:(完整数据集,可以问我要)
mkdir -p /root/dataset/xtuner# 上传或拷贝 target_data.json 到此目录ls /root/dataset/xtuner/target_data.json- 微调配置文件(核心)
XTuner 的核心是一份 Python 配置文件——所有训练参数都写在这里。
6.1 复制官方模板
# 查看所有内置配置xtuner list-cfg# 复制一个接近的 Qwen QLoRA 模板到当前目录cd /rootxtuner copy-cfg qwen1_5_1_8b_chat_qlora_alpaca_e3 .# 复制后会生成 *_copy.py,改个更直观的名字mv qwen1_5_1_8b_chat_qlora_alpaca_e3_copy.py qwen2_5_1_5b_instruct_qlora_alpaca_e3.py官方提供了几十个预置模板,覆盖 Qwen / InternLM / Llama 等主流模型 + LoRA / QLoRA / 全参微调。用xtuner list-cfg | grep qwen可快速筛选 Qwen 相关配置。
6.2 修改配置(PART 1:路径与超参数)
打开qwen2_5_1_5b_instruct_qlora_alpaca_e3.py,只需要改 PART 1:
######################################################################## PART 1 Settings ######################################################################### Modelpretrained_model_name_or_path = '/root/autodl-tmp/model/Qwen/Qwen2.5-1.5B-Instruct'# Datadata_files = '/root/dataset/xtuner/target_data.json'prompt_template = PROMPT_TEMPLATE.qwen_chatmax_length = 512# parallelsequence_parallel_size = 1# 序列并行大小,1 = 不开# Scheduler & Optimizerbatch_size = 2# per_deviceaccumulative_counts = 8max_epochs = 10000optim_type = AdamWlr = 2e-4betas = (0.9, 0.999)weight_decay = 0max_norm = 1# grad clipwarmup_ratio = 0.03# Savesave_steps = 100save_total_limit = 2# 最多保留几个 checkpoint# Evaluate the generation performance during the trainingevaluation_freq = 100SYSTEM = SYSTEM_TEMPLATE.alpacaevaluation_inputs = [ '只剩一个心脏了还能活吗?', '爸爸再婚,我是不是就有了个新娘?', '我只出生了一次,为什么每年都要庆生',]关键参数说明:
| 参数 | 含义 | 推荐值 |
|---|---|---|
pretrained_model_name_or_path | 基座模型绝对路径 | 上一节下载的路径 |
data_files | 训练数据路径 | 自己的 JSON |
max_length | 文本最大长度 | 512 / 1024 / 2048 |
batch_size | 每卡 batch size | 显存够就调大(2~8) |
accumulative_counts | 梯度累积 | 8~16(等效放大 batch) |
max_epochs | 训练轮数 | 3~10 |
lr | 学习率 | LoRA 用 1e-4 ~ 2e-4 |
sequence_parallel_size | 序列并行大小 | 单机多卡保持 1 |
6.3 修改配置(PART 3:数据集)
######################################################################## PART 3 Dataset & Dataloader ########################################################################train_dataset = dict( type=process_hf_dataset, dataset=dict(type=load_dataset, path="json", data_files=data_files), tokenizer=tokenizer, max_length=max_length, dataset_map_fn=None, # 数据已是 conversation 格式,无需额外转换 template_map_fn=dict(type=template_map_fn_factory, template=prompt_template), remove_unused_columns=True, shuffle_before_pack=True, pack_to_max_length=pack_to_max_length, use_varlen_attn=use_varlen_attn,)dataset_map_fn=None表示用默认的 Alpaca 格式解析(与 LLaMA-Factory 一致)。
6.4 LoRA 与量化配置(PART 2,已内置)
模板里已经写好了 QLoRA 配置(4-bit 量化 + LoRA),通常不需要改:
# PART 2 中已经预置的 QLoRA 配置model = dict( type=SupervisedFinetune, llm=dict( type=AutoModelForCausalLM.from_pretrained, quantization_config=dict( type=BitsAndBytesConfig, load_in_4bit=True, # ← 4-bit 量化 bnb_4bit_quant_type="nf4", # ← NF4 量化类型 ), ), lora=dict( type=LoraConfig, r=32, # LoRA rank lora_alpha=64, # 缩放系数 lora_dropout=0.1, bias="none", task_type="CAUSAL_LM", ),)如果想跑全量 LoRA(不用 4-bit 量化),把quantization_config整段删掉即可。
- 单卡微调与监控
配置改好后,用单卡启动训练:
export OMP_NUM_THREADS=1xtuner train /root/qwen2_5_1_5b_instruct_qlora_alpaca_e3.py训练过程中关注三件事:evaluation_freq间隔打印生成样例**(观察是否学到位)、loss 平稳下降、**checkpoint 按时落盘。
XTuner 训练日志
单卡 checkpoint 为单个.pth文件,保存在work_dirs/<config_name>/(在/root下执行即为/root/work_dirs/...):
work_dirs/qwen2_5_1_5b_instruct_qlora_alpaca_e3/├── iter_100.pth├── iter_200.pth├── iter_300.pth└── ...后续转换直接使用.pth路径即可;训练中断续训见下一节。
- 中断继续训练
训练中途断了,可以改配置文件从 checkpoint 恢复:
# qwen2_5_1_5b_instruct_qlora_alpaca_e3.py# load from which checkpointload_from = "/root/work_dirs/qwen2_5_1_5b_instruct_qlora_alpaca_e3/iter_100.pth"# whether to resume training from the loaded checkpointresume = True # ← 关键:设为 True 才真正续训resume=True会同时恢复 optimizer 状态、随机种子、step 计数等;resume=False只加载模型权重(不推荐用于中断续训)。
改完后重新执行xtuner train命令即可续训。
- 模型转换:PTH → HuggingFace
XTuner 训练产物是PTH 格式(PyTorch 原生),不能直接用 transformers 加载。需要转换为HuggingFace 格式:
xtuner convert pth_to_hf \ /root/qwen2_5_1_5b_instruct_qlora_alpaca_e3.py \ /root/work_dirs/qwen2_5_1_5b_instruct_qlora_alpaca_e3/iter_300.pth \ /root/xtuner/work_dirs/hf参数说明:
| 参数 | 含义 |
|---|---|
| 第 1 个 | 配置文件(必须与训练时一致) |
| 第 2 个 | 训练产物的.pth路径 |
| 第 3 个 | HF 格式输出目录 |
转换hf
转换完成后,/root/xtuner/work_dirs/hf/目录下得到一份 HuggingFace 格式的LoRA adapter(不是完整模型)。
- 模型合并:LoRA Adapter → 完整模型
HF 格式的产物只包含 LoRA adapter 权重(几十 MB),需要合并回基座模型才能得到完整权重:
xtuner convert merge \ /root/autodl-tmp/model/Qwen/Qwen2.5-1.5B-Instruct \ /root/xtuner/work_dirs/hf \ /root/xtuner/work_dirs/merged参数说明:
| 参数 | 含义 |
|---|---|
第 1 个LLM | 基座模型路径 (不是 adapter) |
第 2 个LLM_ADAPTER | 上一节转换的 HF adapter 目录 |
第 3 个SAVE_PATH | 合并后完整模型的输出路径 |
合并完成后,/root/xtuner/work_dirs/merged/是一份可直接部署的完整模型。
合并阶段不需要 GPU 分布式——用单卡甚至 CPU 都能跑(速度慢些)。
- 合并后模型的使用
合并后的模型可以像普通 HuggingFace 模型一样,用transformers加载并做对话推理——加载路径指向 §10 合并输出目录/root/xtuner/work_dirs/merged,问题列表可与配置里evaluation_inputs保持一致,便于对比训练过程中的生成效果。
到这里,单卡微调的主线已经走通:训练 → 转换 → 合并 → 本地推理。下面部署到 vLLM,方便对外提供 API 服务。
- 部署到 vLLM
合并后的模型可用 vLLM 对外提供 OpenAI 兼容 API。XTuner 训练时使用PROMPT_TEMPLATE.qwen_chat,部署时必须指定同一套对话模板,否则容易出现「微调正常、上线答非所问」。
# 查出与训练一致的 chat template 路径python -c "import xtuner, pathlib; print(pathlib.Path(xtuner.__file__).parent / 'chat_templates' / 'qwen_chat.json')"vllm serve /root/xtuner/work_dirs/merged \ --chat-template <上一步输出的路径>说真的,这两年看着身边一个个搞Java、C++、前端、数据、架构的开始卷大模型,挺唏嘘的。大家最开始都是写接口、搞Spring Boot、连数据库、配Redis,稳稳当当过日子。
结果GPT、DeepSeek火了之后,整条线上的人都开始有点慌了,大家都在想:“我是不是要学大模型,不然这饭碗还能保多久?”
我先给出最直接的答案:一定要把现有的技术和大模型结合起来,而不是抛弃你们现有技术!掌握AI能力的Java工程师比纯Java岗要吃香的多。
即使现在裁员、降薪、团队解散的比比皆是……但后续的趋势一定是AI应用落地!大模型方向才是实现职业升级、提升薪资待遇的绝佳机遇!
这绝非空谈。数据说话
2025年的最后一个月,脉脉高聘发布了《2025年度人才迁徙报告》,披露了2025年前10个月的招聘市场现状。
AI领域的人才需求呈现出极为迫切的“井喷”态势
2025年前10个月,新发AI岗位量同比增长543%,9月单月同比增幅超11倍。同时,在薪资方面,AI领域也显著领先。其中,月薪排名前20的高薪岗位平均月薪均超过6万元,而这些席位大部分被AI研发岗占据。
与此相对应,市场为AI人才支付了显著的溢价:算法工程师中,专攻AIGC方向的岗位平均薪资较普通算法工程师高出近18%;产品经理岗位中,AI方向的产品经理薪资也领先约20%。
当你意识到“技术+AI”是个人突围的最佳路径时,整个就业市场的数据也印证了同一个事实:AI大模型正成为高薪机会的最大源头。
最后
我在一线科技企业深耕十二载,见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事,早已在效率与薪资上形成代际优势,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。
我整理出这套 AI 大模型突围资料包【允许白嫖】:
- ✅从入门到精通的全套视频教程
- ✅AI大模型学习路线图(0基础到项目实战仅需90天)
- ✅大模型书籍与技术文档PDF
- ✅各大厂大模型面试题目详解
- ✅640套AI大模型报告合集
- ✅大模型入门实战训练
这份完整版的大模型 AI 学习和面试资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
①从入门到精通的全套视频教程
包含提示词工程、RAG、Agent等技术点
② AI大模型学习路线图(0基础到项目实战仅需90天)
全过程AI大模型学习路线
③学习电子书籍和技术文档
市面上的大模型书籍确实太多了,这些是我精选出来的
④各大厂大模型面试题目详解
⑤640套AI大模型报告合集
⑥大模型入门实战训练
👉获取方式:
有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓