本文系统梳理大模型微调的完整流程:从资源准备、环境搭建、开源模型选择、训练数据构建,到微调方式选型、超参数调优、多卡训练命令解析,直至模型评测与部署。


目录

    1. 背景:为什么要做微调?
    1. GPU 资源准备
    1. 环境搭建与工具安装
    1. 开源模型选择
    1. 训练数据准备
    1. 微调方式选择
    1. 训练超参数设置
    1. DeepSpeed 多卡训练命令详解
    1. LLaMA Factory CLI 训练命令详解
    1. 模型评测
    1. 模型部署
    1. 总结与资源汇总

一、背景:为什么要做微调?

大型语言模型(LLM,Large Language Model)的训练分为两个主要阶段:

  • 预训练(Pre-training):在海量无标注语料上进行无监督学习,让模型建立通用的语言表示能力。这个过程消耗数千 GPU 天,成本极高。
  • 指令微调(Instruction Fine-tuning / SFT):在预训练基础上,使用特定领域或任务的有监督数据,让模型适应特定任务或用户偏好。

对于大多数工程师来说,从预训练做起不现实,而是:

    1. 选择一个高质量的开源基础模型(如 Qwen3、LLaMA 系列)
    1. 用自己的业务数据进行微调(Fine-tuning)
    1. 最终得到一个特定场景下表现优秀的专属模型

🔑 关键认知:微调 ≠ 重新训练。微调是在已有知识基础上"精修",成本仅是预训练的千分之一甚至更低。


二、GPU 资源准备

2.1 确认环境

在开始训练之前,首先要确认服务器的 GPU 配置。使用 nvidia-smi 命令查看:

nvidia-smi

输出示例(8 张 NVIDIA A10,每张 24GB 显存):

+-----------------------------------------------------------------------------------------+| NVIDIA-SMI 550.90.07    Driver Version: 550.90.07      CUDA Version: 12.4               ||-----------------------------------------+------------------------+----------------------+| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC || Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. ||=========================================+========================+======================||   0  NVIDIA A10                     Off |   00000000:35:00.0 Off |                    0 ||  0%   27C    P8             15W /  150W |      14MiB /  24576MiB |      0%      Default ||   1  NVIDIA A10                     Off |   00000000:36:00.0 Off |                    0 ||  0%   27C    P8             20W /  150W |      14MiB /  24576MiB |      0%      Default |...(共 8 张)+-----------------------------------------------------------------------------------------+

关键字段说明:

字段 含义
Driver Version NVIDIA 驱动版本
CUDA Version 支持的最高 CUDA 版本(实际使用的 CUDA 版本需看 nvcc -V
Memory-Usage 当前显存占用 / 总显存(上例为 14MiB / 24576MiB ≈ 24GB 空闲)
GPU-Util GPU 计算利用率,训练时应接近 100%
Temp GPU 温度,正常训练时 60–80°C 为正常范围

2.2 显存估算


三、环境搭建与工具安装

工欲善其事,必先利其器。在正式开始微调之前,需要搭建完整的训练环境。

3.1 基础依赖

大模型微调需要以下核心组件,版本匹配非常重要:

组件 推荐版本 说明
Python 3.10–3.12 3.8 以下不支持部分新特性
PyTorch 2.1+ 建议 2.3+,支持 Flash Attention 2、adamw_torch_fused 等优化
CUDA 11.8 或 12.1 需与 GPU 驱动兼容(nvidia-smi 查看最高支持版本)
DeepSpeed 0.14+ 微软分布式训练库
Transformers 4.40+ HuggingFace 模型加载框架

3.2 安装 LLaMA Factory

LLaMA Factory 是目前最流行的大模型微调框架,支持 100+ 模型和多种微调方式,强烈推荐使用。

安装步骤:

# 1. 创建独立的 conda 环境(推荐)conda create -p /data/conda/envs/llamafactory python=3.10 -yconda activate /data/conda/envs/llamafactory# 2. 安装 PyTorch(根据 CUDA 版本选择,以 CUDA 12.1 为例)pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121# 3. 克隆 LLaMA Factorygit clone https://github.com/hiyouga/LLaMA-Factory.gitcd LLaMA-Factory# 4. 安装依赖pip install -e ".[torch,metrics]"# 5. 安装 DeepSpeedpip install deepspeed# 6. 安装 Flash Attention 2(可选但推荐,需 CUDA 11.8+ 和 PyTorch 2.0+)pip install flash-attn --no-build-isolation

⚠️ 常见坑

  • • Flash Attention 安装失败?检查 CUDA 版本是否 ≥ 11.8,以及是否安装了 ninjapip install ninja
  • • DeepSpeed 报错 ModuleNotFoundError?确认安装时 conda 环境已激活
  • • 多卡训练 NCCL 超时?设置环境变量 export NCCL_TIMEOUT=180000000(毫秒)

3.3 验证安装

安装完成后,运行以下命令验证环境是否就绪:

# 验证 PyTorch + CUDApython -c "import torch; print(f'PyTorch: {torch.__version__}'); print(f'CUDA available: {torch.cuda.is_available()}'); print(f'GPU count: {torch.cuda.device_count()}')"# 验证 DeepSpeedpython -c "import deepspeed; print(f'DeepSpeed: {deepspeed.__version__}')"# 验证 Flash Attentionpython -c "import flash_attn; print(f'Flash Attention: {flash_attn.__version__}')"# 验证 LLaMA Factory CLIllamafactory-cli version

如果以上命令全部无报错输出,说明环境搭建完成,可以进入模型选择环节。


四、开源模型选择

选择合适的基础模型,是微调成功的第一步。可以从以下维度综合评估:

4.1 参数规模与任务目标

模型参数越大,能力越强,但训练与推理成本也越高:

参数规模 适用场景 典型代表
1B–7B 轻量任务、边缘部署、嵌入式 Qwen3-1.7B、LLaMA-3.2-3B
14B–32B 通用推理、代码生成、知识问答 Qwen3-14B、Qwen3-32B
72B+ 高难度推理、科研、复杂 Agent Qwen3-72B、LLaMA-3.3-70B

选型建议

  • 预算有限 / 快速验证:从 7B 模型开始,验证数据质量和流程正确性
  • 生产级应用:14B–32B 在性能和成本之间有最佳平衡
  • 追求极致效果:72B+ 需要充足的算力投入,建议先做小模型 PoC

4.2 社区支持与生态成熟度

选择有活跃社区的模型,遇到问题时能快速获得帮助。评估要点:

  • GitHub Star 数和 Issue 响应速度:反映社区活跃度
  • HuggingFace 下载量:反映实际使用广泛程度
  • 第三方适配情况:是否被 LLaMA Factory、vLLM、TensorRT-LLM 等主流框架支持

目前中文场景下,Qwen 系列(阿里云)和 GLM 系列(智谱)社区支持最为完善。

4.3 多模态能力与场景适配性

如果业务涉及图文理解、文档解析等场景,需要选择支持多模态的模型:

模型 多模态版本 支持能力
Qwen3 Qwen2.5-VL / Qwen-VL 图文理解、文档 OCR、视频理解
LLaMA LLaVA 系列(社区) 图文对话
GLM GLM-4V 图文理解

💡 经验:如果不需要多模态能力,不要选多模态模型——它们通常更大、更慢,且纯文本任务上不一定优于同规模纯文本模型。

4.4 推理性能指标

模型选定后,部署时的性能同样关键。以下是常用的推理性能指标:

请求级别指标(用户视角):

指标 全称 含义 建议阈值
TTFT Time To First Token 发送请求到生成第一个 Token 的时间 < 500ms(在线应用)
TPOT Time Per Output Token 每个输出 Token 的平均生成时间 < 50ms(流式流畅)
Latency 端到端延迟 TTFT + TPOT × 输出 Token 数 视业务而定

系统级别指标(运维视角):

指标 含义 说明
Throughput 吞吐量 每秒生成的 Token 总数(所有并发请求合计)
Concurrency 并发数 同时处理的请求数量
GPU Util GPU 利用率 训练时应接近 100%,推理时 70–90% 为佳

📖 参考:Qwen3 系列详细性能数据见 Qwen3 官方说明


五、训练数据准备

5.1 数据量与质量的黄金法则

数据是微调效果的核心。关于数据量,有一个反直觉的结论——质量 >> 数量

  • LIMA 研究(《LIMA: Less Is More for Alignment》):用 1000 条精心标注的提示-回复对微调 650 亿参数的 LLaMA,就能达到良好的跨任务性能。研究发现:扩大数据量而不增加提示多样性,收益有限;而优化数据质量收益显著。
  • 《Maybe Only 0.5% Data Is Needed》:通过聚类方法证明,少量数据(如 1.9M tokens)也能对特定任务模型产生良好的指令调整效果。
  • 不同任务的数据需求差异显著
  • • 翻译、改写、生成任务:200 万条以内数据即可表现出色
  • • 分类、问答、摘要:增加数据量能持续提升(但收益递减)
  • • 数学推理、代码、Chain-of-Thought:对数据质量和模型规模要求更高

5.2 常见微调数据格式

LLaMA Factory 支持多种数据格式,最常用的是 Alpaca 格式:

[  {    "instruction": "你是一个医疗助手,请回答用户的问题。",    "input": "糖尿病患者可以吃西瓜吗?",    "output": "糖尿病患者可以适量食用西瓜,但需注意西瓜含糖量较高(约5%),建议每次不超过100克,并在两餐之间食用,避免血糖骤升。"  }]

也支持 ShareGPT 多轮对话格式:

[  {    "conversations": [      {"from": "human", "value": "帮我写一个 Python 快速排序函数"},      {"from": "gpt", "value": "def quicksort(arr):\n    if len(arr) <= 1:\n        return arr\n    pivot = arr[len(arr) // 2]\n    left = [x for x in arr if x < pivot]\n    middle = [x for x in arr if x == pivot]\n    right = [x for x in arr if x > pivot]\n    return quicksort(left) + middle + quicksort(right)"}    ]  }]

📌 常见微调数据格式详见 LLaMA Factory 数据说明 https://github.com/hiyouga/LLaMA-Factory/blob/main/data/README.md

数据注册:将数据集 JSON 文件放入 LLaMA Factory 的 data/ 目录,然后在 data/dataset_info.json 中注册:

{  "myidentity": {    "file_name": "myidentity.json",    "formatting": "alpaca",    "columns": {      "prompt": "instruction",      "query": "input",      "response": "output"    }  }}

5.3 数据集要求

要素 说明
样本数量 简单任务几百条够用;中等难度上千条;高难度任务最多也不超过 10 万条
样本质量 覆盖目标任务的各种情况,避免数据偏差;高质量样本优先于数量
数据预处理 需要清洗、去重、标注,确保一致性
数据划分 训练集:验证集:测试集 ≈ 6:3:1,用于评估训练过程和最终效果

5.4 数据获取渠道

渠道 地址 特点
魔搭社区(ModelScope) https://www.modelscope.cn/datasets 中文数据丰富
Hugging Face https://huggingface.co/datasets 英文数据为主,覆盖最广

5.5 微调数据集构建工具

当没有现成数据时,可用 AI 辅助生成微调数据:

工具 地址 功能
easy-dataset https://github.com/ConardLi/easy-dataset 从文档自动生成问答对
distilabel https://github.com/argilla-io/distilabel AI 生成 + 质量过滤一体化流程
FastDatasets https://github.com/ZhuLinsen/FastDatasets 快速生成微调数据
OpenRefine https://github.com/OpenRefine/OpenRefine 数据清洗与转换

六、微调方式选择

6.1 全参数微调 vs 参数高效微调

方式 原理 优点 缺点 适用场景
Full Fine-tuning 更新所有参数 效果最好 显存和时间消耗极大 数据充足 + 资源充足
LoRA 冻结原始参数,训练低秩增量矩阵 显存少、速度快、效果接近全参 需选择合适 rank 大多数场景首选
QLoRA LoRA + 4bit 量化基础模型 显存减少 50%+ 可能有精度损失 显存极度受限
Prefix Tuning 在输入前加可训练前缀 参数极少 长文本效果较差 特定生成任务

6.2 LoRA 原理详解

LoRA(Low-Rank Adaptation)的核心思想:

预训练模型权重矩阵 W 的更新量 ΔW 具有低秩特性,因此可以用两个小矩阵 A 和 B 来近似:

ΔW = B × A,其中 B ∈ R^(d×r),A ∈ R^(r×k),r ≪ min(d,k)

前向传播时:

h = W·x + (B·A)·x × (alpha/rank)

LoRA 核心参数:

参数 含义 推荐值
lora_rank (r) 低秩矩阵的秩。越大表示适应能力越强,但参数量也越多 8–64;一般用 8 或 16
lora_alpha 缩放系数,控制 LoRA 更新的影响幅度,实际缩放比例 = alpha/rank 一般设为 rank 的 1–2 倍(如 rank=8,alpha=16)
lora_dropout LoRA 层的 Dropout,防止过拟合 数据量大时设 0;数据少时设 0.1
lora_target 应用 LoRA 的目标模块 all (全部注意力层+FFN)或 q_proj,v_proj

📖 参考:LoRA 详细原理 https://arxiv.org/abs/2106.09685 | 大语言模型微调技术研究综述https://aibook.ren/archives/llm-fine-tuning


七、训练超参数设置

微调时最需要关注的三个核心超参数:

7.1 Epochs(训练轮次)

根据数据集大小动态调整:

数据量 推荐 Epochs
100 条 15
1,000 条 10
5,000–20,000 条 4–5
100,000 条 2–3

💡 经验:领域增强的 SFT 数据不需要太多,质量一定要把握好。一般领域总结回复任务几百条数据即可。小数据量可以适当增大 Epoch,让模型充分收敛。

7.2 Learning Rate(学习率)

  • 推荐范围:SFT 学习率约为预训练学习率的 0.1 倍。例如预训练为 9e-5,则 SFT 建议设为 9e-6
  • • 对于 LoRA 微调,由于只更新低秩矩阵,可适当增大学习率(如 1e-45e-5)。
  • 调整策略
  • • loss 不收敛或震荡大 → 调低
  • • loss 下降过慢 → 调高
  • Warmup 推荐warmup_ratio 建议在 0.005–0.015 之间;学习率较大时可适当增大 warmup。

7.3 Global Batch Size(全局批量大小)

全局 Batch Size = per_device_train_batch_size × GPU 数量 × gradient_accumulation_steps

以文档中的命令为例:

per_device_train_batch_size = 4gradient_accumulation_steps = 8GPU 数量 = 8→ Global Batch Size = 4 × 8 × 8 = 256
  • Batch Size 越大:训练越稳定,但显存占用越高
  • gradient_accumulation_steps(梯度累积步数):模拟大 Batch Size 而不增加实际显存占用。多卡节点增多时,可进一步增大 Batch Size 提高吞吐量。

7.4 学习率调度器

常用选项:

调度器 说明 推荐场景
cosine (余弦退火) 学习率从初始值余弦降低到接近 0 SFT 微调首选 ,训练稳定、收敛好
linear 线性下降 简单任务
constant_with_warmup warmup 后保持恒定 少量步骤微调

八、DeepSpeed 多卡训练命令详解

8.1 DeepSpeed 是什么?

DeepSpeed 是微软开源的分布式深度学习优化库,通过 ZeRO(Zero Redundancy Optimizer) 技术,将模型参数、梯度、优化器状态分散到多张 GPU 上,大幅降低单卡显存需求。

ZeRO 三个阶段对比:

阶段 分片内容 每卡显存节省效果 适用场景
ZeRO Stage 1 优化器状态按 N 卡均分 节省约 4× 优化器状态显存 模型较小、卡数多
ZeRO Stage 2 优化器状态 + 梯度均分 Stage1 基础上再节省梯度显存 中等模型
ZeRO Stage 3 优化器状态 + 梯度 + 模型参数全部均分 单卡显存 ≈ 总需求 / N 大模型首选 (32B+)

8.2 基础训练命令(前台运行)

deepspeed --num_gpus 8 src/train.py \  --deepspeed examples/deepspeed/ds_z3_config.json \  --stage sft \  --model_name_or_path /data/modelscope/models/Qwen/Qwen3-32B/ \  --do_train \  --dataset myidentity \  --template qwen \  --finetuning_type lora \  --output_dir saves/Qwen3-32B/lora/train_2025-06-10-15-17-52 \  --overwrite_cache \  --per_device_train_batch_size 4 \  --gradient_accumulation_steps 8 \  --lr_scheduler_type cosine \  --logging_steps 5 \  --save_steps 100 \  --learning_rate 5e-05 \  --num_train_epochs 100.0 \  --plot_loss True \  --bf16 True \  --trust_remote_code True

参数逐一解析:

参数 含义
--num_gpus 8 8 使用 8 张 GPU 进行训练
--deepspeed ds_z3_config.json ZeRO Stage 3 配置文件 启用 DeepSpeed ZeRO Stage 3 分布式策略
--stage sft sft 训练阶段:监督微调(Supervised Fine-Tuning)
--model_name_or_path Qwen3-32B 路径 基础模型路径(本地或 HuggingFace 路径)
--do_train - 执行训练(而非评估或预测)
--dataset myidentity myidentity 数据集名称(对应 data/dataset_info.json 中的配置)
--template qwen qwen 对话模板,Qwen 系列模型使用 qwen,Qwen3 使用 qwen3
--finetuning_type lora lora 微调方式:LoRA(参数高效微调)
--output_dir saves/… 模型检查点保存路径
--overwrite_cache - 覆盖预处理数据缓存(数据集更新时使用)
--per_device_train_batch_size 4 4 每张 GPU 每步处理的样本数
--gradient_accumulation_steps 8 8 梯度累积步数(全局 Batch = 4×8×8=256)
--lr_scheduler_type cosine cosine 学习率调度器:余弦退火
--logging_steps 5 5 每 5 步记录一次训练日志
--save_steps 100 100 每 100 步保存一次检查点
--learning_rate 5e-05 5×10⁻⁵ 学习率
--num_train_epochs 100.0 100 训练 100 个 Epoch(自我认知数据集一般较小,故 Epoch 较大)
--plot_loss True True 训练完成后生成 loss 曲线图
--bf16 True True 使用 BFloat16 混合精度训练(节省显存,A10/A100/H100 支持)
--trust_remote_code True True 允许加载模型自定义代码(某些模型需要)

8.3 后台运行命令

nohup deepspeed --num_gpus 8 src/train.py \  --deepspeed examples/deepspeed/ds_z3_config.json \  --stage sft \  --model_name_or_path /data/modelscope/models/Qwen/Qwen3-32B/ \  --do_train \  --dataset myidentity \  --template qwen \  --finetuning_type lora \  --output_dir saves/Qwen3-32B/lora/train_2025-06-10-18-17-52 \  --overwrite_cache \  --per_device_train_batch_size 4 \  --gradient_accumulation_steps 8 \  --lr_scheduler_type cosine \  --logging_steps 5 \  --save_steps 100 \  --learning_rate 5e-05 \  --num_train_epochs 100.0 \  --plot_loss True \  --bf16 True \  --trust_remote_code True \  &

⚠️ 关键区别nohup ... & 让训练进程在后台运行,断开 SSH 连接后训练不会中断。建议配合 tail -f nohup.out 实时查看日志。

8.4 正常训练的日志长什么样?

以下是训练正常启动后,你应该看到的日志输出模式:

[INFO|trainer.py:xxxx] Using DeepSpeed ZeRO Stage 3[INFO|trainer.py:xxxx] ***** Running training *****[INFO|trainer.py:xxxx]   Num examples = 500[INFO|trainer.py:xxxx]   Num Epochs = 100[INFO|trainer.py:xxxx]   Instantaneous batch size per device = 4[INFO|trainer.py:xxxx]   Total train batch size (w. parallel, distributed & accumulation) = 256{'loss': 2.5678, 'learning_rate': 0.0, 'epoch': 0.02}{'loss': 2.1234, 'learning_rate': 2.5e-05, 'epoch': 0.04}{'loss': 1.8756, 'learning_rate': 5e-05, 'epoch': 0.06}...{'loss': 0.3456, 'learning_rate': 4.2e-05, 'epoch': 50.0}

判断训练是否正常的几个信号

信号 正常状态 异常信号
Loss 趋势 持续下降并趋于平稳 不下降、震荡剧烈、或先降后升(过拟合)
GPU 利用率 训练阶段接近 100% 长期低于 50%(可能 I/O 瓶颈)
学习率 warmup 后按调度器正常变化 突变或始终为 0
显存占用 稳定在某个值 持续增长(内存泄漏)或 OOM

8.5 关于 BF16 精度

--bf16 True 使用 BFloat16(Brain Float 16)精度训练,而非默认的 FP32。

精度类型 指数位 尾数位 动态范围 精度 显存
FP32 8 23 极大 最高 基准
BF16 8 7 与 FP32 相同 适中 节省 50%
FP16 5 10 较小 适中 节省 50%

BF16 相比 FP16 的优势:指数位与 FP32 相同(8 位),不容易发生溢出(overflow),因此 LLM 训练中 BF16 > FP16。

⚠️ 注意:BF16 需要 Ampere 架构及以上 GPU 支持(A10、A100、H100 等)。V100 不支持 BF16,需改用 FP16。

8.6 DeepSpeed ZeRO Stage 3 配置文件(ds_z3_config.json)

LLaMA Factory 内置的 examples/deepspeed/ds_z3_config.json 典型内容:

{    "train_batch_size": "auto",    "train_micro_batch_size_per_gpu": "auto",    "gradient_accumulation_steps": "auto",    "gradient_clipping": "auto",    "zero_allow_untested_optimizer": true,    "bf16": {        "enabled": "auto"    },    "zero_optimization": {        "stage": 3,        "allgather_partitions": true,        "allgather_bucket_size": 5e8,        "overlap_comm": true,        "reduce_scatter": true,        "reduce_bucket_size": 5e8,        "contiguous_gradients": true,        "offload_optimizer": {            "device": "none"        },        "offload_param": {            "device": "none"        }    }}

关键字段说明:

字段 含义
"stage": 3 启用 ZeRO Stage 3,参数、梯度、优化器状态全部分片
"overlap_comm": true 通信与计算并行,减少等待时间
"offload_optimizer"/"device": "cpu" 将优化器状态 offload 到 CPU 内存(显存不足时启用,但会慢 2–5×)
"offload_param"/"device": "cpu" 将模型参数 offload 到 CPU(ZeRO-Infinity,显存极度不足时)
"allgather_bucket_size": 5e8 AllGather 操作的桶大小,影响通信效率

九、LLaMA Factory CLI 训练命令详解

除了 DeepSpeed 方式,LLaMA Factory 也支持单卡或简单多卡场景,通过 llamafactory-cli train 命令启动:

llamafactory-cli train \    --stage sft \    --do_train True \    --model_name_or_path /data/modelscope/models/Qwen/Qwen3-14B/ \    --preprocessing_num_workers 16 \    --finetuning_type lora \    --template qwen3 \    --flash_attn auto \    --dataset_dir data \    --dataset myidentity \    --cutoff_len 2048 \    --learning_rate 5e-05 \    --num_train_epochs 3.0 \    --max_samples 100000 \    --per_device_train_batch_size 2 \    --gradient_accumulation_steps 8 \    --lr_scheduler_type cosine \    --max_grad_norm 1.0 \    --logging_steps 5 \    --save_steps 100 \    --warmup_steps 0 \    --packing False \    --enable_thinking True \    --report_to none \    --output_dir saves/Qwen3-14B-Instruct/lora/train_2025-06-04-13-49-56 \    --bf16 True \    --plot_loss True \    --trust_remote_code True \    --ddp_timeout 180000000 \    --include_num_input_tokens_seen True \    --optim adamw_torch \    --lora_rank 8 \    --lora_alpha 16 \    --lora_dropout 0 \    --lora_target all

新增/重要参数解析:

参数 含义
--preprocessing_num_workers 16 16 数据预处理并行进程数,加速 tokenization
--template qwen3 qwen3 Qwen3 专用对话模板(区别于 qwen,Qwen3 的特殊格式)
--flash_attn auto auto 自动检测是否启用 Flash Attention 2。Flash Attn 显著加速长序列训练
--cutoff_len 2048 2048 最大输入序列长度(超过截断)。越大显存占用越高
--max_samples 100000 10 万 限制训练样本数上限,避免过大数据集意外超时
--max_grad_norm 1.0 1.0 梯度裁剪(防止梯度爆炸),通常设 1.0
--warmup_steps 0 0 Warmup 步数(此处用 warmup_steps,也可用 warmup_ratio
--packing False False 是否将多个短样本打包成一个序列(提高效率,但可能影响效果)
--enable_thinking True True 启用 Qwen3 的「思考模式」,模型在回答前会生成 think 思考过程
--report_to none none 不上报训练指标到 WandB/TensorBoard(设为 wandb 时需配置 API Key)
--ddp_timeout 180000000 约 50 小时 DDP 分布式超时时间(单位毫秒),防止长训练过程中节点超时断连
--include_num_input_tokens_seen True True 记录已处理的输入 Token 总数,便于监控训练进度
--optim adamw_torch adamw_torch 优化器:PyTorch 原生 AdamW(adamw_torch_fused 性能更好,需 PyTorch 2.0+)
--lora_rank 8 8 LoRA 矩阵的秩
--lora_alpha 16 16 LoRA 缩放系数(alpha/rank = 16/8 = 2,实际缩放比为 2)
--lora_dropout 0 0 LoRA Dropout(数据充足,故设 0)
--lora_target all all 对所有线性层(q/k/v/o/gate/up/down)应用 LoRA

关于 Flash Attention

Flash Attention 是一种高效的注意力计算实现,通过分块(tiling)和重计算(recomputation)技术:

  • • 将显存复杂度从 O(n²·d) 降至 O(n·d)(n 为序列长度,d 为 head 维度)
  • • 训练速度提升 2–4×,对长序列效果尤为显著
  • • 数值结果与标准 Attention 完全一致(不是近似),因此不影响模型精度

设置 --flash_attn auto 时,LLaMA Factory 会自动检测硬件支持情况并决定是否启用。


十、模型评测

训练完成后,需要对微调后的模型进行系统评测,量化效果提升。这是很多人容易忽略、但非常重要的环节。

10.1 评测流程概览

选择评测基准 → 编写/选择配置 → 执行推理 → 评估得分 → 对比分析

模型评测通常从两个维度进行:

维度 方法 目的
客观评测 在标准 Benchmark 上跑分 量化模型能力,便于横向对比
主观评测 人工构造业务测试 Case 评估实际业务场景下的表现

10.2 推荐:OpenCompass

OpenCompass(由上海 AI Lab 开源)是国内最主流的 LLM 评测平台,支持 100+ 评测数据集,覆盖中英文。

安装:

conda create --name opencompass python=3.10 -yconda activate opencompassgit clone https://github.com/open-compass/opencompass.gitcd opencompasspip install -e .

快速评测示例(命令行方式):

# 评测微调后的模型在 GSM8K(数学)和 MMLU(常识推理)上的表现python run.py \    --datasets demo_gsm8k_chat_gen demo_mmlu_chat_gen \    --hf-type chat \    --hf-path /data/modelscope/models/Qwen/Qwen3-14B/ \    --adapter-path saves/Qwen3-14B/lora/train_xxx \    --max-out-len 1024 \    --debug

使用配置文件评测(推荐):

# eval_my_model.pyfrom mmengine.config import read_basewith read_base():    from .datasets.demo.demo_gsm8k_chat_gen import gsm8k_datasets    from .datasets.demo.demo_mmlu_chat_gen import mmlu_datasets    from .models.qwen.hf_qwen2_5_14b_instruct import models as qwen_models# 替换模型路径为微调后的模型for model in qwen_models:    model['path'] = '/data/modelscope/models/Qwen/Qwen3-14B/'    model['adapter_path'] = 'saves/Qwen3-14B/lora/train_xxx'datasets = gsm8k_datasets + mmlu_datasetsmodels = qwen_models
``````plaintext
python run.py eval_my_model.py -w outputs/my_eval --debug

评测结果输出示例:

dataset     version    metric    mode      qwen3-14b-finetuned    qwen3-14b-base----------  ---------  --------  ------  ---------------------  ---------------demo_gsm8k  1d7fe4     accuracy  gen                        72.50            65.31demo_mmlu   393424     accuracy  gen                        68.75            62.06

💡 解读:关注微调前后分数变化。如果目标 Benchmark 分数提升、其他 Benchmark 分数不大幅下降,说明微调效果良好。如果微调后某些任务分数暴跌,可能是"灾难性遗忘"——需要增加训练数据多样性。

10.3 其他评测工具

工具 地址 特点
Lighteval https://github.com/huggingface/lighteval HuggingFace 官方评测工具,与 HF 生态深度集成
lm-evaluation-harness https://github.com/EleutherAI/lm-evaluation-harness EleutherAI 维护,英文基准全面
OpenCompass Hub https://hub.opencompass.org.cn/home 在线评测,无需本地部署

10.4 常用评测基准

基准 测试能力 中文支持
C-Eval 中文综合知识
CMMLU 中文多任务语言理解
GSM8K 数学推理 ✅(有中文版)
MMLU 多任务语言理解 ❌(英文为主)
HumanEval 代码生成 ❌(英文)
MATH 高难度数学推理 ❌(英文)

10.5 主观评测建议

客观 Benchmark 无法完全反映业务表现,建议同时进行主观评测:

    1. 构造 50–100 条业务测试 Case,覆盖典型场景和边界情况
    1. 盲测对比:将微调前后的模型回复混在一起,让业务人员评分
    1. 重点关注
  • • 回答是否准确、完整
  • • 是否出现幻觉(编造事实)
  • • 格式是否符合要求(JSON、表格等)
  • • 安全性(是否生成有害内容)

十一、模型部署

微调完成并通过评测后,需要将模型从「训练格式」转换为「推理格式」,部署到生产环境。

11.1 第一步:LoRA 权重合并

LoRA 微调产出的是轻量级的「适配器权重」,需要与基础模型合并才能独立使用:

llamafactory-cli export \    --model_name_or_path /data/modelscope/models/Qwen/Qwen3-14B/ \    --adapter_name_or_path saves/Qwen3-14B/lora/train_xxx \    --template qwen3 \    --finetuning_type lora \    --export_dir merged_model/Qwen3-14B-finetuned \    --export_size 4 \    --export_legacy_format False

参数说明:

参数 含义
--model_name_or_path 基础模型路径
--adapter_name_or_path LoRA 适配器权重路径(训练输出的 checkpoint)
--template 对话模板,必须与训练时一致
--export_dir 合并后模型保存路径
--export_size 4 保存为 4 个分片文件(便于管理)
--export_legacy_format False 使用 safetensors 格式(比传统 bin 格式更安全)

💡 验证合并结果:合并完成后,检查 merged_model/Qwen3-14B-finetuned/ 目录下应包含 config.jsontokenizer.jsonmodel-00001-of-00004.safetensors 等文件。

11.2 第二步:模型量化(可选)

量化可以将模型体积和显存需求大幅降低,加速推理:

量化方案 精度损失 速度提升 显存节省 适用场景
AWQ(Marlin 内核) 最佳(+61%) 75%(INT4) 生产环境首选
GPTQ 中等 较好(+54%) 75%(INT4) 社区支持广
GGUF CPU 场景最佳 75%(Q4_K_M) 边缘/CPU 部署首选
FP8 极小 很好(+90%) 50% H100/B100 极致性能

推荐策略

  • GPU 服务部署:AWQ + vLLM(速度与精度最佳平衡)
  • 本地/边缘设备:GGUF + llama.cpp(CPU 也能流畅运行)
  • NVIDIA 最新 GPU(H100+):TensorRT-LLM + FP8(近乎无损精度)

11.3 第三步:推理框架部署

方案一:vLLM(推荐,GPU 服务首选)

vLLM 是目前最流行的 LLM 推理框架,支持高并发、连续批处理(continuous batching):

# 安装 vLLMpip install vllm# 启动 OpenAI 兼容 API 服务python -m vllm.entrypoints.openai.api_server \    --model merged_model/Qwen3-14B-finetuned \    --served-model-name my-finetuned-qwen3 \    --tensor-parallel-size 2 \    --gpu-memory-utilization 0.9 \    --max-model-len 4096

启动后可通过 OpenAI 兼容 API 调用:

from openai import OpenAIclient = OpenAI(base_url="http://localhost:8000/v1", api_key="not-needed")response = client.chat.completions.create(    model="my-finetuned-qwen3",    messages=[{"role": "user", "content": "你好,请介绍一下你自己"}],    stream=True)for chunk in response:    print(chunk.choices[0].delta.content, end="")

方案二:Ollama(本地快速体验)

# 导入为 GGUF 格式后ollama create my-qwen3 -f Modelfileollama run my-qwen3

11.4 部署检查清单

检查项 说明
✅ 模型能正常加载 检查显存是否足够、模型文件是否完整
✅ 推理速度满足 SLA TTFT < 500ms,TPOT < 50ms
✅ 并发能力达标 压测验证最大并发数
✅ 输出质量验证 用测试 Case 对比微调前后
✅ 异常处理 超时、长输入、特殊字符等边界情况

十二、总结与资源汇总

12.1 完整流程回顾

GPU 资源准备(nvidia-smi 确认环境)    ↓环境搭建(PyTorch + CUDA + LLaMA Factory + DeepSpeed)    ↓开源模型选择(推荐 Qwen3 系列)    ↓数据准备(质量 >> 数量,推荐 Alpaca 格式)    ↓微调方式选择(大多数场景选 LoRA)    ↓超参数配置(Epochs / LR / Batch Size)    ↓DeepSpeed ZeRO3 + LLaMA Factory 启动训练    ↓模型评测(OpenCompass + 主观评测)    ↓LoRA 合并 → 量化 → vLLM 部署

12.2 常见问题 FAQ

Q:训练时显存 OOM 怎么办?

  • • 减小 per_device_train_batch_size(如从 4 → 2)
  • • 减小 cutoff_len(如从 2048 → 1024)
  • • 启用 gradient_checkpointing--gradient_checkpointing True
  • • 在 ds_z3_config.json 中开启 "offload_optimizer": {"device": "cpu"}

Q:loss 曲线先下降后上升是怎么回事?

  • • 这是过拟合信号。解决方案:减小 Epochs、增大 dropout、增加数据多样性。

Q:如何判断训练完成了?

  • • loss 收敛(不再明显下降)
  • • 在验证集上的指标不再提升
  • • 主观评测(用业务 Case 测试模型回复质量)

Q:微调后模型"变笨了",能力反而下降?

  • • 这是灾难性遗忘,常见于数据量小、领域过于集中。解决方案:在训练数据中混入 10–20% 的通用对话数据,保持模型的通用能力。

Q:多卡训练频繁 NCCL 超时?

  • • 检查网络连接(多节点场景)
  • • 增大 --ddp_timeout(如 180000000ms ≈ 50 小时)
  • • 设置环境变量 export NCCL_DEBUG=INFO 查看详细通信日志

2026年AI行业最大的机会,毫无疑问就在应用层

字节跳动已有7个团队全速布局Agent

大模型岗位暴增69%,年薪破百万!

腾讯、京东、百度开放招聘技术岗,80%与AI相关……

如今,超过60%的企业都在推进AI产品落地,而真正能交付项目的 大模型应用开发工程师 **,**却极度稀缺!

落地AI应用绝对不是写几个prompt,调几个API就能搞定的,企业真正需要的,是能搞定这三项核心能力的人:

✅RAG:融入外部信息,修正模型输出,给模型装靠谱大脑

✅Agent智能体:让AI自主干活,通过工具调用(Tools)环境交互,多步推理完成复杂任务。比如做智能客服等等……

✅微调:针对特定任务优化,让模型适配业务

目前,脉脉上有超过1000家企业发布大模型相关岗位,人工智能岗平均月薪7.8w!实习生日薪高达4000!远超其他行业收入水平!

技术的稀缺性,才是你「值钱」的关键!

具备AI能力的程序员,比传统开发高出不止一截!有的人早就转行AI方向,拿到百万年薪!👇🏻👇🏻

图片

AI浪潮,正在重构程序员的核心竞争力!现在入场,仍是最佳时机!

我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

⭐️从大模型微调到AI Agent智能体搭建

剖析AI技术的应用场景,用实战经验落地AI技术。从GPT到最火的开源模型,让你从容面对AI技术革新!

大模型微调

  • 掌握主流大模型(如DeepSeek、Qwen等)的微调技术,针对特定场景优化模型性能。

  • 学习如何利用领域数据(如制造、医药、金融等)进行模型定制,提升任务准确性和效率。

RAG应用开发

  • 深入理解检索增强生成(Retrieval-Augmented Generation, RAG)技术,构建高效的知识检索与生成系统。
  • 应用于垂类场景(如法律文档分析、医疗诊断辅助、金融报告生成等),实现精准信息提取与内容生成。

AI Agent智能体搭建

  • 学习如何设计和开发AI Agent,实现多任务协同、自主决策和复杂问题解决。
  • 构建垂类场景下的智能助手(如制造业中的设备故障诊断Agent、金融领域的投资分析Agent等)。

图片

如果你也有以下诉求:

快速链接产品/业务团队,参与前沿项目

构建技术壁垒,从竞争者中脱颖而出

避开35岁裁员危险期,顺利拿下高薪岗

迭代技术水平,延长未来20年的新职业发展!

……

那这节课你一定要来听!

因为,留给普通程序员的时间真的不多了!

立即扫码,即可免费预约

「AI技术原理 + 实战应用 + 职业发展

「大模型应用开发实战公开课」

👇👇

在这里插入图片描述

👍🏻还有靠谱的内推机会+直聘权益!!

完课后赠送:大模型应用案例集、AI商业落地白皮书

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐