Skip to content

About

使用unsloth对Deekseek-R1-Distill-Qwen模型进行Lora微调

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🦥 Unsloth LoRA 医学问答模型微调

使用 Unsloth 对 DeepSeek-R1-Distill-Qwen 模型进行高效 LoRA 微调,专注于中文医学推理问答任务

Python PyTorch Unsloth License

📋 项目简介

本项目使用 Unsloth 库对 DeepSeek-R1-Distill-Qwen 系列模型进行 QLoRA 微调,训练数据集为 FreedomIntelligence/medical-o1-reasoning-SFT 中文医学推理数据集。

✨ 主要特性

  • 🚀 高效训练: 使用 Unsloth 实现 2x 加速
  • 🩺 医学专注: 针对医学问答任务优化
  • 💭 思维链推理: 支持 Chain-of-Thought 推理模式
  • 📊 完整评估: 包含 ROUGE、困惑度等多维度评估

🗂️ 项目结构

unsloth-model-lora/
├── README.md                          # 项目说明
├── LICENSE                            # 开源许可证
├── requirements.txt                   # 依赖包列表
│
├── notebooks/                         # 📓 Jupyter Notebooks
│   ├── qwen_1.5B_lora.ipynb          #    1.5B 模型微调
│   └── qwen_7B_lora.ipynb            #    7B 模型微调
│
├── models/                            # 🤖 训练好的 LoRA 模型
│   ├── qwen-1.5b_lora_model/         #    1.5B LoRA 适配器
│   │   ├── adapter_config.json
│   │   ├── adapter_model.safetensors
│   │   └── tokenizer.json
│   └── qwen-7b_lora_model/           #    7B LoRA 适配器
│       ├── adapter_config.json
│       ├── adapter_model.safetensors
│       └── tokenizer.json
│
└── docs/                              # 📚 文档
    └── qwen_1.5B_lora_optimization_summary.md

🚀 快速开始

1. 环境准备

# 克隆项目
git clone https://github.com/qingni/unsloth-model-lora.git
cd unsloth-model-lora

# 安装依赖
pip install -r requirements.txt

2. 硬件要求

模型 最低显存 推荐显存
1.5B 8GB 12GB+
7B 16GB 24GB+

💡 本项目在 NVIDIA RTX 4090 (24GB) 上开发和测试

3. 运行训练

打开对应的 Jupyter Notebook 并按顺序执行所有 cells:

# 启动 Jupyter
jupyter notebook

# 选择 notebooks/qwen_1.5B_lora.ipynb 或 notebooks/qwen_7B_lora.ipynb

📊 训练结果

模型对比

指标 1.5B 模型 7B 模型 提升
训练 Loss 1.9966 1.6605 ↓ 16.8%
困惑度 (PPL) 9.38 7.51 ↓ 19.9%
ROUGE-1 0.1929 0.2932 ↑ 52.0%
ROUGE-2 0.0325 0.0771 ↑ 137.2%
ROUGE-L 0.1862 0.2932 ↑ 57.5%

训练配置

参数 1.5B 7B
LoRA Rank 64 32
Batch Size 128 32
Learning Rate 2e-4 1e-4
Epochs 5 3
可训练参数 73.9M (3.99%) 80.7M (1.05%)
训练时间 ~1.7 小时 ~4.5 小时

🩺 使用示例

加载微调后的模型

from unsloth import FastLanguageModel

# 加载基础模型
model, tokenizer = FastLanguageModel.from_pretrained(
    model_name="unsloth/DeepSeek-R1-Distill-Qwen-7B",
    max_seq_length=4096,
    load_in_4bit=True,
)

# 加载 LoRA 适配器
model.load_adapter("models/qwen-7b_lora_model")

# 切换到推理模式
FastLanguageModel.for_inference(model)

生成回答

prompt = """以下是一条描述任务的指令,并配有一个提供进一步上下文的输入。
请撰写一份恰当的回复,以完成该请求。

### Instruction:
你是一位医学专家,在临床推理、诊断学和治疗规划方面拥有深厚的专业知识。
请回答以下医学问题。

### Question:
男,28岁,程序员,最近一周每天工作到半夜,感觉头晕、脖子疼,有时候还恶心。

### Response:
<think>
"""

inputs = tokenizer([prompt], return_tensors="pt").to("cuda")
outputs = model.generate(**inputs, max_new_tokens=1024)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(response)

输出示例

<think>
这位28岁的程序员出现头晕、脖子疼痛和恶心等症状,可能是由多种因素导致的。
首先,他的长期熬夜可能影响了他的血压和血糖水平,导致头晕和恶心。
其次,长时间使用电脑可能压迫颈椎,导致脖子疼痛...
</think>
建议他进行血压、血糖和甲状腺功能的检测,并改善睡眠质量,以缓解症状。

📦 依赖包

datasets==4.3.0
pandas==2.3.1
peft==0.18.1
timm==1.0.19
torch==2.8.0
torchvision==0.23.0
transformers==4.57.3
trl==0.24.0
unsloth==2026.1.3
unsloth_zoo==2026.1.3

📈 评估方法

本项目包含多种评估方法:

评估方法 说明
ROUGE 评分 计算生成文本与参考答案的词级别重叠度
困惑度 (Perplexity) 评估模型对数据的拟合程度
样例对比 直观查看模型生成与参考答案的差异
Loss 曲线 可视化训练过程中的损失变化

🔧 进阶配置

LoRA 参数调整

model = FastLanguageModel.get_peft_model(
    model,
    r=64,                    # LoRA rank,越大参数越多
    target_modules=[         # 应用 LoRA 的模块
        "q_proj", "k_proj", "v_proj", "o_proj",
        "gate_proj", "up_proj", "down_proj",
    ],
    lora_alpha=64,           # 缩放因子
    lora_dropout=0,          # Dropout 比率
    use_gradient_checkpointing="unsloth",  # 节省显存
)

训练参数调整

args = SFTConfig(
    per_device_train_batch_size=2,    # 单卡 batch size
    gradient_accumulation_steps=16,    # 梯度累积
    num_train_epochs=3,                # 训练轮数
    learning_rate=1e-4,                # 学习率
    lr_scheduler_type="cosine",        # 调度器类型
    warmup_steps=150,                  # 预热步数
    optim="adamw_8bit",                # 优化器
)

📚 参考资料

📝 更新日志

v1.0.0 (2026-01-20)

  • ✅ 完成 1.5B 模型微调与评估
  • ✅ 完成 7B 模型微调与评估
  • ✅ 新增评估模块 (ROUGE、困惑度、样例对比)
  • ✅ 新增优化总结报告

📄 许可证

本项目基于 MIT License 开源。

🙏 致谢


⭐ 如果这个项目对你有帮助,请给个 Star!

About

使用unsloth对Deekseek-R1-Distill-Qwen模型进行Lora微调

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages