性能基准¶
性能结果必须同时记录代码版本、依赖、硬件、数据规模、参数和测量方法。此前缺少完整运行环境的
结果不再作为 0.0.24 正式性能结论展示。
复现命令¶
python benchmarks/benchmark_binning_speed.py native \
--rows 200000 --features 3000 --repeats 1
python benchmarks/benchmark_binning_speed.py optimal \
--rows 50000 --features 1000 --repeats 3
python benchmarks/benchmark_rule_mining.py \
--engine mars --rows 100000 --features 1000 --max-candidates 5000 \
--output-json benchmarks/results/mars-rule.json
python benchmarks/benchmark_rule_mining.py \
--engine deimos --rows 100000 --features 1000 --max-candidates 5000 \
--output-json benchmarks/results/deimos-rule.json \
--baseline-root ../deimos-rule
python benchmarks/benchmark_rule_mining.py \
--engine gate \
--mars-result benchmarks/results/mars-rule.json \
--deimos-result benchmarks/results/deimos-rule.json
python benchmarks/benchmark_rule_stages.py \
--stage all --rows 10000 --rules 100 --repeats 3 \
--output-json benchmarks/results/rule-stages-current.json
python benchmarks/benchmark_rule_stages.py \
--stage all --rows 10000 --rules 100 --repeats 3 \
--baseline-json benchmarks/results/rule-stages-before.json
Native 对比需要额外安装 toad;Optimal 对比使用基础依赖中的 optbinning。
规则发布门禁要求相同机器、环境和数据上,对比 deimos-rule
e6714c5e795054e44f0c58ad7097668b4117b4a2 的组合生成与评估:MARS 总耗时不得退化超过 15%,
进程峰值 RSS 不得退化超过 20%。普通 CI 只运行 2k×20 smoke;100k×1000 对比在发布前手工运行。
子阶段 benchmark 分别覆盖 evaluator、压缩位图 IoU、命中矩阵 analysis 和 cascade;同机预热后
隔离运行 3 次取中位数,发布门禁要求 evaluator、IoU、analysis 相对改造前各至少提速 30%,
峰值 RSS 不得退化超过 10%。rule-stages-before.json 必须来自相同 commit 依赖环境和工作负载。
由于该来源提交调用的是旧版 MarsStatsSelector(target=..., features=...) 构造签名,benchmark
仅在 harness 中把这一调用适配为当前 fit(..., target=..., features=...),预筛参数和排序口径不变。
0.0.28 规则门禁结果¶
2026-08-12 在同一 Windows 机器和 mars Conda 环境分别启动隔离进程测量。Mars 与 deimos
均使用已验证的 √预算单规则池和二阶 AND/OR 候选口径;完整精度切点与稳定排序差异使两者最终
候选数相差 30 条(0.7%)。
| 项目 | Mars 0.0.28 | deimos e6714c5 |
比值 / 门槛 |
|---|---|---|---|
| 组合生成+评估耗时 | 12.094 s | 10.888 s | 1.1108 / ≤ 1.15 |
| 进程峰值 RSS | 2806.6 MB | 2756.8 MB | 1.0181 / ≤ 1.20 |
| 候选规则数 | 4240 | 4270 | 仅作工作量校验 |
同一环境的 10,000×100 分阶段 workload 预热后独立运行 3 次取中位数;原始结果保存在
benchmarks/results/mars_rule_stages_0_0_28.json:
| 子阶段 | 中位耗时 | 峰值 RSS | 校验值 |
|---|---|---|---|
| evaluator | 0.0282 s | 266.8 MB | 1800 |
| IoU | 0.0068 s | 267.2 MB | 5 |
| analysis | 0.7921 s | 323.4 MB | 4950 |
| cascade | 0.0222 s | 302.6 MB | 1 |
客户指标由逐规则对 Python 集合改为一次性因子化后,在同一 workload 上 analysis 从 5.3525 s 降至 0.7921 s(85.2%),峰值 RSS 从 312.9 MB 增至 323.4 MB(3.4%)。
环境:Python 3.10.19、Polars 1.37.1、NumPy 2.2.6、scikit-learn 1.7.2、Windows
10.0.26200、Intel Core i7-14650HX(24 逻辑核)、63.7 GiB 内存。工作负载为 100,000 行、
1,000 个 float32 特征、n_bins=10、max_candidates=5000、batch_size=100、随机种子 42。
测量口径¶
- 分箱计时范围:数据生成、fit、WOE transform 和本轮清理。
- 规则计时范围:预先构造同一宽表,计入特征预筛、候选生成和长表评估,不计数据生成。
- 内存口径:主进程及子进程 RSS 的采样峰值和结束增量。
- MARS 与竞品分别构造对应 DataFrame,结果包含各自数据构造成本。
- Python、Polars、竞品版本和线程设置都会影响结果,不能跨环境直接比较绝对数值。
0.0.24 结果发布清单¶
正式填写结果表前必须记录:
| 项目 | 必填内容 |
|---|---|
| MARS | 0.0.24 和 commit SHA |
| Runtime | Python、Polars、NumPy、竞品版本 |
| Hardware | CPU 型号、逻辑核心数、内存容量 |
| System | 操作系统和架构 |
| Workload | 行数、特征数、分箱数、重复次数、随机种子 |
| Result | 每轮耗时、平均耗时、峰值 RSS、校验值 |
| Date | 基准执行日期 |
在完整记录生成前,README 和首页不使用“快数倍”“更省内存”等无条件性能宣传。