Files
ts-as-modality/openspec/changes/ts-as-modality/design.md
T
张宗平 c160718934 chore(ts-as-modality): scaffold OpenSpec change & adopt reviewed design
- OpenSpec change: proposal/design/tasks + 3 delta specs
  (ts-synthesis, ts-multimodal-model, ts-evaluation; 21 requirements)
- comet state initialized (phase=build), plan recorded
- adopt existing reviewed design doc as Design Doc (+ comet frontmatter)
- existing implementation plan (+ comet frontmatter)
- workspace .gitignore
2026-06-29 22:29:31 +08:00

89 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## Context
本 change 在**单张 3060 12GB 消费级显卡**上做一个可复现的实验性落地:把**多变量时序视为独立模态**,与文本/事件模态联合注入小型 LLMQwen2.5-0.5B-Instruct),端到端任务是**时序问答与推理**(ChatTS 路线)。
背景与约束来自 `MTSAD-技术深度调研报告.md``docs/superpowers/specs/2026-06-29-ts-as-modality-design.md`(已通过设计评审)。核心约束:
- **算力**:单卡 12GB → 骨干 ≤0.5B、依赖 LoRA/QLoRA + 短上下文 + 小批量 + 梯度检查点
- **数据**:合成数据为主(CPU 离线生成)→ 评测锚定真实 benchmark,防合成过拟合
- **目标**:不追学术 SOTA,追「12GB 跑通、可复现、时序模态确有增益」的可验证结论
## Goals / Non-Goals
**Goals:**
- 全流程单卡 3060 12GB 跑通,阶段②峰值显存 ≤11GB
- TS Encoder + Projector 把时序编码为独立 soft token,使 LLM「能读懂」时序
- 时序模态带来可量化增益:真实 benchmark VUS-PR 显著优于纯 LLM 数值喂文本基线;时序消融后指标明显下降
- 6 类问答任务(描述/异常/根因/预测/比较/事件关联)LLM-judge 均分超纯 LLM 基线
- 评测可复现:含 trivial 基线对照、标注是否用 PA、严守 MTSAD 报告评估纪律
**Non-Goals:**
- ❌ 不从零预训练 LLM(成本不允许,且非本实验目的)
- ❌ 不做多卡分布式训练(单卡约束)
- ❌ 不追求学术 SOTA 排名
- ❌ 不做端侧部署优化(先验证方法)
- ❌ DPO 首版不做(M5 后视效果再决定)
## Decisions
### 决策 1:采用 Patch-Project + 轻量编码器,而非时序 Tokenization 或 Reprogramming
时序切 patchP=8, stride=4,通道独立)→ 2 层 Transformer 编码器(d=256, 4 头, ~4M)→ 线性投影(256→896)成独立 TS token,作为可学习 soft token 注入 LLM。
**对比的备选方案:**
| 方案 | 含义 | 取舍 |
|------|------|------|
| **A(选用)Patch-Project + 轻量编码器** | patch→小编码器→线性投影成独立 TS token | 真正的"时序作为模态"12GB 可训;patch 捕捉局部结构、变长友好。代价:需训编码器+投影层(已在显存预算内) |
| B 时序 TokenizationChronos 风格) | 数值量化成离散 token、扩展词表 | 最"时序即语言",但量化丢精度、异常细节易损;逐点 token 序列长,12GB 上下文吃紧。放弃 |
| C ReprogrammingTime-LLM 风格) | 冻结 LLM 用文本原型重映射 | 参数最省,但受限于已有文本嵌入流形、表达力弱,时序算不上"真新模态",复杂推理/事件联合弱。放弃 |
### 决策 2:骨干选 Qwen2.5-0.5B-Instruct
0.5B 中英均衡、有现成 Instruct 版、社区生态成熟;BF16 约 1GB12GB 余量充足(hidden=896)。
### 决策 3:两阶段训练,阶段①冻结 LLM
- **阶段① 对齐预训练**:冻结 LLM,仅训 TS Encoder + Projector~4.2M 全参)→ 不存 LLM 优化器状态/梯度,是 12GB 可行的关键省显存技巧
- **阶段② SFT**:在此之上叠加 LoRA r=16q/v_proj~2-3M),LLM 其余冻结 + 梯度检查点
分阶段 checkpoint 互不污染、可回滚。损失仅对回答段 token 计 LM loss;阶段①叠加对比损失(扰动时序→回答应变)防止 LLM 忽略 TS token。
### 决策 4:输入拼接顺序 `[属性][时间戳][TS token][事件][问题]`
属性先给语义,时序居中,事件定位在对应时间,问题在末尾便于回答。
### 决策 5:合成数据为主,真实 benchmark 仅用于评测锚定
合成管线全 CPU 离线,成分参数随机化;**核心红利**:异常段、事件时间戳、各成分参数全部作为 ground-truth 自动记录——免费且精确的标签。评测锚定 SMD/MSL/SMAP/SWaT/PSM 真实分布,避免「合成上 SOTA、真实上崩盘」。
### 决策 6:评测指标以 VUS-PR 为主,严守 MTSAD 报告纪律
- 主指标 **VUS-PR**(阈值无关);辅 Affiliation-F1(多 λ)、AUC-PR、Point-F1(无 PA
- **PA-F1 仅作对照、不得作主指标**(防虚高)
- 问答用 LLM-judge + 规则解析双轨
- 自然语言回答→约束 JSON 区间→逐点分数,便于数值化评测
### 决策 74 类同口径基线
纯 LLM 数值喂文本(检验 TS 模态是否真有增益)、Time-LLM 风格重映射、ChatTS(若可复现)、TrivialRandom/Constant/全报异常)。全部走同一套解析+指标脚本。
## Risks / Trade-offs
- [12GB 阶段②仍 OOM] → 降批量/上下文、开 CPU offload 优化器、`adamw_8bit`、退回阶段①-only 报告
- [合成→真实泛化差距大(高风险)] → 阶段②掺真实 benchmark 改写样本;评测以真实 benchmark 为准
- [LLM 忽略 TS token] → 对比损失 + "必看时序"样本 + 消融实验定位
- [回答 JSON 解析失败率高] → 训练强化格式约束 + 解析兜底(失败→全 0 计漏报)+ 单独报解析成功率
- [GPT-4o judge 成本] → 仅评测 2k 样本调用;可换开源 judge 做 sanity
- [TS Encoder 过拟合合成分布] → 成分参数随机化 + 多套合成配置 + 阶段②引入真实改写样本
## Open Questions
- TS Encoder 层数/d 是否需小规模 sweep(2 层是否够)
- Patch P=8/stride=4 是否最优,是否需对比 P=16
- 对比损失具体形式(InfoNCE vs 扰动一致性)与权重 λ
- DPO 是否纳入首版(建议首版先不做,M5 后视效果决定)
- 真实 benchmark 改写问答的数量与质量校验流程
> 详细行为需求见 `specs/ts-synthesis/`、`specs/ts-multimodal-model/`、`specs/ts-evaluation/`;任务拆解见 `tasks.md`M1→M5)。