Ubuntu部署qwen2.5-1.5b-instruct模型与LORA训练总结
这两天,在网上刷到了模型LORA训练,心血来潮,自己在本地Ubuntu搞了下,流程跑通记录一下,留个痕!
参考文档:https://blog.csdn.net/qq_36991535/article/details/160481241
耗费一天时间,整体跑通了,因为电脑配置不高,踩了很多坑!一是ollama下载模型不支持微调和训练,二是电脑无GPU,内存不高(只有8G)跑不起VLLM!
以下是AI生成的总结内容,方便日后查阅:
Qwen2.5-1.5B-Instruct LoRA 微调训练总结
训练日期:2026-10-30
训练环境:Ubuntu 22.04 虚拟机(2 核 CPU / 7.7G 内存 / 46G 磁盘)
训练目标:将 Qwen2.5-1.5B-Instruct 微调为温柔知性女生的情感陪伴助手
一、技术架构
1.1 框架选型
组件 框架/库 版本 用途
基础模型 Qwen2.5-1.5B-Instruct - 通义千问 15 亿参数指令微调模型
微调框架 HuggingFace Transformers 5.20.2 模型加载与训练
高效微调 PEFT (LoRA) 0.21.2 低秩适配,仅训练 0.07% 参数
数据处理 HuggingFace Datasets 5.1.0 JSONL 数据加载与预处理
深度学习 PyTorch (CPU) 2.14.1 张量计算与自动微分
模型下载 ModelScope 1.40.2 国内源加速模型下载
分词器 SentencePiece 0.2.2 Qwen 分词器依赖
训练加速 Accelerate 1.15.0 训练流程管理
1.2 LoRA 架构
Qwen2.5-1.5B-Instruct (15.4 亿参数)
├── 冻结层:99.93% 参数(不训练)
└── LoRA 适配器:0.07% 参数(1,089,536 个)
├── q_proj(Query 投影)
└── v_proj(Value 投影)
LoRA 配置:
- r=8(秩)
- lora_alpha=16(缩放因子)
- lora_dropout=0.05
- target_modules=["q_proj", "v_proj"]
1.3 数据格式
采用 ChatML 格式(Qwen 官方对话模板):
<|im_start|>system
系统提示词<|im_end|>
<|im_start|>user
用户输入<|im_end|>
<|im_start|>assistant
助手回复<|im_end|>
二、完整训练流程
阶段 1:环境准备
1.1 安装 pip(系统已预装 Python 3.10)
sudo apt install -y python3-pip
1.2 安装 PyTorch CPU 版(无 GPU 环境)
pip install torch --index-url https://download.pytorch.org/whl/cpu
1.3 安装核心依赖
pip install transformers peft datasets accelerate
1.4 安装分词器依赖
pip install sentencepiece
1.5 安装国内源模型下载工具
pip install modelscope -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
阶段 2:数据准备
2.1 创建训练数据文件
文件:/home/ubuntu/training_data.jsonl
格式:每行一个 JSON 对象,包含 messages 数组
数量:15 条对话数据
主题:情绪疏导、压力缓解、自我怀疑、孤独感等
数据示例:
{
"messages": [
{"role": "system", "content": "你是一位温柔知性、善解人意的女生..."},
{"role": "user", "content": "我今天心情特别差,什么事都不顺心。"},
{"role": "assistant", "content": "抱抱你呀,辛苦啦🥺 生活偶尔就是会有一段乱糟糟的低谷期..."}
]
}
阶段 3:模型下载
3.1 使用 ModelScope 从国内源下载(避免 HuggingFace 网络超时)
python3 -c "
from modelscope import snapshot_download
snapshot_download('Qwen/Qwen2.5-1.5B-Instruct', cache_dir='/home/ubuntu/models/qwen2.5-1.5b-instruct')
"
3.2 模型文件位置
/home/ubuntu/models/qwen2.5-1.5b-instruct/models/Qwen--Qwen2.5-1.5B-Instruct/snapshots/master/
阶段 4:训练配置
文件:/home/ubuntu/train_lora.py
关键参数:
| 参数 | 值 | 说明 |
|---|---|---|
| per_device_train_batch_size | 1 | CPU 环境最小批次 |
| gradient_accumulation_steps | 8 | 等效 batch_size=8 |
| learning_rate | 1.5e-4 | LoRA 推荐学习率 |
| num_train_epochs | 3 | 训练轮数 |
| max_length | 256 | 序列最大长度 |
| optim | adamw_torch | CPU 兼容优化器 |
阶段 5:执行训练
cd /home/ubuntu && python3 train_lora.py
训练过程:
- 总步数:6 步(15 条 × 3 epoch ÷ 1 batch ÷ 8 累积)
- 耗时:约 25 分钟(CPU)
- 输出:
/home/ubuntu/output/lora-checkpoints/
三、踩坑记录
坑 1:HuggingFace 网络超时
现象:pip install 和模型下载均超时
原因:国内访问 HuggingFace 和 Python 官方源不稳定
解决:
- pip 安装使用阿里云镜像:
-i https://mirrors.aliyun.com/pypi/simple/ - 模型下载使用 ModelScope 国内源
坑 2:OOM(内存不足)导致进程被 Kill
现象:训练第一步时进程被系统 Killed
原因:PyTorch 默认一次性预留大量内存,7.7G 内存不足以同时容纳模型+梯度+优化器状态
解决:
# 1. 限制 CPU 线程数
os.environ["OMP_NUM_THREADS"] = "1"
torch.set_num_threads(1)
# 2. 限制 PyTorch 最大内存
max_memory={0: "6GB"}
# 3. 启用梯度检查点(用计算换内存)
model.gradient_checkpointing_enable()
# 4. 减小序列长度
max_length=256 # 从 512 降到 256
坑 3:ModelScope 下载路径嵌套
现象:模型下载后找不到文件
原因:ModelScope 将文件放在 models/Qwen--Qwen2.5-1.5B-Instruct/snapshots/master/ 深层目录
解决:使用 find 命令定位实际路径,然后修正脚本中的 MODEL_CACHE
坑 4:Modelfile 三引号语法错误
现象:ollama create 报错 command must be one of "from", "license"...
原因:Ollama Modelfile 不支持 Python 风格的三引号 """
解决:SYSTEM 指令后使用单行双引号格式
坑 5:依赖模块缺失
现象:训练脚本报 ModuleNotFoundError
原因:pip 安装到用户目录,部分模块未在系统路径中
解决:逐个检查并安装缺失模块(datasets、transformers、peft、sentencepiece)
四、生成文件清单
| 文件 | 路径 | 大小 | 用途 |
|---|---|---|---|
| 训练数据 | /home/ubuntu/training_data.jsonl | ~15KB | 15 条对话 |
| 训练脚本 | /home/ubuntu/train_lora.py | ~3KB | LoRA 微调 |
| 测试脚本 | /home/ubuntu/test_model.py | ~2KB | 批量测试模型效果 |
| 对话脚本 | /home/ubuntu/chat.py | ~2KB | 交互式对话(类似 Ollama) |
| 依赖清单 | /home/ubuntu/requirements.txt | ~100B | Python 依赖包列表 |
| LoRA 配置 | output/lora-checkpoints/adapter_config.json | 1.2KB | LoRA 适配器配置 |
| LoRA 权重 | output/lora-checkpoints/adapter_model.safetensors | 4.3MB | 训练好的 LoRA 权重 |
| 分词器 | output/lora-checkpoints/tokenizer.json | 11.4MB | Qwen 分词器 |
| 对话模板 | output/lora-checkpoints/chat_template.jinja | 2.5KB | ChatML 对话模板 |
| 检查点 4 | output/lora-checkpoints/checkpoint-4/ | 24MB | 第 4 步检查点(含优化器状态) |
| 检查点 6 | output/lora-checkpoints/checkpoint-6/ | - | 第 6 步最终检查点 |
| 训练总结 | /home/ubuntu/TRAINING_SUMMARY.md | 本文档 | 完整训练记录 |
文件用途详解
adapter_model.safetensors(4.3MB)
- 核心产出,LoRA 权重文件
- 仅 4.3MB,可轻松分享和部署
- 需配合基础模型使用
adapter_config.json
- LoRA 配置参数(r、alpha、target_modules 等)
- 加载权重时必须同时存在
checkpoint-4 / checkpoint-6
- 训练中间检查点
- 包含优化器状态(optimizer.pt),可用于恢复训练
- 最终部署只需根目录的 adapter_model.safetensors
五、后续注意事项
5.1 模型部署
方式一:合并后部署 Ollama
python3 -c "
from transformers import AutoModelForCausalLM
from peft import PeftModel
base = AutoModelForCausalLM.from_pretrained('模型路径', trust_remote_code=True)
model = PeftModel.from_pretrained(base, 'output/lora-checkpoints')
merged = model.merge_and_unload()
merged.save_pretrained('/home/ubuntu/qwen-girlfriend')
"
#重新部署 Ollama
docker run -d --name ollama -p 11434:11434 -v /home/ubuntu:/models ollama/ollama
docker exec ollama ollama create girlfriend -f Modelfile
方式二:Python API 调用
from peft import PeftModel model = PeftModel.from_pretrained(base_model, "output/lora-checkpoints")
5.2 训练优化建议
- 增加数据量:15 条数据偏少,建议至少 100-500 条
- 数据多样性:覆盖更多情绪场景(开心、愤怒、焦虑等)
- 增加训练轮数:当前 3 epoch,可尝试 5-10 epoch
- 调整 LoRA 参数:增大 r 值(如 r=16)可提升效果但增加参数量
- 使用 GPU:CPU 训练 25 分钟,GPU 仅需 1-2 分钟
5.3 备份建议
# 备份核心文件(仅 4.3MB)
tar -czf lora-backup.tar.gz \
output/lora-checkpoints/adapter_model.safetensors \
output/lora-checkpoints/adapter_config.json \
training_data.jsonl \
train_lora.py \
TRAINING_SUMMARY.md
5.4 面试要点
- 为什么用 LoRA:全量微调 15 亿参数需要大量 GPU 显存,LoRA 仅训练 0.07% 参数(109 万),4.3MB 权重即可部署
- 为什么选 Qwen2.5-1.5B:轻量级模型,CPU 可运行,适合资源受限场景
- ChatML 格式:Qwen 官方对话模板,支持 system/user/assistant 多角色
- OOM 解决方案:max_memory 限制 + gradient_checkpointing + 减小 max_length
- 国内网络优化:ModelScope 替代 HuggingFace,阿里云镜像替代 PyPI
六、快速复现命令
# 1. 安装依赖
pip install torch --index-url https://download.pytorch.org/whl/cpu
pip install transformers peft datasets accelerate sentencepiece
pip install modelscope -i https://mirrors.aliyun.com/pypi/simple/
# 2. 下载模型
python3 -c "from modelscope import snapshot_download; snapshot_download('Qwen/Qwen2.5-1.5B-Instruct', cache_dir='./models')"
# 3. 准备数据(JSONL 格式,每行一个 {"messages": [...]})
# 文件:training_data.jsonl
# 4. 修改 train_lora.py 中的路径配置
# 5. 启动训练
python3 train_lora.py
# 6. 测试效果
python3 test_model.py
# 7. 交互对话
python3 chat.py
📅 生成时间:2026-10-30
📝 文档版本:v1.0
💾 备份位置:/home/ubuntu/TRAINING_SUMMARY.md

浙公网安备 33010602011771号