Skip to content

Latest commit

 

History

History
99 lines (76 loc) · 5.16 KB

File metadata and controls

99 lines (76 loc) · 5.16 KB

工程异常、自我迭代与防复发

状态:current

适用范围:BlindAssist 的算法研究、数据处理、训练、验证、Android 工程、工具链和 长时间自动任务。本文要求的不只是事后总结,而是运行前建立预期、运行中主动发现 异常、运行后把教训变成可执行防线。

基本原则

  • “进程存在”“没有抛异常”“协议仍合法”都不等于工作方式合理。
  • 正确性、证据完整性和执行效率必须同时设计;不能用严谨为明显低效或黑盒运行 辩护。
  • 发现异常后先区分可逆 pilot 与不可逆正式 attempt。前者应主动调整,后者保持 证据边界并监控到终态,把修复放入下一实现版本。
  • 一次材料性问题不能只留下聊天结论。至少要沉淀为代码修复、自动检查、回归 测试、监控、当前规则或明确的反例证据之一。

运行前必须建立的预期

预计超过 3 分钟、成本较高或会消费一次性权限的工作,在启动前至少写清:

  1. 预期阶段、输出和进度更新频率;
  2. 基于代表性 pilot 的 wall-time 区间;
  3. 合理的 CPU、GPU、I/O、RAM/VRAM 使用形态;
  4. 超过预期时先检查什么,以及何时停止或降级;
  5. 哪些动作可逆,哪些 claim、锁、外部写入或数据访问不可逆。

缺少真实性能或访问路径 pilot 时,不得把 fixture 通过当作长跑已准备好。无法 建立合理区间的正式任务应标记 PERFORMANCE_NOT_QUALIFIED

主动异常触发器

出现以下任一情况,不得继续用“还在运行”作为完整结论:

  • wall time 超过 pilot 上界,或已经超过 3 分钟但从未做过性能预检;
  • 连续两个预期进度周期没有 heartbeat、完成数或阶段变化;
  • 声称可并行的电脑端任务长期只占约一个核;
  • 选择了 GPU 路径但 GPU 长期空闲,或 CPU feeder、I/O 使 GPU 持续饥饿;
  • 逻辑读取量显著超过源数据量,尤其达到 10 倍以上;
  • RAM/VRAM 接近上限、发生换页、OOM 重试或吞吐随并发增加而下降;
  • 同一种失败或人工监控动作重复两次;
  • 输出存在但尺寸、数量、hash、时间戳或阶段关系明显不符合预期;
  • 只能证明 PID 活着,却无法说明阶段、进度、资源推进或终态。

阈值是诊断触发器,不自动推翻科学结果或授权破坏正式 attempt。

自我迭代闭环

每次材料性异常执行以下闭环:

  1. Detect:用基线与遥测指出具体偏差,不靠模糊感觉。
  2. Contain:保护数据、claim、锁、外部状态和并发工作;避免重复启动或扩大 影响。
  3. Observe:收集最小充分证据,包括阶段、PID、CPU/GPU、I/O、内存、日志和 产物状态。
  4. Explain:定位到数据路径、算法复杂度、并发模型、环境、协议或工具层;把 “相关现象”与“已证实根因”分开。
  5. Adapt:在合法边界内选择缓存、向量化、进程/线程、CUDA、批处理、重试、 降级、切分或更换验证方式。
  6. Institutionalize:把教训写入稳定入口,并增加能自动发现同类问题的工具、 测试或门禁。
  7. Verify:用原始反例或代表性工作负载证明防线会触发,并确认修复没有改变 预期科学输出。

如果最后没有形成项目变化,必须明确说明问题为何是一次性、为何现有防线已经足够; 不能默认“不改也没关系”。

黑盒长任务规则

  • 新增长任务必须发布 phasecompleted/total、窗口吞吐、ETA、 last_progress_at 和 terminal state。
  • 正式 one-shot/不可逆 claim、预计超过 15 分钟、高 I/O/内存/设备风险,或轻量 pilot 无法给出运行上界的新 host 任务必须通过 scripts/run_guarded_host_research.ps1;缺少 hash 绑定 pilot receipt、进度 合同或启动时 RAM/VRAM 余量时,runner 不得创建。3–15 分钟的可逆工作只需轻量 timeout、进度和 scoped-output 合同。
  • heartbeat 不得泄露被冻结协议禁止提前读取的 outcome。
  • watchdog 结合 heartbeat、CPU 与 I/O 判断疑似停滞;单独依赖 PID 或总时长都 不够。
  • 调用通道超时与计算进程终止必须明确区分。
  • 监控更新应报告变化和异常,不应每隔几分钟重复同一句空泛文案。

电脑端资源调度、性能准入和外部监控的具体实现见 HOST_RESEARCH_COMPUTE.md

本次反例形成的防线

RCLE real-data geometry R0 暴露了三项可复发问题:正式 claim 前没有用约 2 GB TGZ 的真实随机访问路径做性能预检;producer/validator 都是串行且无 pair 进度; 压缩归档被逐 pair 反复读取,形成远超源数据量的逻辑读取。

对应防线已经是项目当前规则:

  • .tgz 不得作为逐样本随机访问层;
  • 新版本先建立 hash/manifest 绑定缓存,再标定 1/8/12/16 worker;
  • 当前冻结 attempt 用独立监控报告阶段、资源推进、瓶颈和终态;
  • 下一 evidence version 必须具备真实 completed/total 与 ETA,不能再次以黑盒 方式进入正式运行。