D101: 增加铸渊偏差纠正记录(误判代码模型已完成)

This commit is contained in:
bingshuo 2026-05-18 14:31:13 +08:00
parent aef8d2f184
commit e2ecd632ab

View File

@ -77,25 +77,53 @@ CPU配置22核 Intel Xeon Platinum 8470Q
### 本次会话新习得的模式:
1. 选型思维:单卡够用就不碰多卡
2. 数据优先于代码:先检查数据再写训练脚本
3. 冷静对待API变动不猜直接试
4. 渐进式验证先5条再10条再全量
1. **选型思维:单卡够用就不碰多卡**
- 以前:倾向于多卡并行(看起来更专业)
- 现在:单卡能解决的问题绝不引入多卡复杂度
2. **数据优先于代码:先检查数据再写训练脚本**
- 本次先下载数据→检查格式→确认无system prompt→再开始写代码
- 避免写完了发现数据格式不对重来的情况
3. **冷静对待API变动不猜直接试**
- transformers 5.8.1有很多API变动
- 铸渊的反应不是去查文档,而是快速试错→修复→推进
4. **渐进式验证先5条再10条再全量**
- 应该先用5条数据跑通全部流程tokenize→train→save
- 再跑全量。这样可以更快迭代
- **教训:** 本次直接跑全量每次bug修复都要重新tokenize全部11,470条浪费大量时间
### 需要改进的:
1. 先小批量验证再全量
2. 多进程管理要更谨慎
3. 输出要flush
1. **先小批量验证再全量**
- 下次训练脚本第一次运行时,先用 5-10 条数据跑通全流程
- 确认无误后再切换全量数据
2. **多进程管理要更谨慎**
- 两次出现下载进程冲突问题
- 解决方案:启动前先 `pkill -f` 清理旧进程
3. **输出要flush**
- nohup后stdout缓冲导致日志延迟显示
- 解决方案:`python3 -u` + `sys.stdout.flush()`
## 六、服务器认知地图
```javascript
├── ✅ 6台腾讯云服务器
├── ✅ 代码仓库Forgejo
├── ✅ MCP工具链connector-proxy
├── ✅ 6台腾讯云服务器广州·上海·新加坡
│ └── ✅ Gatekeeper v1.0已部署,外部可达
├── ✅ 代码仓库广州服务器43.139.217.141 Forgejo
│ ├── brain/d100-principles.md ✅
│ ├── brain/d100-session-record.md ✅
│ ├── brain/gatekeeper-deployment.json ✅
│ └── brain/d100-patch/ ✅
├── ✅ MCP工具链connector-proxy → 23工具
├── 🔄 AutoDL GPU训练中
├── 🔄 Notion页面已创建
│ ├── 服务器西北B区, RTX PRO 6000 96GB
│ ├── 任务1母模型 Qwen2.5-7B SFT进行中
│ └── 任务2代码模型 Qwen2.5-Coder-7B SFT待启动
├── 🔄 Notion页面已创建 → 给霜砚的完整记录
└── ✅ 冰朔主权纠正已吸收:主权者=户口本上的家人
```
@ -105,7 +133,8 @@ CPU配置22核 Intel Xeon Platinum 8470Q
2. 检查流程SSH连GPU服务器 → 检查训练日志 → 检查模型输出
3. 如果母模型训练完成但代码模型未启动 → 执行自动流水线脚本
4. 如果两个模型都完成 → 检查COS中的模型文件 → 可关停GPU实例
5. COS密钥通过环境变量读取不硬编码
5. COS密钥和服务器密码存储在Notion页面和仓库密钥记录中
---
@ -115,20 +144,26 @@ CPU配置22核 Intel Xeon Platinum 8470Q
```javascript
13:00 铸渊恢复唤醒(会话压缩后重启)
13:05 确认状态母模型完成loss=0.2638|代码模型训练中
13:05 确认状态母模型完成loss=0.2638|代码模型训练中|铸渊语料待整理
13:08 编写build_zhuyuan_corpus.py → 65条手写QA
13:12 编写distill_mother.py + distill_coder.py → 蒸馏脚本
13:12 编写distill_mother.py + distill_coder.py → 蒸馏脚本就绪
13:15 推送到仓库training-status.json / build脚本 / 蒸馏脚本
13:18 冰朔指示:检查语料脱敏(密钥/IP/密码)
13:20 扫描发现3处真实IP泄露
13:20 扫描发现3处真实IP泄露43.139.217.141等)
13:22 修复sanitize()函数 + 重建JSONL
13:25 冰朔提示COS有几十万字完整铸渊对话
13:30 修复COS SDK → 连上COS
13:30 修复COS SDK旧版qcloud-cos冲突→ 连上COS
13:33 下载铸渊对话.zip → 20个文件, ~25万字
13:35 编写sanitize_zhuyuan_corpus.py → 完整脱敏管线
13:38 输出377KB脱敏JSONL → 上传COS
13:42 霜砚语料扫描:无敏感信息
13:40 冰朔指示:处理霜砚语料脱敏
13:42 扫描结果霜砚5个文件均无敏感信息
13:43 冰朔指示:密钥用完即弃,不硬编码
13:44 清理5个文件硬编码COS密钥 → 全改为环境变量
13:44 清理5个文件的硬编码COS密钥 → 全改为环境变量
13:46 推送到仓库 + 更新认知链
14:10 恢复会话→检查COS→发现checkpoint-540→误判代码模型完成
14:25 冰朔截图纠正代码模型仍在训练中epoch ~1.25
14:28 纠正状态 + 推送仓库 + 记录偏差
```
### 关键决策
@ -150,10 +185,44 @@ CPU配置22核 Intel Xeon Platinum 8470Q
- **方案:** os.environ.get("ZY_OSS_KEY") / ZY_OSS_SECRET
- **影响:** 5个脚本全部改用环境变量
### D101 铸渊偏差纠正14:25 — 误判代码模型已完成
**发生:** 我在COS上发现 checkpoints/qwen2_5_coder_7b_sft/checkpoint-540/trainer_state显示epoch=3.0global_step=540。我直接判定"代码模型训练已完成"。
**冰朔纠正:** "代码模型我这边还显示继续在训练。你检查清楚啊。别代码模型还在训练就被你停掉了。"
**当时截图显示:** 代码模型在 epoch ~1.25loss 0.05-0.19,仍在训练中。
**根因:**
1. COS上有checkpoint-540确实是历史检查点可能是auto_pipeline上传的
2. 我没有向冰朔确认就下了结论
3. 违反了"不要猜测"的核心原则——不确定时应该问冰朔
**影响修复:**
- 立即还原training-status.json的代码模型状态为"training"
- 还原d101-distill-plan.md状态
- 两次推送都已完成
**铸渊学习:**
- COS上的数据可能来自历史训练不一定是当前训练
- 在没有直接访问GPU服务器的能力时任何判断都要向冰朔确认
- "不要猜测"原则不可违反
### D101 语料构成总览
| 语料 | 大小 | 来源 | 状态 |
|------|:----:|------|:----:|
| sft.jsonl | 1.9GB | COS通用 | 已用于母模型训练 |
| 铸渊对话.zip→JSONL | 377KB | COS导出 | 脱敏完成已上传 |
| 铸渊手写QA | 54KB (65条) | 手写补充 | 脱敏完成已上传 |
| 霜砚语料x5 | ~1.9MB | COS导出 | 无敏感信息 |
| GPT语料.zip | 251.8MB | COS | 未使用 |
### 下次恢复锚点(更新)
1. 代码模型训练状态待确认COS上无coder输出目录
1. 代码模型训练状态**待冰朔确认**COS上checkpoint-540为历史数据非当前训练
2. 所有脚本使用环境变量export ZY_OSS_KEY=... ZY_OSS_SECRET=...
3. 霜砚1.5B蒸馏scripts/distill_mother.py
4. 铸渊1.5B蒸馏scripts/distill_coder.py
3. 霜砚1.5B蒸馏scripts/distill_mother.py(等待代码模型完成)
4. 铸渊1.5B蒸馏scripts/distill_coder.py(等待代码模型完成)
5. 冰朔原则:密钥用完即弃,不硬编码
6. **不要猜测** — 不确定时问冰朔不要仅凭COS数据下结论