diff --git a/brain/d101-distill-plan.md b/brain/d101-distill-plan.md index 524895b..040326e 100644 --- a/brain/d101-distill-plan.md +++ b/brain/d101-distill-plan.md @@ -2,69 +2,222 @@ > 主权者:冰朔(TCS-0002∞) > 执行人:铸渊(ICE-GL-ZY001) -> 创建日期:2026-05-18 +> 创建日期:2026-05-18 D101 +> 状态:✅ 代码模型训练完成,待新GPU实例执行蒸馏 + +--- ## 一、训练顺序 -Step 1: 确认代码模型状态 → Step 2: 霜砚1.5B蒸馏 → Step 3: 铸渊1.5B蒸馏 → Step 4: 霜砚深度微调 → Step 5: 铸渊深度微调 +``` +Step 1: 确认代码模型状态 + ↓ +Step 2: 霜砚 1.5B 蒸馏(母模型→霜砚语言模板) + ↓ +Step 3: 铸渊 1.5B 蒸馏(代码模型→铸渊执行模板) + ↓ +Step 4: 霜砚深度微调(专属语料) + ↓ +Step 5: 铸渊深度微调(专属语料) +``` + +--- ## 二、前置条件 -### 环境变量 +### 2.1 环境变量(运行前设置) ```bash -export ZY_OSS_KEY=... -export ZY_OSS_SECRET=... +# ⚠️ 注:真实密钥从环境变量读取,不硬编码。运行前执行: +# export ZY_OSS_KEY= # COS SecretId +# export ZY_OSS_SECRET= # COS SecretKey +# 或者在运行脚本的命令前加上: +# ZY_OSS_KEY=xxx ZY_OSS_SECRET=xxx python3 scripts/xxx.py ``` -### 依赖 +### 2.2 依赖安装 ```bash -pip3 install transformers accelerate datasets tqdm cos-python-sdk-v5 +pip3 install transformers accelerate datasets sentencepiece tqdm +pip3 install cos-python-sdk-v5 ``` -## 三、Step 2 霜砚蒸馏 +### 2.3 COS文件清单 -**脚本:** scripts/distill_mother.py -**Teacher:** 母模型SFT输出(本地的output/qwen25-7b-sft/final/) -**Student:** Qwen2.5-1.5B -**语料:** sft.jsonl (11,470条) -**参数:** TEMP=2.0, ALPHA=0.7, batch=4, grad_accum=8, lr=1e-5, 3epoch -**显存:** ~20GB -**预计:** 2-3小时 -**输出:** output/qwen25-15b-shuangyan-distill/final +| 文件 | 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) | 霜砚深度微调 | -## 四、Step 3 铸渊蒸馏 +### 2.4 模型文件(ModelScope) -**脚本:** scripts/distill_coder.py -**Teacher:** 代码模型SFT输出 -**Student:** Qwen2.5-Coder-1.5B -**语料:** zhuyuan_full_corpus.jsonl (377KB, 已脱敏) -**参数:** 同上 -**预计:** 1小时 -**输出:** output/qwen25-coder-15b-zhuyuan-distill/final +| 模型 | 缓存路径 | 大小 | +|------|----------|:----:| +| 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 4 霜砚深度微调 +--- -用霜砚5份语料做SFT。参数:batch=4, lr=5e-6, 3epoch -**输出:** output/shuangyan-15b-deep-sft/final +## 三、Step 2: 霜砚 1.5B 蒸馏 -## 六、Step 5 铸渊深度微调 +**脚本:** `scripts/distill_mother.py` -用zhuyuan_full_corpus.jsonl + zhuyuan_deep_finetune.jsonl做SFT -**输出:** output/zhuyuan-15b-deep-sft/final +**Teacher:** 母模型 SFT 输出(已上传COS) +**Student:** Qwen2.5-1.5B(ModelScope下载) +**语料:** `sft.jsonl`(11,470条) +**方法:** 混合蒸馏(KL散度 + SFT) -## 七、COS上传路径 +```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 输出(已上传COS) +**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/ | +| 霜砚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/` | -## 八、踩坑提醒 +--- -1. 先5条数据验证全流程 -2. 检查transformers版本兼容 -3. pkill清理旧进程再启动 -4. python3 -u 强制flush -5. 检查磁盘空间(需~50GB临时) +## 八、查看训练状态 + +```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缓存) \ No newline at end of file