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 训练优化建议

  1. 增加数据量:15 条数据偏少,建议至少 100-500 条
  2. 数据多样性:覆盖更多情绪场景(开心、愤怒、焦虑等)
  3. 增加训练轮数:当前 3 epoch,可尝试 5-10 epoch
  4. 调整 LoRA 参数:增大 r 值(如 r=16)可提升效果但增加参数量
  5. 使用 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

posted @ 2026-11-02 13:48  园中小蚊子  阅读(3)  评论(0)    收藏  举报