benchm-ml
独立第三方视角的ML框架性能评测基准,覆盖10万到1000万行数据规模
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
独立第三方视角的ML框架性能评测基准,覆盖10万到1000万行数据规模
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
作者:Szilard Pafka,OE5T 创始人,机器学习工程师。自 2015 年起维护该项目,是数据科学社区公认的 ML 工具评测标杆。
当你需要选择机器学习算法实现时,是否曾被以下问题困扰:XGBoost 和 LightGBM 哪个更快?Spark MLlib 能否替代 scikit-learn 做大规模训练?随机森林在 1000 万行数据上会不会 OOM?这些问题在生产环境中至关重要,但官方 benchmark 往往只测小数据集,或只比速度不比精度。
benchm-ml 正是为回答这些问题而生。它是一个专注于可扩展性、速度和精度三维权衡的最小化基准测试框架,对二分类场景下最主流的开源 ML 实现(R 包、Python scikit-learn、H2O、XGBoost、LightGBM、Spark MLlib 等)进行系统对比。数据集规模从 1 万行覆盖到 1000 万行,是少数真正贴近生产数据量级的评测。

图1:AUC 对比图(来源:szilard/benchm-ml)——展示了不同算法在多个数据集规模下的准确率差异,可以清晰看到随机森林和 Boosting 系列在大多数场景下优于线性基线。
benchm-ml 的核心价值在于独立第三方视角。作者 Szilard Pafka 与任何 ML 框架无利益关联,评测结果相对客观。项目聚焦于商业应用中最常见的二分类问题——信用卡欺诈检测、用户流失预测、信用评分等,恰好对应这类问题的典型数据规模和数据结构。
项目涵盖的算法和工具覆盖了当时主流实现:
这种多工具横向对比的方式,让数据科学家能够在选型阶段就获得充分的信息,而不是靠直觉拍脑袋。
项目代码按算法类型分为四个主要模块,加上数据集目录:
szilard/benchm-ml/
├── 0-init/ # 环境初始化脚本(依赖安装)
├── 1-linear/ # 线性模型(R glm/glmnet/VW/H2O/Spark)
├── 2-rf/ # 随机森林(R randomForest/H2O/Spark/XGBoost)
├── 3-boosting/ # Boosting(GBM/XGBoost/LightGBM/H2O/Spark)
├── 4-DL/ # 深度学习(Keras/MXNet/H2O)
├── x1-data-higgs/ # Higgs 粒子数据集专项实验
├── z-other-tools/ # 其他工具(Vowpal Wabbit、Spark one-hot 等)
└── README.md # 总说明文档
以随机森林 Python 实现(2-rf/2.py)为例,代码流程清晰:读取训练/测试 CSV → One-Hot 编码分类特征 → 调用 RandomForestClassifier(n_estimators=500, n_jobs=-1) → AUC 评估。每行代码服务于 benchmark 目的,无冗余。
XGBoost 的 R 实现(3-boosting/6-xgboost.R)展示了稀疏矩阵输入方式:sparse.model.matrix() 构建特征矩阵,xgb.DMatrix() 创建 DMatrix 对象,xgb.train() 执行训练,参数配置(max_depth=16, eta=0.01, subsample=0.5)均通过命令行可调整。
benchm-ml 本身不需要"安装",它是一组脚本的集合,你需要根据要运行的 benchmark 单独安装对应依赖。初始化脚本 0-init/1-install.md 提供了 Ubuntu 14.04 环境下的完整依赖安装指南,包括 R 及其包管理器、Anaconda Python、H2O(Java)、Spark、MXNet(CUDA/CuDNN)等。
主要门槛:
对于没有机器学习背景的用户来说,初始配置阶段有一定挑战性。建议从单一算法(如 Python scikit-learn 随机森林)开始,逐步增加工具。
每个 benchmark 脚本的核心逻辑一致:读取 CSV 数据 → 特征工程(One-Hot 编码)→ 训练模型 → 预测并计算 AUC → 记录耗时。脚本末尾的 %time 魔法命令(Jupyter/IPython)或 system.time() 记录各阶段耗时。
作者提供了两张可视化图表:

图2:Boosting 算法各工具训练时间对比(来源:szilard/benchm-ml)——XGBoost 在 1000 万数据集上表现出色,LightGBM 紧随其后,Spark MLlib 在分布式场景下有明显优势,但单节点小数据集上启动开销较大。
关键发现(来自 README 原文):
benchm-ml 也有明显的局限性,作者在 README 末尾坦诚提及:
benchm-ml 是机器学习社区 Benchmark 的重要参考。作者基于此项目还创建了 ML Performance Timeline,追踪 ML 工具在速度和精度上的年度进步。
更重要的是,它推动了 ML 开源社区对透明评测标准的重视。2015 年后,各框架陆续推出了自己的官方 benchmark,但 benchmark 之间横向对比的可信度始终存疑——benchm-ml 提供的第三方独立视角因此更加珍贵。
作者也承认,当框架生态成熟后,持续维护一个"对比一切"的 benchmark 变得越来越困难(因为要适配的新工具太多),因此他转向了更聚焦的新项目。
适合人群:
不推荐:
benchm-ml 是一个典型的极客型项目——不是为了方便使用而设计,而是为了提供最真实、最透明的性能数据。它代表了一种难得的独立研究精神:不做广告,不收赞助,只做客观评测。如果你正在为 ML 框架选型头疼,benchm-ml 依然值得你花时间研读。