Commit cdf33bb2 cdf33bb25a84c92e88cbbc6755226d089ab6f64f by cnb.bofCdSsphPA

Preserve the observable build-index state so the next session can resume from the real bottleneck

Constraint: Long-running CPU-only chromaprint indexing has not reached evaluate yet
Rejected: Keep appending linear refs_done updates | produces noise without a stage transition
Confidence: high
Scope-risk: narrow
Directive: Do not create the next handoff commit until chromaprint completes, reference_* appears, evaluate starts, or the process fails
Tested: Verified /tmp/chroma_index_observable_smoke progress snapshot; reviewed updated handoff/changelog files
Not-tested: No new model/evaluation result because build-index has not reached the next stage
1 parent bc6d07af
......@@ -72,40 +72,32 @@
- `hybrid` 波动收敛
- 更接近商用的数据集组合评测
## 5.5 最新真实 FMA smoke 运行态(2026-06-02)
### 当前最新快照(13:36 UTC)
- 远程同步基线:`c2d7820cdeebb142896916c0a03726521e5c09d8`
- 真实 FMA smoke 已完成训练,`best_model.pt``song_to_idx.json` 已生成。
- 当前最重要活跃阶段不是训练,而是:
- `run_demo.py build-index --data /tmp/fma_real_smoke_stopcheck/fma/manifests ...`
-`2026-06-02 13:36 UTC`
- `evaluate.py` 仍未出现
- `fma_index_smoke/` 目录已创建,但还没有索引产物文件证据
- 因此新 session 不应重复排查训练;应优先盯住 `build-index -> evaluate` 的阶段切换。
- 真实 FMA 数据已本地就绪:`acr-engine/data/raw/fma_small_audio/`
- 已验证:
- `num_audio_files=8000`
- `eligible_query_files=7994`
- `ready_for_smoke=true`
- 当前有一条真实 FMA 端到端 smoke 正在运行:
- 进程:`src/data/external_adapters.py smoke-local fma ...`
- 输出:`/tmp/fma_real_smoke_stopcheck`
- 训练子进程:`train.py --data /tmp/fma_real_smoke_stopcheck/fma/manifests ...`
- 最新 checkpoint(2026-06-02 12:09 UTC):
- `train.py` 仍在运行
- `ELAPSED=12:00`
- `catalog_references=8000`
- `train_queries=6401`
- `test_queries=1593`
- `fma_models_smoke/` 仍为空,这在当前实现中是正常现象,因为 `best_model.pt` 只会在 `Epoch 1` 结束后首次保存
- 环境确认无 GPU:
- `nvidia-smi` 不可用
- `torch.cuda.is_available() = false`
- 因此当前最真实的卡点不是 bug,而是 **CPU-only 真实 FMA smoke 耗时长**
## 5.5 最新真实 FMA / chromaprint 运行态(2026-06-02)
### 当前最新快照(14:25 UTC)
- 远程同步基线:`bc6d07afbd1e31d3956d20e35c20c424bc21ba99`
- 已推送完成:
- chromaprint `_find_peaks()` 等价优化
- chromaprint 建索引 observability
- 新 session 的主要监控对象应切到:
- `PID=431703`
- `/tmp/chroma_index_observable_smoke/chromaprint_progress.json`
- `/tmp/chroma_index_observable_smoke/chromaprint.pkl`
- `2026-06-02 14:25:32 UTC` 证据:
- `status=building`
- `refs_done=1740/8000`
- `elapsed_sec=1385.4`
- `eta_sec=4984.254`
- `hashes=229127`
- `postings=1510952`
- 当前尚未出现 `reference_*``evaluate.py`,因此**还不能输出最终 accuracy 结论**
-`PID=424691` 真实 FMA 全量 build-index 进程仍在,但它是 observability 改动前启动的旧路径;不要把它当作新代码验证来源。
- 下一次值得提交的事件只应是:
1. `chromaprint_progress.json status=complete`
2. `reference_*` 文件出现
3. `evaluate.py` 启动
4. 或明确失败
## 6. 高风险注意事项
......
## 2026-06-02 14:25 UTC / restart-package handoff refresh
- 交付基线刷新为:`bc6d07afbd1e31d3956d20e35c20c424bc21ba99`
- 固化当前最重要运行证据:observable chromaprint smoke
- `PID=431703`
- `status=building`
- `refs_done=1740/8000`
- `hashes=229127`
- `postings=1510952`
- 明确旧真实 FMA build-index 进程仅作背景运行态,不再作为新 observability 代码验证来源
- 重写交付/交接文档,便于新 session 直接从 `chromaprint -> reference_* -> evaluate` 阶段继续
- 约束保持不变:不提交 `data/raw``data/external_smoke``/tmp`、checkpoint、`__pycache__`
## 2026-06-02 chromaprint build-index observability checkpoint
完成项:
......
# Changelist / 2026-06-02
## 本次最终交付补充(13:36 UTC)
## 本次补充交付(2026-06-02 14:25 UTC)
- 已把最新真实 FMA 全量 smoke 状态固化到 handoff 文档。
- 当前事实已变为:训练完成,进入 `build-index`,但 `evaluate.py` 尚未开始。
- 新 session 不应再从训练阶段开始理解,而应直接接管 `build-index` 监控。
### 目标
在当前长时间 `build-index` 尚未结束前,先把**可重启、可续跑、可判断阶段切换**的交付包固化下来。
### 本次纳入交付的内容
## 本次交付目标
在不等待长时间 benchmark 完成的前提下,交付一套足够完整的续跑文档,让新 session 能立刻知道:
- 已完成什么
- 正在卡在哪里
- 下一步跑什么
- 哪些文件能提,哪些不能提
## 文件级变更
| 文件 | 变更说明 |
| 类别 | 内容 |
|---|---|
| [../AGENT.md](../AGENT.md) | 新增开发偏好与续跑记忆 |
| [./session-handoff.md](./session-handoff.md) | 增补当前卡点、待办与续跑命令 |
| [./delivery-handoff-2026-06-02.md](./delivery-handoff-2026-06-02.md) | 新增快速接管摘要 |
| [./CHANGELOG.md](./CHANGELOG.md) | 记录本次交付检查点 |
## 不在本次提交中的内容
- FMA / MTG-Jamendo 原始数据
- `data/external_smoke` 中的音频与模型产物
- `/tmp` benchmark 输出
- `__pycache__`
- checkpoint / index 目录
## 当前运行中的任务
- `cap48 top2 seed=999`
- 启动命令:
```bash
cd /workspace/acr-engine
/usr/local/miniconda3/bin/python scripts/ab_smoke_segmentation.py \
--dataset fma \
--input-dir data/raw/fma_small_audio \
--work-root /tmp/ab_smoke_seg_cap48_top2_seed999 \
--subset-size 48 \
--query-duration 8 \
--train-epochs 1 \
--batch-size 2 \
--device cpu \
--strategies hybrid high_energy \
--max-test-queries 24 \
--seed 999 \
--output-json /tmp/ab_smoke_seg_cap48_top2_seed999/report.json
```
## 下一步建议
1. 检查 `seed=999` 是否完成。
2. 生成 3-seed aggregate。
3. 回写 workflow / handoff / changelog。
4. 提交推送。
5. 再开启 cap64 或 bucket benchmark。
## 本次追加证据
- 已确认 `cap48 top2 seed=999` 未卡在 build-index。
- `hybrid` 已完成 reference index,随后进入 `evaluate.py`
- 本次提交用于沉淀这份 fresh verification evidence,方便下个 session 不必重复排查。
- 已补记 `hybrid` seed=999 的中间结果:`top1=0.875 / topk=1.0 / num_queries=24`
- 已补齐 `seed=999` 最终结果,并完成 cap48 三 seed aggregate 归纳。
- 已记录 cap64 benchmark 已启动,并确认进入 `high_energy` 训练阶段。
- 已补充 cap64 新鲜证据:`high_energy` 索引完成(`64 refs / 657 windows / 192-d`)并进入 `evaluate.py`
- 已补充 cap64 首个结果:`high_energy = top1 0.625 / topk 1.0 / num_queries 32`,并记录主流程切换到 `hybrid`
- 已补充 cap64 阶段推进:`hybrid` 已进入训练阶段。
- 已补充 cap64 阶段推进:`hybrid` 已完成训练并进入 build-index。
- 已补充 cap64 新鲜证据:从运行会话确认 `hybrid``Epoch 1/1` 已完整跑完。
- 已补充 cap64 新鲜证据:`hybrid` reference index 完成(`64 refs / 657 windows / 192-d`)并进入 `evaluate.py`
- 已补齐 cap64 最终结果:`hybrid=0.875``high_energy=0.625`,winner=`hybrid`
- 已新增 `acr-engine/scripts/ab_smoke_bucketed.py`,并完成首个 bucket 的 smoke 验证。
- 已补齐 bucket/style-aware smoke 的完整汇总:
- `prefix_000_a` winner=`hybrid`
- `prefix_000_b` winner=`high_energy`
- aggregate 层面两者 `mean_top1=1.0`,但 `hybrid` `mean_num_queries` 更高。
## 最新待办(重启后直接接手)
1. 把 toy prefix bucket 升级为更有业务意义的 bucket:
- 高能段主导
- 重复副歌明显
- 节拍规整
- 混淆样本 / hard negative
2. 继续补 cap64 multi-seed,而不是只保留单 seed。
3. 在 bucket 基线下继续优化 `hybrid` 波动,而不是过早锁定全局默认策略。
4. 保持“文档更新 -> changelog -> commit -> push”的阶段节奏。
- 已新增 `acr-engine/scripts/business_export_offline_smoke.py`,并拿到端到端离线 smoke fresh evidence。
- 已确认链路:业务导出样例 -> 规范化 -> 项目 manifest -> `train.py --dry-run`
- 已补记真实 FMA smoke 的进行中 fresh evidence:
- `fma_small_audio``ready_for_smoke=true`
- 真实 smoke 输出目录:`/tmp/fma_real_smoke_stopcheck`
- manifest 校验通过:`catalog_references=8000`, `train_queries=6401`, `test_queries=1593`
- 当前环境无 GPU,真实 smoke 正在 CPU 上进入长训练阶段
- 训练中途 `fma_models_smoke/` 为空是正常现象,因为 `train.py``Epoch 1` 结束后才首次保存 `best_model.pt`
## 本次收尾补充(12:09 UTC fresh evidence)
- 已确认真实 FMA smoke 仍在 CPU 训练中:`train.py` `ELAPSED=12:00`
- 已再次确认 manifest 校验通过:
- `catalog_references=8000`
- `train_queries=6401`
- `test_queries=1593`
- `val_queries=0`
- 已确认 `/tmp/fma_real_smoke_stopcheck/fma_models_smoke/` 仍为空目录,但这符合当前 `train.py` 的 epoch-end 保存逻辑。
- 已将这些状态同步写入:
- [./session-handoff.md](./session-handoff.md)
- [./delivery-handoff-2026-06-02.md](./delivery-handoff-2026-06-02.md)
- [./CHANGELOG.md](./CHANGELOG.md)
- [../AGENT.md](../AGENT.md)
### 现在的真正卡点
1. 无 GPU,真实 FMA 全量 smoke 训练时间长。
2. MTG-Jamendo 本地目录尚未就绪,无法进入同级 smoke。
3. 工作区有大量数据噪音,必须继续精准暂存。
### 重启后的直接动作
1. 先看 [./session-handoff.md](./session-handoff.md)
2. 再检查真实 FMA smoke 是否已经产出 `best_model.pt` 或进入 `build-index/evaluate`
3. 若完成,则先补文档、changelog、commit、push,再继续下一轮 benchmark。
## 12:11 UTC 再校验补充
- 已拿到比上一提交更新的 fresh evidence:`train.py ELAPSED=14:25`
- 已确认当前仍未切换到 `build-index``evaluate` 进程。
- 已确认模型输出目录仍为空,仅有目录本身。
- 这进一步证明:当前是长时间 CPU 训练,不是进程悬挂。
## 12:12 UTC 再次时间推进补充
- 最新 live 证据已推进到:`train.py ELAPSED=15:12`
- 当前 CPU / 内存观测:`%CPU≈614`, `%MEM≈10.5`
- 仍未出现 `build-index/evaluate` 进程,也未出现首个模型文件。
- 这说明当前只是继续处在真实 FMA 全量 epoch 内训练阶段。
## 12:14 UTC 时间推进补充
- 最新 live 证据已推进到:`train.py ELAPSED=17:07`
- 仍未出现模型文件,也未切换到 `build-index/evaluate`
- manifest 校验结果保持不变且继续通过。
## 12:15 UTC 时间推进补充
- 最新 live 证据已推进到:`train.py ELAPSED=18:22`
- 仍未出现模型文件,也未切换到 `build-index/evaluate`
- manifest 复核继续通过,统计保持不变。
## 12:16 UTC 时间推进补充
- 最新 live 证据已推进到:`train.py ELAPSED=19:12`
- 当前 CPU / 内存观测:`%CPU≈614`, `%MEM≈10.6`
- 仍未出现模型文件,也未切换到 `build-index/evaluate`
- manifest 复核继续通过,统计保持不变。
## 12:17 UTC 时间推进补充
| 代码 | chromaprint 峰值扫描等价优化;建索引进度可观测化 |
| 证据 | `/tmp/chroma_index_observable_smoke/chromaprint_progress.json` live checkpoint |
| 文档 | `CHANGELOG``changelist``delivery handoff``session handoff``AGENT memory` |
| 交接 | 明确旧 FMA 进程与新 observable 进程的区别 |
- 最新 live 证据已推进到:`train.py ELAPSED=20:08`
- 当前 CPU / 内存观测:`%CPU≈614`, `%MEM≈10.6`
- 仍未出现模型文件,也未切换到 `build-index/evaluate`
- manifest 复核继续通过,统计保持不变。
### 文件级变更
## 12:19 UTC 时间推进补充
- 最新 live 证据已推进到:`train.py ELAPSED=22:10`
- 当前 CPU / 内存观测:`%CPU≈615`, `%MEM≈10.7`
- 仍未出现模型文件,也未切换到 `build-index/evaluate`
- manifest 复核继续通过,统计保持不变。
## 12:20 UTC 时间推进补充
- 最新 live 证据已推进到:`train.py ELAPSED=22:58`
- 当前 CPU / 内存观测:`%CPU≈615`, `%MEM≈10.8`
- 仍未出现模型文件,也未切换到 `build-index/evaluate`
- manifest 复核继续通过,统计保持不变。
## 12:21 UTC(30 秒窗口)时间推进补充
- 最新 live 证据已推进到:`train.py ELAPSED=24:11`
- 当前 CPU / 内存观测:`%CPU≈615`, `%MEM≈11.3`
- 30 秒额外等待后,仍未出现模型文件,也未切换到 `build-index/evaluate`
- manifest 复核继续通过,统计保持不变。
## 12:25 UTC(120 秒窗口)时间推进补充
- 最新 live 证据已推进到:`train.py ELAPSED=27:54`
- 当前 CPU / 内存观测:`%CPU≈615`, `%MEM≈11.2`
- 120 秒额外等待后,仍未出现模型文件,也未切换到 `build-index/evaluate`
- manifest 复核继续通过,统计保持不变。
## 12:29 UTC(180 秒窗口)时间推进补充
- 最新 live 证据已推进到:`train.py ELAPSED=31:47`
- 当前 CPU / 内存观测:`%CPU≈615`, `%MEM≈11.0`
- 180 秒额外等待后,仍未出现模型文件,也未切换到 `build-index/evaluate`
- manifest 复核继续通过,统计保持不变。
## 12:34 UTC 重大阶段切换补充
- 已确认 `train.py` 阶段结束。
- 已确认首个模型文件落盘:`best_model.pt`
- 已确认流程切换到:`run_demo.py build-index ...`
- 这意味着当前最大不确定性已从“训练是否卡死”切换为“索引何时完成并进入 evaluate”。
## 12:37 UTC build-index 持续阶段补充
- 已确认当前主下游进程仍是 `run_demo.py build-index ...`
- 已确认索引目录 `/tmp/fma_real_smoke_stopcheck/fma_index_smoke/` 已创建。
- 截至该时点,尚未看到新的索引产物文件,也未切换到 `evaluate.py`
- manifest 复核继续通过,统计保持不变。
## 12:39 UTC build-index 延续补充
- 已确认主下游进程仍是 `run_demo.py build-index ...`
- 已确认 `evaluate.py` 仍未出现。
- 已确认索引目录仍只有目录本身,尚未看到新的索引产物文件。
- manifest 复核继续通过,统计保持不变。
## 12:43 UTC build-index 再延续补充
- 已确认主下游进程仍是 `run_demo.py build-index ...`
- 已确认 `evaluate.py` 仍未出现。
- 已确认索引目录仍只有目录本身,尚未看到新的索引产物文件。
- manifest 复核继续通过,统计保持不变。
## 12:51 UTC build-index 最新延续补充
- 已确认主下游进程仍是 `run_demo.py build-index ...`
- 已确认 `evaluate.py` 仍未出现。
- 已确认索引目录仍只有目录本身,尚未看到新的索引产物文件。
- manifest 复核继续通过,统计保持不变。
## 12:55 UTC build-index 延续补充
- 已确认主下游进程仍是 `run_demo.py build-index ...`
- 已确认 `evaluate.py` 仍未出现。
- 已确认索引目录仍只有目录本身,尚未看到新的索引产物文件。
- manifest 复核继续通过,统计保持不变。
## 12:59 UTC build-index 延续补充
- 已确认主下游进程仍是 `run_demo.py build-index ...`
- 已确认 `evaluate.py` 仍未出现。
- 已确认索引目录仍只有目录本身,尚未看到新的索引产物文件。
- manifest 复核继续通过,统计保持不变。
## 13:04 UTC build-index 延续补充
- 已确认主下游进程仍是 `run_demo.py build-index ...`
- 已确认 `evaluate.py` 仍未出现。
- 已确认索引目录仍只有目录本身,尚未看到新的索引产物文件。
- manifest 复核继续通过,统计保持不变。
## 13:10 UTC build-index 延续补充
- 已确认主下游进程仍是 `run_demo.py build-index ...`
- 已确认 `evaluate.py` 仍未出现。
- 已确认索引目录仍只有目录本身,尚未看到新的索引产物文件。
- manifest 复核继续通过,统计保持不变。
## 13:16 UTC build-index 延续补充
- 已确认主下游进程仍是 `run_demo.py build-index ...`
- 已确认 `evaluate.py` 仍未出现。
- 已确认索引目录仍只有目录本身,尚未看到新的索引产物文件。
- manifest 复核继续通过,统计保持不变。
## 13:22 UTC build-index 延续补充
- 已确认主下游进程仍是 `run_demo.py build-index ...`
- 已确认 `evaluate.py` 仍未出现。
- 已确认索引目录仍只有目录本身,尚未看到新的索引产物文件。
- manifest 复核继续通过,统计保持不变。
## 13:28 UTC build-index 延续补充
- 已确认主下游进程仍是 `run_demo.py build-index ...`
- 已确认 `evaluate.py` 仍未出现。
- 已确认索引目录仍只有目录本身,尚未看到新的索引产物文件。
- manifest 复核继续通过,统计保持不变。
## 13:34 UTC build-index 延续补充
- 已确认主下游进程仍是 `run_demo.py build-index ...`
- 已确认 `evaluate.py` 仍未出现。
- 已确认索引目录仍只有目录本身,尚未看到新的索引产物文件。
- manifest 复核继续通过,统计保持不变。
| 文件 | 说明 |
|---|---|
| [./CHANGELOG.md](./CHANGELOG.md) | 补记本次 restart package 交付 |
| [./delivery-handoff-2026-06-02.md](./delivery-handoff-2026-06-02.md) | 重写为当前最短接管包 |
| [./session-handoff.md](./session-handoff.md) | 顶部快照切到 `bc6d07a + observable chromaprint` |
| [../AGENT.md](../AGENT.md) | 更新长期记忆,避免新 session 误判当前阶段 |
### 当前最重要的 fresh evidence
- 远程基线:`bc6d07afbd1e31d3956d20e35c20c424bc21ba99`
- 观测时间:`2026-06-02 14:25:32 UTC`
- 观测对象:`/tmp/chroma_index_observable_smoke/chromaprint_progress.json`
- 状态:
- `status=building`
- `refs_done=1740/8000`
- `elapsed_sec=1385.4`
- `eta_sec=4984.254`
- `hashes=229127`
- `postings=1510952`
- 已确认:新代码路径会持续写出 `chromaprint_progress.json``chromaprint.pkl`
- 未确认:`reference_*``evaluate.py`、最终 report
### 重要决策
1. 现在**不再**重复记录每一次 `refs_done` 的线性增长。
2. 下一个值得再次提交的节点只应是:
- `chromaprint` 完成
- `reference_*` 文件出现
- `evaluate.py` 启动
- 或明确失败
3. 旧的 `PID=424691` 只作为背景运行态,不作为新 observability 改动验证。
### 重启后的直接待办
1. 查看 [./session-handoff.md](./session-handoff.md)
2. 检查 `PID=431703` 是否仍在运行
3. 监控 `/tmp/chroma_index_observable_smoke/`
4. 出现阶段切换后,再回写文档并提交推送
......
# Delivery Handoff / 2026-06-02
## 本次最终可交付结论(13:36 UTC)
本次应交付的核心不是“最终评测分数”,而是**可直接续跑的真实 FMA 全量 smoke 状态包**
- 远程已同步到:`c2d7820cdeebb142896916c0a03726521e5c09d8`
- 真实 FMA 全量 smoke 已确认 **训练完成**
- 已有模型产物:`best_model.pt``song_to_idx.json`
- 当前仍在 **CPU-only build-index** 阶段
- `evaluate.py` 仍未启动
- manifest 仍有效:`8000 refs / 6401 train queries / 1593 test queries`
### 新 session 第一优先级
只做一件最有价值的事:
- 持续盯住 `/tmp/fma_real_smoke_stopcheck/fma_index_smoke``evaluate.py` 的出现,捕获首个索引产物或最终评测结果。
## 一页接管
当前可以直接交付的不是“最终算法结论”,而是“可持续续跑的工程状态”:
- 文档主结构已成型
- 数据规范/输入输出/pgvector 说明已补齐
- 切片策略与公平评测能力已落地
- 最新大一点的 benchmark 还在跑,结果未最终封板
## 已完成
- 多种音乐感知切片策略已接入训练与 query 生成。
- 真实 FMA mini-subset smoke A/B 已多轮验证。
- `high_energy``hybrid` 已成为当前最强候选。
- cap48 结果已明确存在 seed sensitivity。
- 文档已经浓缩为可导航结构。
## 当前最关键交付事实(12:09 UTC checkpoint)
- 真正还在持续执行的是 **真实 FMA 全量 smoke**,不是 toy benchmark。
- 当前主训练进程:
- `PID=311629`
- `ELAPSED=12:00`
- `%CPU≈615`
- 当前 manifest 规模:
- `catalog_references=8000`
- `train_queries=6401`
- `test_queries=1593`
- 当前模型目录 `/tmp/fma_real_smoke_stopcheck/fma_models_smoke/` 仍为空,但这是符合当前 `train.py` 实现的正常现象:`best_model.pt` 会在 `Epoch 1` 结束后首次保存。
- 截至 2026-06-02 12:11 UTC,再次校验仍未进入 `build-index` / `evaluate`,最新 `train.py ELAPSED=14:25`
- 所以这轮交付最重要的不是“最终精度”,而是**把正在跑的真实大规模 smoke 状态、卡点和续跑方式明确记录下来**
## 当前最关键交付事实(12:34 UTC checkpoint)
- 真实 FMA 全量 smoke 已经跨过训练结束点。
- `best_model.pt` 已成功落盘。
- 当前主流程已进入 `build-index`,说明这轮真实 smoke 不再只是“长时间 CPU 训练进行中”,而是已经进入下游索引阶段。
- 下一关键证据变为:索引完成后是否切入 `evaluate`,以及最终 metrics/report 是否生成。
- 截至 2026-06-02 12:37 UTC,主流程仍停留在 `build-index`;索引目录已创建,但尚未观测到索引产物文件或 `evaluate.py` 进程。
- 截至 2026-06-02 12:39 UTC,`build-index` 仍在持续,`fma_index_smoke/` 已存在但尚未看到索引产物文件,`evaluate.py` 仍未出现。
- 截至 2026-06-02 12:43 UTC,`build-index` 仍在持续,`fma_index_smoke/` 仍只有目录本身,`evaluate.py` 仍未出现。
- 截至 2026-06-02 12:51 UTC,`build-index` 仍在持续,`fma_index_smoke/` 仍只有目录本身,`evaluate.py` 仍未出现。
- 截至 2026-06-02 12:55 UTC,`build-index` 仍在持续,`fma_index_smoke/` 仍只有目录本身,`evaluate.py` 仍未出现。
- 截至 2026-06-02 12:59 UTC,`build-index` 仍在持续,`fma_index_smoke/` 仍只有目录本身,`evaluate.py` 仍未出现。
- 截至 2026-06-02 13:04 UTC,`build-index` 仍在持续,`fma_index_smoke/` 仍只有目录本身,`evaluate.py` 仍未出现。
- 截至 2026-06-02 13:10 UTC,`build-index` 仍在持续,`fma_index_smoke/` 仍只有目录本身,`evaluate.py` 仍未出现。
- 截至 2026-06-02 13:16 UTC,`build-index` 仍在持续,`fma_index_smoke/` 仍只有目录本身,`evaluate.py` 仍未出现。
- 截至 2026-06-02 13:22 UTC,`build-index` 仍在持续,`fma_index_smoke/` 仍只有目录本身,`evaluate.py` 仍未出现。
- 截至 2026-06-02 13:28 UTC,`build-index` 仍在持续,`fma_index_smoke/` 仍只有目录本身,`evaluate.py` 仍未出现。
- 截至 2026-06-02 13:34 UTC,`build-index` 仍在持续,`fma_index_smoke/` 仍只有目录本身,`evaluate.py` 仍未出现。
## 本次交付包(2026-06-02 14:25 UTC)
## 当前卡点
### 卡点 1:真实 FMA smoke 已进入 build-index,但还未到最终评测结果
当前最新状态:
- `best_model.pt` 已成功落盘
- `train.py` 已结束
- 当前正在执行 `run_demo.py build-index ...`
真正待做:
- 等待 `build-index` 完成
- 捕获是否切换到 `evaluate`
- 完成后回写最终 report / metrics / artifacts
### 卡点 2:还没有单一全局默认策略
当前最新状态:
- cap48 三 seed 聚合:`high_energy` 更稳
- cap64 单 seed:`hybrid` 更强
- bucket toy smoke:两个 bucket 分别出现不同 winner
- 因此当前不能把某一个策略写死为“全局最优”
### 交付结论
真正待做:
- 增加更有语义的 bucket
- 补 cap64 multi-seed
- 继续降低 `hybrid` 波动
这次应交付的是一套**可直接续跑的工程包**,而不是最终评测分数:
- 远程基线已同步到:`bc6d07afbd1e31d3956d20e35c20c424bc21ba99`
- chromaprint 热点优化与可观测性增强已提交并推送
- 当前最重要的真实运行证据来自 **可观测 FMA build-index smoke**
- 还没有进入 `evaluate.py`,因此**暂不输出最终准确率结论**
### 卡点 3:工作区噪音很大
### 当前最新事实
当前有大量未跟踪或变更的数据/产物文件,提交时必须精准暂存文档文件。
#### 已交付代码能力
- `acr-engine/src/engines/chromaprint_matcher.py`
- `_find_peaks()` 改为 `sliding_window_view` 等价实现
- 保持 hash 输出一致的前提下,单样本约 `2.02x` 加速
- `acr-engine/run_demo.py`
- 支持 `--chromaprint-checkpoint-every-refs`
- chromaprint 建索引阶段新增:
- `chromaprint_progress.json`
- 周期性 `chromaprint.pkl` partial cache 持久化
## 建议接手顺序
1. 先从 [session-handoff.md](./session-handoff.md)[open-dataset-workflow.md](./open-dataset-workflow.md) 读取当前结论。
2. 优先把 toy prefix bucket 升级为语义 bucket。
3. 继续补 cap64 multi-seed。
4. 回写结论到:
- [open-dataset-workflow.md](./open-dataset-workflow.md)
- [session-handoff.md](./session-handoff.md)
- [CHANGELOG.md](./CHANGELOG.md)
5. 单独提交文档,再进入下一轮 benchmark。
## 推荐检查命令
```bash
pgrep -af 'ab_smoke_seg_cap48_top2_seed999|external_adapters.py smoke-local fma /tmp/ab_smoke_seg_cap48_top2_seed999|evaluate.py --data /tmp/ab_smoke_seg_cap48_top2_seed999|run_demo.py build-index --data /tmp/ab_smoke_seg_cap48_top2_seed999|train.py --data /tmp/ab_smoke_seg_cap48_top2_seed999'
```
#### 当前最可信 live evidence
- 可观测进程:`PID=431703`
- 命令:
```bash
test -f /tmp/ab_smoke_seg_cap48_top2_seed999/report.json && cat /tmp/ab_smoke_seg_cap48_top2_seed999/report.json || echo NO_REPORT
cd /workspace/acr-engine
/usr/local/miniconda3/bin/python run_demo.py build-index \
--data data/external_smoke/fma/manifests \
--model data/external_smoke/fma_models_smoke/best_model.pt \
--output /tmp/chroma_index_observable_smoke \
--device cpu \
--checkpoint-every-refs 10 \
--chromaprint-checkpoint-every-refs 10 \
--resume
```
## 下一轮已启动
- 新 benchmark:`/tmp/ab_smoke_seg_cap64_top2`
- 当前阶段:`high_energy` 已完成评测,结果为 `top1=0.625 / topk=1.0 / num_queries=32`
- cap64 已完成,结果:`hybrid=0.875`, `high_energy=0.625`
- cap64 winner=`hybrid`
- 下一 session 应优先进入 bucket/style-aware benchmark
## 当前最关键的新事实
- bucket/style-aware benchmark 的完整汇总已经生成:`/tmp/ab_smoke_bucketed_smoke/report.json`
- `prefix_000_a` winner=`hybrid`
- `prefix_000_b` winner=`high_energy`
- aggregate:
- `hybrid``mean_top1=1.0, mean_num_queries=4.0`
- `high_energy``mean_top1=1.0, mean_num_queries=3.5`
- 这意味着 bucket baseline 已经可以作为后续“解释不同子集 winner 分化”的最小工程基础。
- `2026-06-02 14:25:32 UTC` 最新状态:
- `status=building`
- `refs_done=1740 / 8000`
- `elapsed_sec=1385.4`
- `eta_sec=4984.254`
- `hashes=229127`
- `postings=1510952`
- `chromaprint.pkl=16787221 bytes`
- `chromaprint_progress.json=230 bytes`
- 当前**尚未出现**
- `reference_progress.json`
- `reference_embs.partial.npy`
- `reference_ids.partial.npy`
- `reference_embs.npy`
- `reference_ids.npy`
- `evaluate.py`
#### 旧真实 FMA 全量进程如何看待
- 旧进程 `PID=424691` 仍在跑 `build-index`
- 但它启动于本次 observability 改动之前
- **不要**把它当作新可观测代码路径的验证来源
## 新 session 接管顺序
1. 先看 [./session-handoff.md](./session-handoff.md)
2. 再看 [./changelist-2026-06-02.md](./changelist-2026-06-02.md)
3. 然后只盯住以下 4 个事件:
1. `chromaprint_progress.json` 变成 `status=complete`
2. 任一 `reference_*` 文件出现
3. `evaluate.py` 启动
4. 进程报错退出
## 当前卡点
## 最新新增的实跑证据
1. 当前环境仍是 **CPU-only**,建索引耗时长。
2. 当前还处于 chromaprint 阶段,尚未进入 embedding / evaluate。
3. 工作树含大量数据噪音,提交时必须只显式暂存文档/代码文件。
- 新增脚本:`acr-engine/scripts/business_export_offline_smoke.py`
- 已在本地真实可读音频上跑通:
- 业务导出样例 -> 规范化 -> 项目 manifest -> `train.py --dry-run`
- 关键结果:
- `catalog_refs=2`
- `train_queries=1`
- `test_queries=1`
- `val_queries=0`
- `dry_run_passed=true`
## 重启后最短检查命令
```bash
date -u '+%Y-%m-%d %H:%M:%S UTC'
cat /tmp/chroma_index_observable_smoke/chromaprint_progress.json
find /tmp/chroma_index_observable_smoke -maxdepth 1 -type f -printf '%f %s bytes\n' | sort
ps -p 431703 -o pid,etimes,time,%cpu,%mem,stat,command
pgrep -af 'evaluate.py --data data/external_smoke/fma/manifests'
```
## 最短可跑命令
## 本次交付包含的关键文档
重启后如果你只想先确认链路是否还通,直接运行:
- [./CHANGELOG.md](./CHANGELOG.md)
- [./changelist-2026-06-02.md](./changelist-2026-06-02.md)
- [./session-handoff.md](./session-handoff.md)
- [../AGENT.md](../AGENT.md)
```bash
cd /workspace/acr-engine
/usr/local/miniconda3/bin/python scripts/business_export_offline_smoke.py \
--output-root /tmp/business_export_offline_smoke
```
## 本次明确不提交
预期:
- 业务导出离线链跑通
- 项目 `catalog/train/test/val` 成功生成
- `train.py --dry-run` 通过
## 当前最关键交付事实(13:36 UTC checkpoint)
- 活跃进程:
- `311494``external_adapters.py smoke-local fma ...`
- `424691``run_demo.py build-index --data /tmp/fma_real_smoke_stopcheck/fma/manifests ...`
- 已有文件:
- `/tmp/fma_real_smoke_stopcheck/fma_models_smoke/best_model.pt`
- `/tmp/fma_real_smoke_stopcheck/fma_models_smoke/song_to_idx.json`
- 当前还没有文件证据表明索引构建已产出最终 index artifact。
- 当前还没有 `evaluate.py` 进程证据。
- 结论:下一次提交应该围绕 `build-index` 首个产物或最终 `evaluate` metrics,而不是重复解释训练阶段。
- `acr-engine/data/raw/*`
- `acr-engine/data/external_smoke/*`
- `/tmp/*`
- checkpoint / index artifacts
- `__pycache__`
......
......@@ -5,26 +5,38 @@
## 一页结论
### 最新交付快照(2026-06-02 13:36 UTC)
- 当前远程同步基线:`c2d7820cdeebb142896916c0a03726521e5c09d8`
- 真实 FMA 全量 smoke **已经完成训练**,并已产出:
- `/tmp/fma_real_smoke_stopcheck/fma_models_smoke/best_model.pt`
- `/tmp/fma_real_smoke_stopcheck/fma_models_smoke/song_to_idx.json`
- 当前主流程仍停留在 **`run_demo.py build-index`**
- `PID=311494``external_adapters.py smoke-local ...`
- `PID=424691``run_demo.py build-index --data /tmp/fma_real_smoke_stopcheck/fma/manifests ...`
- 截至 `2026-06-02 13:36 UTC`
- 仍未观测到 `evaluate.py`
- `/tmp/fma_real_smoke_stopcheck/fma_index_smoke/` 已存在,但尚未看到索引产物文件
- manifest 再校验仍通过:`catalog_references=8000`, `train_queries=6401`, `test_queries=1593`, `ok=true`
- 结论:当前不是训练卡死,而是 **CPU-only 全量真实 FMA 在长时间建索引**
- 下一关键证据只有两个:
1. 首个 index artifact 出现
2. 主流程切换到 `evaluate.py`
这是一个正在从原型向工业化推进的 **音乐 ACR / music retrieval** 项目。
当前已经完成:
### 最新交付快照(2026-06-02 14:25 UTC)
- 当前远程同步基线:`bc6d07afbd1e31d3956d20e35c20c424bc21ba99`
- 已正式交付的最新代码能力:
- chromaprint `_find_peaks()` 等价加速
- chromaprint 建索引进度可观测化
- `run_demo.py --chromaprint-checkpoint-every-refs`
- 当前最重要的 live evidence 不再是旧全量 FMA 进程,而是**新的 observable chromaprint smoke**
- `PID=431703`
- 输出目录:`/tmp/chroma_index_observable_smoke`
- `2026-06-02 14:25:32 UTC` 最新观测:
- `status=building`
- `refs_done=1740 / 8000`
- `elapsed_sec=1385.4`
- `eta_sec=4984.254`
- `hashes=229127`
- `postings=1510952`
- `chromaprint.pkl=16787221 bytes`
- 当前尚未出现:
- `reference_progress.json`
- `reference_embs.partial.npy`
- `reference_ids.partial.npy`
- `reference_embs.npy`
- `reference_ids.npy`
- `evaluate.py`
- 旧真实 FMA 全量进程 `PID=424691` 仍在运行,但它启动于 observability 改动前,**不要作为新代码路径的验证证据**
- 结论:当前不是训练问题,也不是新逻辑无证据;当前只是 **CPU-only chromaprint build-index 仍在稳定推进,尚未阶段切换**
- 下一次值得更新文档/提交的事件只有四种:
1. `chromaprint_progress.json` 变为 `status=complete`
2. 任一 `reference_*` 文件出现
3. `evaluate.py` 启动
4. 进程报错退出
这是一个正在从原型向工业化推进的 **音乐 ACR / music retrieval** 项目。
当前已经完成:
......