跳转至

模块设计:模型格式

1. 目标

提供稳定、可验证、与训练会话解耦的模型格式,使保存前后预测一致,并允许 CPU 与 MPS 推理共享同一模型。

2. 文件结构

0.2.0 使用明确版本的二进制容器或 JSON 元数据 + 二进制数组,必须包含:

  • magic;
  • major/minor 格式版本;
  • endian 与标量类型;
  • objective、base score、learning rate 语义;
  • 特征数量、分箱边界;
  • 树数量和每棵树节点区间;
  • 扁平节点数组与叶值;
  • 各段长度、offset 和完整性校验。

模型不得包含原始训练数据、标签、绝对路径、设备唯一标识或缓存内容。

3. 兼容策略

  • 相同 major 版本允许有定义的向前兼容字段;
  • 未知 major 默认拒绝;
  • loader 不猜测缺失字段;
  • 运行时内部布局变化通过转换层处理,不能让文件依赖 GPU workspace 布局;
  • 发布后测试保留历史模型 fixture。

4. 安全加载

解析前检查总长度;所有计数、offset 和乘法检查溢出;节点 child index、特征 index 和边界区间逐项验证。加载失败不修改已有模型状态。

5. 原子保存

写入同目录临时文件,完成 flush、校验后原子替换目标。失败时保留原文件并清理项目临时文件。不得跨文件系统假设 rename 原子性。

6. 验收

  • 保存/加载预测一致;
  • 截断、随机字节、超大长度和非法索引被拒绝;
  • 旧版本兼容 fixture 通过;
  • 文件不泄露训练数据;
  • CPU 与 MPS 读取同一模型。