1. 项目概述
最近在本地尝试用LLaMa-Factory微调Qwen2.5 0.5B模型,整个过程踩了不少坑,也积累了一些实战经验。这个方案特别适合想在消费级显卡上跑通大模型微调全流程的开发者。我用的是一张RTX 3090显卡,24GB显存刚好够用。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备
2.1 安装Ollama
Ollama的安装其实很简单,但国内下载模型可能会遇到网络问题。我推荐使用国内镜像源加速下载:
bash复制# 官方安装命令
curl -fsSL https://ollama.com/install.sh | sh
# 国内用户可尝试添加环境变量
export OLLAMA_HOST=mirror.ollama.com
安装完成后,建议先运行ollama list检查服务是否正常启动。如果遇到权限问题,可能需要将当前用户加入docker组(如果使用docker方式运行)。
2.2 获取Qwen2.5 0.5B模型
这个0.5B参数的版本特别适合在消费级显卡上微调:
bash复制ollama pull qwen2.5:0.5b
如果下载速度慢,可以尝试以下方法:
- 使用
--insecure参数跳过TLS验证 - 设置HTTP代理
- 更换下载时段(凌晨速度通常较快)
注意:0.5B版本虽然参数较少,但在特定任务上经过微调后,效果可以接近更大规模的模型。
3. LLaMa-Factory配置
3.1 安装部署
LLaMa-Factory的GitHub仓库提供了详细的安装指南:
bash复制git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -r requirements.txt
建议使用Python 3.9或3.10环境,避免版本兼容性问题。我遇到过PyTorch版本冲突导致CUDA不可用的情况,最终通过以下命令解决:
bash复制pip install torch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 --index-url https://download.pytorch.org/whl/cu118
3.2 配置文件调整
微调Qwen需要特别注意几个关键配置:
- 修改
train_args.yaml中的model_name_or_path指向本地模型路径 - 设置
fp16: true以节省显存 - 调整
per_device_train_batch_size根据显存大小(0.5B模型建议从4开始尝试)
4. 微调实战
4.1 数据准备
我使用了一个约5万条的中文问答数据集,格式如下:
json复制{
"instruction": "解释神经网络的工作原理",
"input": "",
"output": "神经网络是模仿人脑..."
}
关键技巧:
- 数据最好先做清洗和去重
- 保持output字段的质量非常重要
- 对于0.5B小模型,数据量在1-5万条足够
4.2 启动微调
运行命令示例:
bash复制python src/train_bash.py \
--stage sft \
--model_name_or_path /path/to/qwen2.5-0.5b \
--do_train \
--dataset my_dataset \
--finetuning_type lora \
--output_dir ./output \
--overwrite_cache \
--per_device_train_batch_size 4 \
--gradient_accumulation_steps 4 \
--lr_scheduler_type cosine \
--logging_steps 10 \
--save_steps 1000 \
--learning_rate 5e-5 \
--num_train_epochs 3 \
--fp16
4.3 参数调优经验
经过多次实验,我发现对于0.5B模型:
- 学习率5e-5是最佳起点
- batch size可以适当增大到8(如果显存够)
- 训练3个epoch通常就能收敛
- 使用LoRA时,rank设为8-16足够
5. 常见问题解决
5.1 显存不足
如果遇到CUDA out of memory错误,可以尝试:
- 减小batch size
- 开启gradient checkpointing
- 使用更小的LoRA rank
- 尝试
--fp16或--bf16
5.2 微调效果不佳
可能原因及解决方案:
- 学习率不合适 - 尝试3e-5到1e-4之间的值
- 数据质量差 - 检查并清洗数据
- 训练轮次不足 - 适当增加epoch
- 模型容量不够 - 考虑换更大的模型
5.3 推理部署
微调完成后,可以使用Ollama加载新模型:
bash复制ollama create my-qwen -f Modelfile
ollama run my-qwen
其中Modelfile内容示例:
code复制FROM /path/to/finetuned_model
TEMPLATE """{{.System}}
{{.Prompt}}"""
SYSTEM "你是一个有帮助的AI助手"
6. 性能优化技巧
- Flash Attention:安装flash-attn可以显著提升训练速度
- 梯度累积:适当增大gradient_accumulation_steps可以模拟更大的batch size
- 混合精度:fp16/bf16能减少显存占用
- 数据加载:使用内存映射文件加速大数据集加载
我在RTX 3090上的实测数据:
- 原始训练速度:约800 samples/sec
- 开启flash-attn后:约1200 samples/sec
- 内存占用从22GB降到18GB
7. 实际应用建议
对于0.5B的小模型,最适合的场景包括:
- 特定领域的问答系统
- 文本分类和情感分析
- 数据量较小的垂直领域应用
- 需要快速迭代的实验性项目
不建议用于:
- 需要强推理能力的复杂任务
- 开放域的创意写作
- 多轮复杂对话系统
这个配置最大的优势是可以在单卡上快速完成全流程实验,非常适合:
- 算法工程师快速验证想法
- 初创公司低成本部署
- 学术研究中的基线实验
