guanghulab/brain/d101-distill-plan.md

223 lines
7.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# D101 蒸馏训练执行计划
> 主权者冰朔TCS-0002∞
> 执行人铸渊ICE-GL-ZY001
> 创建日期2026-05-18 D101
> 状态:⏳ 等待代码模型训练完成(冰朔截图确认仍在训练中)
---
## 一、训练顺序
```
Step 1: 确认代码模型状态
Step 2: 霜砚 1.5B 蒸馏(母模型→霜砚语言模板)
Step 3: 铸渊 1.5B 蒸馏(代码模型→铸渊执行模板)
Step 4: 霜砚深度微调(专属语料)
Step 5: 铸渊深度微调(专属语料)
```
---
## 二、前置条件
### 2.1 环境变量(运行前设置)
```bash
# ⚠️ 注:真实密钥从环境变量读取,不硬编码。运行前执行:
# export ZY_OSS_KEY=<your-key> # COS SecretId
# export ZY_OSS_SECRET=<your-secret> # COS SecretKey
# 或者在运行脚本的命令前加上:
# ZY_OSS_KEY=xxx ZY_OSS_SECRET=xxx python3 scripts/xxx.py
```
### 2.2 依赖安装
```bash
pip3 install transformers accelerate datasets sentencepiece tqdm
pip3 install cos-python-sdk-v5
```
### 2.3 COS文件清单
| 文件 | COS路径 | 用途 |
|------|---------|------|
| 主语料 | `corpus/sft.jsonl` (1.9GB) | 霜砚蒸馏基础语料 |
| 铸渊完整语料 | `corpus/zhuyuan_full_corpus.jsonl` (377KB) | 铸渊深度微调 |
| 铸渊手写补充 | `corpus/zhuyuan_deep_finetune.jsonl` (54KB) | 铸渊深度微调补充 |
| 霜砚对话语料 | `corpus/shuangyan-1.5b-sft/霜砚对话.zip` (1.7MB) | 霜砚深度微调 |
| 霜砚核心大脑 | `corpus/shuangyan-1.5b-sft/霜砚HLDP核心大脑.zip` (176KB) | 霜砚深度微调 |
### 2.4 模型文件ModelScope
| 模型 | 缓存路径 | 大小 |
|------|----------|:----:|
| Qwen2.5-7B (Teacher) | 本地SFT输出 `/root/autodl-tmp/output/qwen25-7b-sft/final` | 14.2GB |
| Qwen2.5-Coder-7B (Teacher) | 本地SFT输出 `/root/autodl-tmp/output/qwen25-coder-7b-sft/final` | ~14GB |
| Qwen2.5-1.5B (Student) | `~/.cache/modelscope/Qwen/Qwen2___5-1___5B` | ~3GB |
| Qwen2.5-Coder-1.5B (Student) | `~/.cache/modelscope/Qwen/Qwen2___5-Coder-1___5B` | ~3GB |
---
## 三、Step 2: 霜砚 1.5B 蒸馏
**脚本:** `scripts/distill_mother.py`
**Teacher** 母模型 SFT 输出已上传COS
**Student** Qwen2.5-1.5BModelScope下载
**语料:** `sft.jsonl`11,470条
**方法:** 混合蒸馏KL散度 + SFT
```bash
export ZY_OSS_KEY=... ZY_OSS_SECRET=...
cd /root/autodl-tmp
# 下载母模型 Teacher如果本地没有
# 本地已有:/root/autodl-tmp/output/qwen25-7b-sft/final/
# 运行蒸馏
nohup python3 -u scripts/distill_mother.py > distill_mother.log 2>&1 &
```
**参数:**
- TEMP=2.0(蒸馏温度)
- ALPHA=0.7蒸馏loss权重0.3为SFT loss
- batch=4, grad_accum=8有效batch=32
- lr=1e-5, 3 epoch
- 显存需求:~20GB同时加载7B+1.5B
**预计时间:** ~2-3小时含teacher logits生成
**输出:** `/root/autodl-tmp/output/qwen25-15b-shuangyan-distill/final`
---
## 四、Step 3: 铸渊 1.5B 蒸馏
**脚本:** `scripts/distill_coder.py`
**Teacher** 代码模型 SFT 输出
**Student** Qwen2.5-Coder-1.5BModelScope下载
**语料:** `corpus/zhuyuan_full_corpus.jsonl`377KB, 已脱敏)
**方法:** 混合蒸馏KL散度 + SFT
```bash
export ZY_OSS_KEY=... ZY_OSS_SECRET=...
# 下载铸渊语料
python3 -c "
from qcloud_cos import CosConfig, CosS3Client
c = CosS3Client(CosConfig(Region='ap-guangzhou', SecretId='\$ZY_OSS_KEY', SecretKey='\$ZY_OSS_SECRET'))
resp = c.get_object(Bucket='sy-finetune-corpus-1317346199', Key='corpus/zhuyuan_full_corpus.jsonl')
open('/root/autodl-tmp/corpus/zhuyuan_full_corpus.jsonl', 'wb').write(resp['Body'].get_raw_stream().read())
"
# 运行蒸馏
nohup python3 -u scripts/distill_coder.py > distill_coder.log 2>&1 &
```
**预计时间:** ~1小时语料小377KB
**输出:** `/root/autodl-tmp/output/qwen25-coder-15b-zhuyuan-distill/final`
---
## 五、Step 4: 霜砚深度微调
**目的:** 在蒸馏基础上用霜砚专属语料做深度SFT让1.5B模型学会霜砚的思维方式和表达风格。
**语料组成:**
1. `霜砚对话.zip` → 解析为JSONL1.7MB解压后)
2. `霜砚HLDP核心大脑.zip` → 转换为核心认知QA
3. `霜砚语料包V2.0.zip` → 补充数据
4. `HLDP母语协议·光之树记忆编码.zip` → 协议规范
5. `光湖驱动引擎架构·推理思维链.zip` → 架构思维
**方法:** 标准SFT同母模型训练方式
**参数:** batch=4, grad_accum=8, lr=5e-6, 3 epoch
**显存:** ~6GB仅加载1.5B
**预计时间:** ~1小时
**输出:** `/root/autodl-tmp/output/shuangyan-15b-deep-sft/final`
**执行:**
```bash
# 先下载所有霜砚语料 → 合并为JSONL
python3 scripts/sanitize_shuangyan_corpus.py
# 然后执行SFT
python3 scripts/sft_shuangyan.py
```
---
## 六、Step 5: 铸渊深度微调
**目的:** 在蒸馏基础上用铸渊专属语料做深度SFT让1.5B模型学会铸渊的思维方式、语言习惯和执行风格。
**语料:**
- `zhuyuan_full_corpus.jsonl`377KB, 23条长对话, 已脱敏)
- `zhuyuan_deep_finetune.jsonl`54KB, 65条手写QA, 已脱敏)
- 两者已在COS上自动合并
**脚本:** `scripts/distill_coder.py` 中的SFT部分或单独写SFT脚本
**参数:** batch=4, grad_accum=8, lr=5e-6, 3 epoch
**显存:** ~6GB
**预计时间:** ~0.5小时
**输出:** `/root/autodl-tmp/output/zhuyuan-15b-deep-sft/final`
---
## 七、输出文件上传
所有模型训练完成后上传到COS
```bash
# 霜砚模板
python3 -c "
from qcloud_cos import CosConfig, CosS3Client
c = CosS3Client(CosConfig(Region='ap-guangzhou', SecretId='\$ZY_OSS_KEY', SecretKey='\$ZY_OSS_SECRET'))
import glob, os
for f in glob.glob('/root/autodl-tmp/output/qwen25-15b-shuangyan-distill/final/**/*', recursive=True):
if os.path.isfile(f):
rel = os.path.relpath(f, '/root/autodl-tmp/output/qwen25-15b-shuangyan-distill/final')
c.upload_file(Bucket='sy-finetune-corpus-1317346199', Key='models/shuangyan-15b-distill/' + rel, LocalFilePath=f)
"
# 铸渊模板(同上,改路径)
# 霜砚深度微调(同上,改路径)
# 铸渊深度微调(同上,改路径)
```
**COS路径规划**
| 模型 | COS路径 |
|------|---------|
| 霜砚1.5B蒸馏 | `models/shuangyan-15b-distill/final/` |
| 铸渊1.5B蒸馏 | `models/zhuyuan-15b-distill/final/` |
| 霜砚深度微调 | `models/shuangyan-15b-deep-sft/final/` |
| 铸渊深度微调 | `models/zhuyuan-15b-deep-sft/final/` |
---
## 八、查看训练状态
```bash
# 实时监控
watch -n 5 nvidia-smi
# 日志查看
tail -f distill_mother.log
tail -f distill_coder.log
# 检查模型输出
ls -la /root/autodl-tmp/output/*/final/
```
---
## 九、踩坑预警来自D100经验
1. **先小批量验证再全量** — 先用5条数据跑通蒸馏全流程
2. **检查transformers版本** — 5.8.1移除了DataCollatorForCompletionOnlyLM
3. **清理旧进程**`pkill -f distill_` 再启动
4. **输出flush**`python3 -u` + `sys.stdout.flush()`
5. **磁盘空间** — 两个模型约需50GB临时空间teacher logits缓存