0001-Sprint5规划会议纪要 » 历史记录 » 版本 1
Huarui Lin, 2026-04-25 22:36
| 1 | 1 | Huarui Lin | # Sprint 5 规划会议纪要 |
|---|---|---|---|
| 2 | |||
| 3 | **会议主题**:Sprint 5(第 4 阶段:S5 - 标准化与 Spearman 降维)架构规划与防线确立 |
||
| 4 | **会议时间**:202X年X月X日 |
||
| 5 | **参会角色**:架构师(主讲)、研发负责人(决策) |
||
| 6 | **会议基调**:锁定“空间换时间”全局原则与“内存防爆”底线,确立 S5 阶段的绝对物理拓扑。 |
||
| 7 | |||
| 8 | --- |
||
| 9 | ### 一、 会议核心决议汇总 |
||
| 10 | |||
| 11 | **1. 架构基线修正(DRY 原则向内存红线让步)** |
||
| 12 | * **决议**:正式批准 S5 训练阶段(面对 3000 万行数据)豁免复用 `core.standardization_math`(纯 NumPy 算子),强制采用 Polars 表达式原地 Apply 拓扑,以守住 50GB cgroup 内存红线。 |
||
| 13 | * **闭环动作**:作为豁免代价,必须在 Sprint 5 交付前修改 `2-dry_module_list.md` 中该模块的“被依赖方”说明,明确标注 S5 豁免复用的物理原因,确立 S6 推理作为唯一复用事实。 |
||
| 14 | **2. 数据流加载边界与配置契约** |
||
| 15 | * **决议**:废除任何硬编码年份逻辑。S5 动态时间窗口通过在 `config.yaml` 中新增 `s5.data_start_year` 与 `s5.data_end_year` 收敛,由 `core.config_loader.py` 启动时强校验。 |
||
| 16 | * **决议**:S5.4 Spearman 阶段的按年流式加载,强制复用 `core.stream_engine` 模块实现按年流式加载与内存释放。 |
||
| 17 | **3. S5.1 截面聚合与双形态参数拓扑** |
||
| 18 | * **决议**:推理长表必须基于 S3 全量数据的最小/最大日期极值,在 S5.1 阶段动态生成绝对自然日历表并落盘为 `calendar_dim.parquet`,严禁硬编码。 |
||
| 19 | * **决议**:针对底层物理排序键冲突(默认 `["net_value_date", "fund_id"]` 与推理长表强制要求的 `["feature_name", "date"]` 冲突),同意升级 `core.physical_storage_contract`。在其 `sink_parquet_strict()` 方法签名中新增 `override_sort_keys: Optional[List[str]] = None` 参数,符合开闭原则。 |
||
| 20 | **4. `core.stream_engine` 内存断言演进路线** |
||
| 21 | * **决议**:废除硬编码 3GB 断言的死锁设计。采用“配置化 + 硬天花板”演进方案:阈值抽离至 `config.yaml`(如 `engine.stream_max_memory_peak_gb`),但在引擎内部强制设定 `final_assert_limit = min(config_value, 15.0)`。既释放大机器性能红利,又锁死物理毁灭的绝对底线。 |
||
| 22 | **5. S5.4 Spearman 环境自适应开关** |
||
| 23 | * **决议**:在 `config.yaml` 中落地 `spearman.load_mode` 枚举强校验(仅允许 `yearly_chunked` 或 `full_load`),生产环境默认值强制锁定为 `yearly_chunked`。 |
||
| 24 | **6. 纯业务防线确认(无分歧,全员对齐)** |
||
| 25 | * 确认 S5.2 标准化 Apply 严禁将 3000 万行宽表 Unpivot(死刑级禁止项),必须在实体表状态下执行等值 Join。 |
||
| 26 | * 确认 S5.3 训练 Join 必须强制锁死三键 `["fund_id", "net_value_date", "segment_id"]`,且毒样本截断基于 `is_feature_complete` 哨兵列在 Join 后强制覆写 `label=0`。 |
||
| 27 | **7. 物理产出与持久化契约** |
||
| 28 | * 确认降维后的最终特征子集采用 JSON 格式物理落盘为 `final_feature_list.json`。 |
||
| 29 | |||
| 30 | --- |
||
| 31 | ### 二、 会议待办事项清单 |
||
| 32 | |||
| 33 | | 序号 | 待办事项 | 责任方 | 交付物/验证标准 | 关联决议 | |
||
| 34 | | :--- | :--- | :--- | :--- | :--- | |
||
| 35 | | 1 | 架构文档降级更新 | 架构师 | 更新后的 `2-dry_module_list.md` | 决议 1 | |
||
| 36 | | 2 | 配置中心扩展 | 研发 | `config.yaml` 新增 S5 年份配置、流式引擎峰值配置及 Spearman 模式配置;`core/config_loader.py` 增加 Pydantic 校验 | 决议 2, 4, 5 | |
||
| 37 | | 3 | 核心存储模块升级 | 研发 | 升级后的 `core.physical_storage_contract.py` 及对应单测覆盖 | 决议 3 | |
||
| 38 | | 4 | 核心流式引擎演进 | 研发 | 演进后的 `core.stream_engine.py`(包含 15GB 硬天花板拦截逻辑)及对应单测覆盖 | 决议 4 | |
||
| 39 | | 5 | S5.1 自然日历表生成逻辑 | 研发 | 产出 `calendar_dim.parquet` 的代码逻辑及 Schema 校验单测 | 决议 3 | |
||
| 40 | | 6 | S5.2 IEEE 754 拦截防线实施 | 研发 | 封杀 `Inf` 击穿 LightGBM 的 Polars 表达式逻辑及边界测试 | 决议 6 | |
||
| 41 | | 7 | S5.4 Spearman 数学防线实施 | 研发 | 按“按年分块算秩 -> 显式锁定平均秩 -> 强制中心化 -> Pearson 展开项累加 -> 对称化截断”链路实施 | 决议 5 | |
||
| 42 | | 8 | 最终产物交付与 Schema 校验 | 研发/QA | 产出 `standardization_params_wide.parquet`、`standardization_params.parquet`、`final_feature_list.json`,并通过 CI Schema 对称差红线 | 决议 7 | |
||
| 43 | |||
| 44 | --- |
||
| 45 | **纪要结语**:本次规划会议成功拆解了 S5 阶段在千万级面板下的所有物理内存陷阱与底层冲突。所有核心防线均实现了“单一真实来源(DRY)”或“空间换时间”的企业级兜底,未遗留任何悬而未决的架构缝隙。研发团队可基于本纪要直接开展排期与编码工作。 |