微调环境准备
工欲善其事,必先利其器。这一篇我们把从硬件到 Python 库的整套环境搭建好。
1. 硬件准备
GPU 选择
微调对 GPU 显存(VRAM) 要求高,对算力要求次之。常见显卡参考:
| GPU 型号 | 显存 | 适合规模 |
|---|---|---|
| RTX 3060 | 12GB | QLoRA 7B 紧张 |
| RTX 4070 / 4070 Ti | 12-16GB | QLoRA 7B |
| RTX 3090 / 4090 | 24GB | QLoRA 13B、LoRA 7B |
| A6000 / 6000 Ada | 48GB | LoRA 13B、QLoRA 70B |
| A100 40GB | 40GB | 全量微调 7B |
| A100 / H100 80GB | 80GB | 全量微调 13B |
如果没有本地显卡,可以使用云服务:
- Google Colab:免费 T4(16GB),Pro 提供 A100
- Kaggle:免费 P100(16GB)/ T4 x2
- AutoDL / 智星云(国内):按小时租 4090、A100
- RunPod / Vast.ai:海外按小时租 GPU
系统要求
- 操作系统:Linux(Ubuntu 22.04 推荐)或 WSL2
- CUDA:12.1+ (和 PyTorch 版本对应)
- 内存:建议 32GB+
- 硬盘:模型文件大,建议 500GB+ SSD
2. 检查 GPU 和驱动
输出示例:
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.86.10 Driver Version: 535.86.10 CUDA Version: 12.2 |
+-----------------------------------------+----------------------+----------------------+
| 0 NVIDIA GeForce RTX 4090 On | ... | 24564MiB |
+-----------------------------------------+----------------------+----------------------+
3. 创建 Python 虚拟环境
强烈推荐使用 conda 管理环境,能避免 CUDA 版本冲突:
# 安装 Miniconda(如果没有)
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
# 创建专用环境
conda create -n llm-finetune python=3.10 -y
conda activate llm-finetune
4. 安装 PyTorch
到 PyTorch 官网 选择对应的 CUDA 版本。CUDA 12.1 示例:
验证安装:
import torch
print(torch.__version__) # 2.4.0+cu121
print(torch.cuda.is_available()) # True
print(torch.cuda.device_count()) # 1
print(torch.cuda.get_device_name(0))# NVIDIA GeForce RTX 4090
5. 安装核心微调库
pip install transformers==4.45.0 \
datasets==3.0.0 \
accelerate==0.34.0 \
peft==0.13.0 \
trl==0.11.0 \
bitsandbytes==0.43.3 \
sentencepiece \
protobuf
各库的作用:
| 库 | 作用 |
|---|---|
transformers |
HuggingFace 核心库,加载模型和分词器 |
datasets |
数据集加载与处理 |
accelerate |
分布式训练、混合精度 |
peft |
LoRA 等参数高效微调方法 |
trl |
SFT、DPO、PPO 等对齐训练 |
bitsandbytes |
4bit/8bit 量化(QLoRA 必备) |
sentencepiece |
一些模型(Llama、Qwen)的分词器依赖 |
6. 安装可选工具
Flash Attention 2(提速 + 省显存):
需要 CUDA 11.6+ 和 Ampere 架构(30 系/A 系)以上的显卡。
训练监控(强烈推荐):
评估指标:
7. 验证完整环境
新建 check_env.py:
import torch
import transformers
import peft
import trl
import datasets
import bitsandbytes as bnb
print(f"PyTorch: {torch.__version__}")
print(f"CUDA: {torch.version.cuda}")
print(f"GPU available: {torch.cuda.is_available()}")
print(f"GPU name: {torch.cuda.get_device_name(0) if torch.cuda.is_available() else 'N/A'}")
print(f"GPU memory: {torch.cuda.get_device_properties(0).total_memory / 1e9:.1f} GB")
print()
print(f"transformers: {transformers.__version__}")
print(f"peft: {peft.__version__}")
print(f"trl: {trl.__version__}")
print(f"datasets: {datasets.__version__}")
print(f"bitsandbytes: {bnb.__version__}")
# 简单的 GPU 加载测试
x = torch.randn(1000, 1000).cuda()
y = x @ x
print(f"\nGPU 计算正常: {y.shape}, {y.device}")
运行:
8. HuggingFace 配置
登录 HuggingFace
下载 Llama、Qwen 等模型需要登录:
将 token 粘贴进去(在 huggingface.co/settings/tokens 创建)。
配置国内镜像(可选)
国内访问慢可以用 hf-mirror:
或写入 ~/.bashrc 永久生效。
修改模型缓存目录
模型文件很大,默认存在 ~/.cache/huggingface/。如果系统盘空间小,建议改到大盘:
9. 下载基座模型
下载一个小模型用于测试。这里用 Qwen2.5-0.5B:
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "Qwen/Qwen2.5-0.5B-Instruct"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name, device_map="auto")
inputs = tokenizer("你好", return_tensors="pt").to("cuda")
outputs = model.generate(**inputs, max_new_tokens=50)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
如果能正常输出,说明环境完全 OK,可以开始微调之旅了。
10. 常见问题
问题 1:CUDA out of memory
降低 batch size,或使用梯度累积、QLoRA 等技术(后续章节详细介绍)。
问题 2:bitsandbytes 安装失败 / 找不到 GPU
# 重新安装匹配的版本
pip uninstall bitsandbytes
pip install bitsandbytes --upgrade
python -m bitsandbytes # 检查
问题 3:模型下载慢/失败
设置 HF_ENDPOINT 国内镜像,或使用 modelscope 从魔搭社区下载:
from modelscope import snapshot_download
model_dir = snapshot_download("qwen/Qwen2.5-0.5B-Instruct")
问题 4:Flash Attention 编译失败
通常是 CUDA 版本不匹配。可以先跳过,对小规模训练影响不大。
总结
- 微调对显存要求高,消费级显卡推荐 24GB 显存的 3090/4090
- 推荐 conda 管理环境,避免 CUDA 冲突
- 核心库:
transformers + peft + trl + bitsandbytes - 国内用户配置
HF_ENDPOINT镜像或使用 modelscope 下载模型 - 用
check_env.py一次性验证整套环境