c160718934
- 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
89 lines
5.6 KiB
Markdown
89 lines
5.6 KiB
Markdown
## Context
|
||
|
||
本 change 在**单张 3060 12GB 消费级显卡**上做一个可复现的实验性落地:把**多变量时序视为独立模态**,与文本/事件模态联合注入小型 LLM(Qwen2.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
|
||
|
||
时序切 patch(P=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 时序 Tokenization(Chronos 风格) | 数值量化成离散 token、扩展词表 | 最"时序即语言",但量化丢精度、异常细节易损;逐点 token 序列长,12GB 上下文吃紧。放弃 |
|
||
| C Reprogramming(Time-LLM 风格) | 冻结 LLM 用文本原型重映射 | 参数最省,但受限于已有文本嵌入流形、表达力弱,时序算不上"真新模态",复杂推理/事件联合弱。放弃 |
|
||
|
||
### 决策 2:骨干选 Qwen2.5-0.5B-Instruct
|
||
|
||
0.5B 中英均衡、有现成 Instruct 版、社区生态成熟;BF16 约 1GB,12GB 余量充足(hidden=896)。
|
||
|
||
### 决策 3:两阶段训练,阶段①冻结 LLM
|
||
|
||
- **阶段① 对齐预训练**:冻结 LLM,仅训 TS Encoder + Projector(~4.2M 全参)→ 不存 LLM 优化器状态/梯度,是 12GB 可行的关键省显存技巧
|
||
- **阶段② SFT**:在此之上叠加 LoRA r=16(q/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 区间→逐点分数,便于数值化评测
|
||
|
||
### 决策 7:4 类同口径基线
|
||
|
||
纯 LLM 数值喂文本(检验 TS 模态是否真有增益)、Time-LLM 风格重映射、ChatTS(若可复现)、Trivial(Random/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)。
|