排查前置准备:模型元数据记录要求、特征存储规范、线上日志采集标准、离线与在线特征一致性校验
批次偏移排查的效率和准确性,高度依赖前置基础设施的完备程度。若模型元数据缺失、特征存储混乱、日志采集不全或离线在线特征不一致,排查将陷入“无源可溯”的困境。本节从四个核心维度阐述排查前必须完成的准备工作。
2.1 模型元数据记录要求
每次模型上线或更新,必须记录完整的元数据,形成可追溯的“模型身份证”。元数据是定位批次偏移发生时“哪个模型版本、在什么时间窗口、使用了哪些特征”的关键锚点。
| 元数据字段 | 说明 | 示例值 |
|---|---|---|
| 模型版本号 | 唯一标识,遵循语义化版本 | v2.3.1-20250315 |
| 上线时间戳 | 精确到秒的部署时间 | 2025-03-15T10:30:00+08:00 |
| 训练数据时间窗口 | 训练集覆盖的日期范围 | [2025-01-01, 2025-02-28] |
| 特征列表(含版本) | 模型依赖的所有特征及其版本 | user_click_rate@v3, item_price@v2 |
| 模型文件哈希 | 校验模型文件完整性 | sha256: a3f8b2c1... |
| 部署环境标识 | 生产/预发/金丝雀 | production-canary-5% |
| 负责人/团队 | 可联系的责任人 | ml-platform@company.com |
最佳实践: 将元数据写入模型注册表(如 MLflow Model Registry)的同时,同步到在线配置中心(如 Apollo/Nacos),确保推理服务运行时能实时获取当前模型的元数据快照。
2.2 特征存储规范
特征存储是离线训练与在线推理的桥梁。不规范的特征存储会导致“离线特征A”与“在线特征A”在语义或计算逻辑上产生偏差,直接引发批次偏移。
- 特征命名规范: 采用
{领域}_{实体}_{指标}_{聚合方式}_{时间窗口}格式,例如user_click_rate_avg_7d。 - 特征版本管理: 每个特征必须携带版本号,特征变更(如计算逻辑调整)必须升版,旧版本保留至少30天。
- 特征存储介质: 离线特征存储在 Hive/Iceberg 数仓,在线特征存储在 Redis/Tair 等 KV 存储,两者通过统一的特征视图(Feature View)映射。
- 特征回溯能力: 在线特征存储需支持按时间戳回溯,即能获取“某个历史时间点的特征值”,用于回放验证。
关键约束: 禁止在线推理服务直接读取离线数仓表;禁止离线训练脚本直接调用在线 Redis。所有特征交互必须通过特征服务平台(Feature Store)进行。
2.3 线上日志采集标准
日志是排查批次偏移的“黑匣子”。若日志缺失关键字段,排查将无从下手。日志采集必须遵循“全量、结构化、可回溯”原则。
| 日志类型 | 必采字段 | 采集频率 |
|---|---|---|
| 推理请求日志 | request_id, 模型版本, 特征名称+特征值, 模型分数, 时间戳 | 全量 |
| 特征获取日志 | 特征名称, 特征版本, 特征来源(在线/离线), 获取耗时, 是否命中缓存 | 全量 |
| 模型预测日志 | 模型版本, 输入特征哈希, 输出分数, 模型内部树权重(可选) | 采样(1%)或全量 |
| 异常日志 | 异常类型, 特征名, 异常值, 堆栈信息 | 全量 |
常见陷阱: 只采集模型分数而不采集特征值。当批次偏移发生时,无法判断是特征分布变化还是模型本身问题。务必确保推理日志中包含每个特征的实时取值。
2.4 离线与在线特征一致性校验
这是排查批次偏移的“照妖镜”。通过对比同一时间窗口内、同一批样本的离线特征值与在线特征值,快速定位特征计算逻辑或存储的偏差。
校验流程通常包含以下步骤:
- 选取校验样本: 从线上日志中随机抽取 N 条(建议 N ≥ 10000)请求记录,提取 request_id 和请求时间戳。
- 获取离线特征: 根据 request_id 关联离线数仓,获取对应时间点的离线特征值。
- 获取在线特征: 从在线特征存储中,按相同时间戳回溯获取在线特征值。
- 逐特征对比: 计算每个特征的差异率(如 MAE、最大绝对误差、不一致样本占比)。
- 判定阈值: 若不一致样本占比 > 1% 或 MAE > 0.05,则触发告警。
自动化建议: 将一致性校验封装为每日定时任务(如 Airflow DAG),生成校验报告并自动推送到企业微信/钉钉群。一旦发现离线在线特征偏差超过阈值,立即阻断当天模型上线流程。
2.5 前置准备清单总览
以下清单可作为团队落地排查前置准备的检查项:
| 维度 | 检查项 | 验收标准 |
|---|---|---|
| 模型元数据 | 是否记录每次上线的特征列表及版本 | 可回溯任意历史版本的完整特征依赖 |
| 特征存储 | 是否实现特征版本管理与回溯 | 在线存储支持按时间戳查询历史特征值 |
| 日志采集 | 推理日志是否包含每个特征的实时值 | 日志表特征字段不为空,且与特征列表一致 |
| 一致性校验 | 是否部署离线在线特征对比流水线 | 每日自动运行,偏差告警延迟 < 30 分钟 |