# 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.5B（ModelScope下载）
**语料：** `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.5B（ModelScope下载）
**语料：** `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` → 解析为JSONL（1.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缓存）