大模型微调零基础入门教程:从环境搭建到跑通第一个模型
动手前的准备清单
在开始大模型微调之前,先确认你手头有没有这些“武器”。
最核心的是显卡,NVIDIA RTX 3090 或 4090 都能跑,显存最好在 12GB 以上。
如果没有这么强的显卡,也可以用云服务器,比如 AutoDL、恒源云,按小时租用就行。
操作系统推荐 Ubuntu 22.04,Windows 也能用,但 Linux 环境更省心。
你的硬盘至少留出 50GB 空闲空间,用于存放模型权重和数据集。
还需要一个 Python 3.10 环境,建议用 Miniconda 管理虚拟环境,避免和系统 Python 打架。
最后,准备一个小数据集,比如 100 条中文问答,格式可以用 JSON 文件,每条包含 "instruction" 和 "output" 字段。
如果你没有现成的,去 GitHub 搜 alpaca_chinese_dataset 下载。
搭建微调环境:一步一步来
第一件事,创建虚拟环境并激活:
conda create -n finetune python=3.10 -y
conda activate finetune
然后安装 PyTorch,建议去 PyTorch 官网根据你的 CUDA 版本复制命令。
一般用 CUDA 12.1 的版本:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
接着安装 Hugging Face 的核心库和加速库:
pip install transformers datasets accelerate peft bitsandbytes
如果你打算用 LLaMA-Factory(一个非常好用的微调工具),直接克隆项目再安装:
git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -r requirements.txt
最后下载一个基座模型。
新手推荐用 Qwen2.5-1.5B-Instruct,只有 1.5B 参数,显存压力小。
通过 Hugging Face 镜像站下载:
huggingface-cli download Qwen/Qwen2.5-1.5B-Instruct --local-dir ./Qwen2.5-1.5B-Instruct
如果下载慢,可以用国内镜像 HF_ENDPOINT=https://hf-mirror.com 再试。
跑通第一条微调命令
用 LLaMA-Factory 做 LoRA 微调最简单。
进入项目目录,创建一个数据集文件 data/custom.json,格式如下:
[
{
"instruction": "写一首五言诗",
"output": "床前明月光,疑是地上霜。"
}
]
然后在 data/dataset_info.json 里注册这个数据集,加上:
"custom": {
"file_name": "custom.json",
"columns": {
"prompt": "instruction",
"response": "output"
}
}
接着运行微调脚本(单卡环境):
CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \
--stage sft \
--model_name_or_path ./Qwen2.5-1.5B-Instruct \
--dataset custom \
--template qwen \
--finetuning_type lora \
--output_dir ./output \
--per_device_train_batch_size 2 \
--gradient_accumulation_steps 4 \
--num_train_epochs 3 \
--logging_steps 10 \
--save_steps 100
看到终端里输出 Training completed 并且没有报错,说明微调已经跑通了。
整个过程在 1.5B 模型上大概 10 分钟就完成。
新手最容易遇到的几个坑
坑一:CUDA 内存不足——解决方法:减小 per_device_train_batch_size 到 1,启用 gradient_checkpointing。
在命令中加入 --gradient_checkpointing 参数。
坑二:数据集格式不对——LLaMA-Factory 要求 instruction 和 output 都是字符串,并且不能有空值。
用 Python 检查:
import json
with open('data/custom.json', 'r') as f:
data = json.load(f)
print(len(data), type(data[0]["instruction"]))
坑三:找不到模型文件——确认 model_name_or_path 指向的路径包含 config.json 和 pytorch_model.bin。
如果本地没有下载完整,用上面提到的 huggingface-cli download 重新下载。
坑四:TGI 或 transformers 版本冲突——建议在虚拟环境中重新安装 LLaMA-Factory 的 requirements.txt,不要混装不同版本。
如何确认微调效果
训练结束后,在 ./output 文件夹里会生成检查点。
用下面的命令加载训练好的 LoRA 权重并测试对话:
python src/cli_demo.py \
--model_name_or_path ./Qwen2.5-1.5B-Instruct \
--adapter_name_or_path ./output \
--template qwen \
--finetuning_type lora
输入你训练时用过的指令,比如“写一首五言诗”,看输出是否和训练数据中你给的答案一致。
如果模型输出了你希望的内容(或者类似),说明微调成功了。
更严谨一些,可以画损失曲线。
在训练过程中 logging_steps 设为 10,程序会在 ./output/trainer_log.jsonl 里记录每个日志步的 loss。
用 matplotlib 画个图,如果 loss 从 1.5 降到 0.1 左右,就说明模型确实学进去了。
如果你正在处理大模型微调零基础入门教程,建议先按本文步骤完整执行,再根据自己的环境和数据集做调整;
遇到异常时优先回看避坑和高频问题部分。