chore(ts-as-modality): M2-complete build checkpoint (T2.6 verified)
M2 exit verification: - 8-step fwd+bwd on RTX 3060, loss 9.82→5.54 (descending), finite. - Stage ① peak 2.34 GB (<5GB design budget). - Updated build-checkpoint.json: M2-complete, 91 tests, env notes (CUDA torch, ~/models/Qwen2.5-0.5B-Instruct, proxy).
This commit is contained in:
@@ -1,31 +1,37 @@
|
||||
{
|
||||
"change": "ts-as-modality",
|
||||
"phase": "build",
|
||||
"checkpoint": "M1-complete",
|
||||
"date": "2026-06-29",
|
||||
"status": "paused-awaiting-user-decision",
|
||||
"summary": "M1 (data pipeline) fully complete (T1.1-T1.7). 51 tests passing. All committed on feature/20260629/ts-as-modality.",
|
||||
"next_action": "T2.1 (TS Encoder, model/ts_encoder.py). Blocked on environment setup decision for M2-M5.",
|
||||
"blocker": {
|
||||
"reason": "venv (.venv) has only M1 deps (numpy/tqdm/pyyaml/pytest). M2+ requires torch + transformers (+peft/accelerate/datasets for M3/M4). System torch is CPU-only; design assumes 3060 12GB GPU but actual is Quadro RTX 3000 6GB.",
|
||||
"decision_pending": "User must choose: A) CPU torch now (M2 correctness only, no GPU mem validation); B) CUDA torch for 6GB Quadro (enables real training, expect OOM-fallbacks earlier vs 12GB plan); C) user sets up env themselves.",
|
||||
"recommendation": "B"
|
||||
"checkpoint": "M2-complete",
|
||||
"date": "2026-06-30",
|
||||
"status": "in-progress",
|
||||
"milestone": "M2 (model) complete; proceeding to M3 (training)",
|
||||
"summary": "M2 done: TS Encoder + Projector + Multimodal splice + Wrapper (end-to-end, LoRA) + Collator. 91 tests passing. Stage ① fwd+bwd peak 2.34 GB (<5GB budget). Qwen2.5-0.5B-Instruct downloaded via socks proxy 10.66.66.4:1080 to ~/models/.",
|
||||
"next_action": "T3.1 losses.py (lm_loss + contrastive_loss), T3.2 stage1 training script + smoke.",
|
||||
"environment": {
|
||||
"venv": ".venv (CUDA torch 2.5.1+cu121, transformers 5.12.1, peft 0.19.1)",
|
||||
"llm": "/home/zhangzp/models/Qwen2.5-0.5B-Instruct (hidden=896, 494M, bf16)",
|
||||
"gpu": "RTX 3060 12GB (freed: killed vLLM + ts-abnormal procs)",
|
||||
"proxy": "socks5h://10.66.66.4:1080 (for any further HF downloads)"
|
||||
},
|
||||
"resume_instructions": {
|
||||
"verify_state": "Run: /bin/bash .claude/skills/comet/scripts/comet-state.sh check ts-as-modality build",
|
||||
"find_next_task": "grep -n '\\- \\[ \\]' openspec/changes/ts-as-modality/tasks.md | head -1 (expect T2.1)",
|
||||
"venv": "Use .venv/bin/python for all python commands",
|
||||
"find_next_task": "grep -n '\\- \\[ \\]' openspec/changes/ts-as-modality/tasks.md | head -1 (expect T3.1)",
|
||||
"venv": ".venv/bin/python",
|
||||
"branch": "feature/20260629/ts-as-modality",
|
||||
"build_mode": "executing-plans",
|
||||
"tdd_mode": "tdd",
|
||||
"review_mode": "standard",
|
||||
"isolation": "branch"
|
||||
},
|
||||
"completed_milestones": ["M1"],
|
||||
"completed_tasks": ["1.1", "1.2", "1.3", "1.4", "1.5", "1.6", "1.7"],
|
||||
"test_count": 51,
|
||||
"git": {
|
||||
"m1_complete_commit": "bbc60f2",
|
||||
"base_ref": "7a5a1d033fb1ac20af25a17a571b2791694bd923"
|
||||
}
|
||||
"completed_milestones": ["M1", "M2"],
|
||||
"completed_tasks": ["1.1-1.7", "2.1-2.6"],
|
||||
"test_count": 91,
|
||||
"spec_clarifications_recorded": [
|
||||
"n_patches = (T-P)//S+1 = 127 (design said 128)",
|
||||
"channel-independent = shared per-channel patch embed + mean-pool → C-free output",
|
||||
"encoder params ≈2.1M (design said ~4M)",
|
||||
"multimodal splice appends answer+EOS for training",
|
||||
"wrapper batch contract = {series, attributes, timestamps, events, question, answer}",
|
||||
"encoder/projector fp32, output cast to LLM dtype (bf16)",
|
||||
"build embedding layer with len(tokenizer) not vocab_size (special tokens)"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
- [x] 2.3 多模态拼接 `model/multimodal.py`:Qwen tokenizer tokenize 文本部分,TS token 作 inputs_embeds 插入 `[属性][时间戳][TS tok][事件][问题][回答][EOS]`,统一构造 inputs_embeds+attention_mask+labels(仅回答段非 -100)(验证:8 项单测过——seq_len ≤1024、mask 全 1、回答段 label 非 -100、TS token 计入序列、无 NaN、超长左截断)。spec 澄清:训练拼回答+EOS,用 `len(tokenizer)` 构建嵌入表以容纳 special tokens。
|
||||
- [x] 2.4 训练/推理封装 `model/wrapper.py`:`MultimodalTSModel` 组合 Encoder+Projector+LLM+LoRA 挂载开关,`forward` 返 loss、`generate` 返文本,支持 `freeze_llm`(阶段①)/`enable_lora(r=16)`(阶段②)(验证:端到端 forward+backward 跑通、grad 流入 Encoder/Projector、generate 出文本、阶段①峰值 1.87GB ≪5GB 设计预算)。spec 澄清:wrapper 既接收原始 batch(series+文本列表)走端到端,也兼容预拼接 inputs_embeds;encoder/projector fp32,输出投影到 LLM dtype(bf16)。
|
||||
- [x] 2.5 Collator `data/collator.py`:JSONL→wrapper 原始 batch(series 张量 + attributes/timestamps/events/question/answer 文本列表),处理变长 T(padding/trunc 到 max_T)与变长 C(padding 到 max_C)、NaN→fill;变长文本 padding/attention_mask 由 wrapper 逐样本 splice+max_seq 填充处理(验证:11 项单测过;端到端 Collator→Wrapper fwd+bwd+generate 跑通)
|
||||
- [ ] 2.6 M2 出口验证:单 batch 前向+反向在 3060 跑通,loss 有限且下降趋势,阶段①模式峰值显存 ~5GB
|
||||
- [x] 2.6 M2 出口验证:单 batch 前向+反向在 3060 跑通(8 步 loss 9.82→5.54 下降),阶段①峰值显存 2.34GB ≪5GB 预算 ✅
|
||||
|
||||
## 3. M3 · 阶段①对齐训练
|
||||
|
||||
|
||||
Reference in New Issue
Block a user