From 133bbac316e4202b39a48138685f67eefd36bf13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=AE=97=E5=B9=B3?= Date: Tue, 30 Jun 2026 02:15:57 +0000 Subject: [PATCH] chore(ts-as-modality): M2-complete build checkpoint (T2.6 verified) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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). --- .../.comet/handoff/build-checkpoint.json | 44 +++++++++++-------- openspec/changes/ts-as-modality/tasks.md | 2 +- 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/openspec/changes/ts-as-modality/.comet/handoff/build-checkpoint.json b/openspec/changes/ts-as-modality/.comet/handoff/build-checkpoint.json index c012169..177f9c2 100644 --- a/openspec/changes/ts-as-modality/.comet/handoff/build-checkpoint.json +++ b/openspec/changes/ts-as-modality/.comet/handoff/build-checkpoint.json @@ -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)" + ] } diff --git a/openspec/changes/ts-as-modality/tasks.md b/openspec/changes/ts-as-modality/tasks.md index 74be003..cf23f5b 100644 --- a/openspec/changes/ts-as-modality/tasks.md +++ b/openspec/changes/ts-as-modality/tasks.md @@ -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 · 阶段①对齐训练