Datawhale AI 夏令营·笔记
主题:基于 CoT 的 DeepSeek 数学推理蒸馏实践
整理日期:2025-07-26
1 任务目标回顾
| 关键词 | 含义 | 交付物 |
|---|---|---|
| 教师模型 | DeepSeek-R1(满血版) | 高质量 CoT 推理数据 |
| 学生模型 | deepseek_r1_qwen_7b / 14b / 32b | LoRA 微调后的轻量模型 |
| 核心任务 | 把教师模型在测试题上的推理能力蒸馏给学生模型 | 一个 resourceId 用于评测 |
2 赛题拆解
2.1 数据链路
graph LR
A[官方训练集 JSONL] -->|可选清洗| B[训练集 v2]
B -->|微调| C[教师模型更强]
C -->|批量推理测试集| D[CoT 微调集]
D -->|LoRA 微调| E[学生模型]
E -->|部署| F[resourceId 提交]
- 训练集格式:
{input, output},其中output已含完整 CoT。 - 测试集格式:仅
input,需教师模型补全推理链。
2.2 评分公式
Overall Score = 0.4×AS + 0.3×CQS + 0.2×ES + 0.1×MLS
- AS:答案准确率;CQS:推理链质量;ES:token 效率;MLS:模型大小。
- CQS & ES 只在答案正确时计算 → 先保对,再谈省。
3 五步工作流
| 步骤 | 关键动作 | 工具/平台 | 技巧要点 |
|---|---|---|---|
| ① 数据准备 | 清洗/扩增训练集 | Python / Pandas | 统一格式、剔除无效样本 |
| ② 教师推理 | 批量生成测试集 CoT | 星辰 MaaS「批量推理」 | Prompt 工程:加“请一步步思考”前缀 |
| ③ 蒸馏训练 | LoRA 微调学生模型 | 星辰 MaaS「微调」 | lr=2e-4, rank=64, epoch=3 起步 |
| ④ 评估调优 | 本地脚本+平台自动打分 | 自写 eval + 平台指标 | 先跑 50 题快速验证,再全量 |
| ⑤ 提交 | 部署→获取 resourceId | 星辰 MaaS「部署」 | 每日 2 次机会,留一次兜底 |
4 上分秘籍
-
教师再升级
- 用官方训练集 + 自采高数题对 DeepSeek-R1 再微调 1-2 epoch。
- 微调后务必在验证集上测 AS,确保 >95% 再进入蒸馏。
-
Prompt 三板斧
请你一步一步思考下面的数学问题并生成答案,问题如下: {{题目}} 要求:给出详细推导,最后答案用 \boxed{} 包围。- 加角色:“你是一名资深数学助教”;
- 加格式约束:每一步用“Step i:”开头;
- Temperature 0.2 → 稳定输出。
-
学生模型选择
模型 参数量 MLS 权重 推荐显存 7b 最小 高 1×A100 40G 14b 折中 中 2×A100 40G 32b 最大 低 4×A100 40G 想冲榜选 14b;想卷轻量选 7b。
-
训练加速
- 使用
flash-attn+deepspeed zero2; - LoRA 只训
q_proj,v_proj,减少参数 30%。
- 使用
5 星辰 MaaS 关键按钮速查
| 功能 | 入口 | 常用配置 |
|---|---|---|
| 批量推理 | 「模型服务」-「批量推理」 | 模型=DeepSeek-R1, 数据=测试集 JSONL |
| 微调 | 「模型中心」-「创建微调」 | 数据=CoT 微调集, 学生模型=7b/14b/32b |
| 部署 | 「模型中心」-「部署」 | 选择 LoRA 权重 → 生成 resourceId |
6 我的心得 & 下一步
- 耗时:数据清洗 1h → 教师推理 3h → 7b LoRA 微调 1.5h(8×A100)→ 本地 eval 30 min。
- 收获:Prompt 里加“Step i”格式后 CQS 从 78 → 89;下一步尝试 14b + 教师再微调冲击 Top10。