Skip to content

About

2026春《深度学习》课程 Project02 报告(刘承龙、韩玉轩、潘旭)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Project 2 - Instruction Fine-tuning (Alpaca-style + LoRA)

选择任务:任务 A(Instruction Fine-tuning 实践)

本小组参考 Stanford Alpaca 的思想,基于小型开源底座模型 Qwen2.5-0.5B,使用 LoRA 参数高效微调方法在 Alpaca-cleaned 指令数据集上完成指令微调实验,并对比了微调前后模型在多种类型指令上的输出效果。最终报告见 report/project_report.pdf。


小组成员及分工

成员 职责
韩玉轩 全流程工程实现:数据集处理、环境配置、训练/推理代码编写、模型微调、实验记录,产出所有原始实验文件及基础素材
潘旭 撰写项目 README.md,整合实验信息,确保内容完整、格式规范、信息准确
刘承龙 实验深度分析、最终项目报告编写、GitHub 仓库规整与合规检查、小雅平台提交

使用的模型、数据集与微调方法

底座模型

  • 模型名称:Qwen/Qwen2.5-0.5B
  • 参数量:0.5B
  • 加载方式:从 Hugging Face 在线加载(不完整上传权重)

数据集

  • 数据集名称:yahma/alpaca-cleaned
  • 数据格式:Alpaca-style(包含 instruction、input、output 三个字段)
  • 数据规模:原始 2000 条,清洗后保留 1995 条
  • 划分方式:训练集 95%(1895 条),测试集 5%(100 条)
  • 清洗操作:去重、过滤空样本、过滤过短输出

微调方法

  • 方法:LoRA(Low‑Rank Adaptation)
  • 框架:Hugging Face transformers + peft + trl + datasets + accelerate
  • 训练设备:NVIDIA GeForce RTX 4060 Laptop GPU(8GB 显存)

环境配置与依赖安装

为了规避系统盘空间不足,所有虚拟环境、pip 缓存和 Hugging Face 缓存均放置在 E 盘。

一键配置脚本

在项目根目录下执行(Windows PowerShell):

.\setup_env.ps1

该脚本会自动创建虚拟环境、安装依赖并设置缓存路径。

手动配置步骤(备用)

  1. 创建虚拟环境(示例路径):

    powershell

    python -m venv E:\Ax\深度学习实验2_env
    
  2. 激活环境:

    powershell

    E:\Ax\深度学习实验2_env\Scripts\Activate.ps1
    
  3. 设置环境变量(加速 Hugging Face 下载):

    powershell

    $env:HF_HOME = "E:\Ax\huggingface_cache"
    $env:HF_ENDPOINT = "https://hf-mirror.com"
    
  4. 安装依赖:

    powershell

    pip install -r requirements.txt --cache-dir E:\Ax\pip_cache
    

关键依赖版本

  • Python 3.13
  • torch 2.6.0+cu124
  • transformers, peft, trl, datasets, accelerate

完整的依赖列表见 requirements.txt。


数据预处理

运行以下命令对原始数据集进行清洗、格式化和划分:

bash

python data_preprocess.py --config configs/train_config.yaml

处理结果:

  • 原始样本:2000 条
  • 清洗后:1995 条
  • 训练集:1895 条
  • 测试集:100 条

预处理代码会按照 train_config.yaml 中的 max_samples 和划分比例进行处理,并保存为 Hugging Face Dataset 格式供后续训练使用。


模型训练

训练超参数(configs/train_config.yaml)

参数 值
LoRA rank (r) 16
LoRA alpha 32
LoRA dropout 0.05
学习率 2e-4
批大小 (per device) 4
梯度累积步数 2
有效批大小 8
最大序列长度 512
训练轮数 1 epoch
总训练步数 237
FP16 True
梯度检查点 True

启动训练

bash

python train_lora.py --config configs/train_config.yaml

训练日志和 Loss 曲线图 分别保存在:

  • results/training_log.txt
  • results/loss_curve.png

训练耗时约 4.92 分钟,最终训练损失为 1.2177。


推理与对比

测试指令集

我们设计了 6 大类共 12 条测试指令,涵盖:

  1. 问答(2 条)
  2. 翻译(2 条)
  3. 文本总结(2 条)
  4. 代码解释(2 条)
  5. 逻辑推理(2 条)
  6. 日常助手(2 条)

测试指令模板保存在 examples/test_prompts.json。

运行推理对比

bash

python inference_compare.py --config configs/train_config.yaml

该脚本会依次加载底座模型和微调后的 LoRA 适配器,对每条测试指令生成输出,并将对比结果整理为 Markdown 表格,保存在:

  • results/output_comparison.md

加载 LoRA 适配器

推理时通过 peft 加载适配器权重(路径:adapters/lora_adapter/):

python

from peft import PeftModel
model = PeftModel.from_pretrained(base_model, "adapters/lora_adapter/")

适配器核心文件 adapter_model.safetensors 大小约 33 MB,已纳入版本控制(不上传完整底座模型)。


实验结果摘要

总体效果

  • 微调后模型在回答结构上明显改善,更倾向于使用分点列举、逻辑层次清晰的格式,指令跟随能力(如格式要求)显著提升。
  • 在问答、日常助手等任务上,回答的相关性和完整性优于底座模型。

深度分析与不足

  • 由于模型规模较小(0.5B),在复杂逻辑推理(如集合计数判断)上仍会出现错误。
  • 部分回答存在事实性偏差或冗余表述。
  • 代码解释类任务表现一般,有时不能准确识别代码意图或定位越界等具体错误。
  • 在部分中文任务中,微调后模型仍会输出英文,说明语言约束服从并不稳定。

详细的逐条对比结果请参见 results/output_comparison.md,完整实验分析请参见 report/project_report.pdf。


遇到的问题及解决方案

问题 解决方案
C 盘空间不足 将虚拟环境、pip 缓存、Hugging Face 缓存全部设置到 E 盘
Hugging Face 模型下载超时 设置镜像源 HF_ENDPOINT=https://hf-mirror.com
transformers 新版 tokenizer 参数报错 改用 processing_class=tokenizer 兼容新版接口
推理时显存溢出 顺序加载底座模型和适配器,每个模型使用后立即释放(del 并调用 torch.cuda.empty_cache())
Windows 下 QLoRA 兼容性问题 0.5B 模型不使用 QLoRA,直接采用 LoRA + FP16 即可稳定运行

仓库文件结构

text

Project2_TaskA_Finetuning/
├── README.md
├── .gitignore
├── SUBMISSION_CHECKLIST.md
├── requirements.txt
├── setup_env.ps1
├── data_preprocess.py
├── train_lora.py
├── inference_compare.py
├── configs/
│   └── train_config.yaml
├── examples/
│   └── test_prompts.json
├── results/
│   ├── training_log.txt
│   ├── loss_curve.png
│   └── output_comparison.md
├── adapters/
│   └── lora_adapter/          # LoRA 适配器权重(~33MB)
├── notes/
│   └── 实验素材_HYX.md        # 内部素材,仅供组内参考
└── report/
    ├── project_report.md      # 报告源文件
    └── project_report.pdf     # 最终项目报告

注意:不包含完整模型权重、缓存文件或临时文件,所有大文件均已在 .gitignore 中过滤。


参考文献与工具

About

2026春《深度学习》课程 Project02 报告(刘承龙、韩玉轩、潘旭)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages