在 CPU 上更快地进行 XGBoost、LightGBM 和 CatBoost 推理
使用 Intel® oneAPI Data Analytics Library (oneDAL) 加速您的 XGBoost、LightGBM 和 CatBoost 推理工作负载
尽管生成式 AI 最近很受欢迎,但在决策树上使用梯度提升仍然是处理表格数据的最佳方法。 与许多其他技术(甚至神经网络)相比,它提供了更好的准确性。 许多人使用 XGBoost*、LightGBM 和 CatBoost 梯度提升来解决各种实际问题、进行研究并参加 Kaggle 比赛。 尽管这些框架开箱即用即可提供良好的性能,但预测速度仍然可以提高。 考虑到预测可能是机器学习工作流程中最重要的阶段,性能改进可能非常有益。
以下示例展示了如何转换模型以获得明显更快的预测,且不会损失质量(表 1)。
import daal4py as d4p
d4p_model = d4p.mb.convert_model(xgb_model)
d4p_prediction = d4p_model.predict(test_data)
oneDAL 的更新
自我们上一篇关于加速推理的文章(提高 XGBoost 和 LightGBM 推理的性能)以来已经过去几年了,因此我们认为现在是时候更新自那时以来的变化和改进了
- 简化的 API 以及与梯度提升框架的对齐
- 支持 CatBoost 模型
- 支持缺失值
- 性能改进
简化的 API 以及与梯度提升框架的对齐
现在您只有 convert_model()
和 predict()
方法。您可以轻松地将其集成到现有代码中,只需进行最小的更改
您还可以将训练好的模型转换为 daal4py
XGBoost
d4p_model = d4p.mb.convert_model(xgb_model)
LightGBM
d4p_model = d4p.mb.convert_model(lgb_model)
CatBoost
d4p_model = d4p.mb.convert_model(cb_model)
也支持 scikit-learn* 风格的估计器
from daal4py.sklearn.ensemble import GBTDAALRegressor
reg = xgb.XGBRegressor()
reg.fit(X, y)
d4p_predt = GBTDAALRegressor.convert_model(reg).predict(X)
更新后的 API 允许您在一个地方使用 XGBoost、LightGBM 和 CatBoost 模型。 您还可以将相同的 predict()
方法用于分类和预测,就像您使用主要框架一样。 您可以在文档中了解更多信息。
支持 CatBoost 模型
在 daal4py 中添加 CatBoost 模型支持显着增强了该库在处理梯度提升任务时的多功能性和效率。 CatBoost 是 categorical boosting 的简称,以其卓越的速度和性能而闻名,借助 daal4py 加速,您可以更快地运行。 (注意:推理不支持分类特征。) 通过此添加,daal4py 涵盖了三种最流行的梯度提升框架。
支持缺失值
缺失值在真实世界的数据集中很常见。 发生这种情况的原因有很多,例如人为错误、数据收集问题,甚至观测机制的自然限制。 忽略或不正确地处理缺失值可能会导致有偏差的分析,最终会降低机器学习模型的性能。
daal4py 2023.2 版本现在引入了缺失值支持。 您可以使用在包含缺失值的数据上训练的模型,并在推理中使用包含缺失值的数据。 这可以产生更准确和稳健的预测,同时简化数据科学家和工程师的数据准备过程。
性能改进
自我们上次性能比较以来,oneDAL 中添加了许多其他优化(表 2)。
所有测试均使用在 AWS* EC2 c6i.12xlarge 实例(包含具有 24 个内核的 Intel® Xeon® Platinum 8375C)上运行的 scikit-learn_bench 进行,软件如下:Python* 3.11、XGBoost 1.7.4、LightGBM 3.3.5、CatBoost 1.2 和 daal4py 2023.2.1。
欢迎您贡献新的用例和其他改进。
如何获取 daal4py
daal4py 是 oneDAL 库的 Python 接口,可在 PyPi、conda-forge 和 conda 主通道上获得。 这是一个完全开源的项目,我们欢迎通过 GitHub 存储库提出任何问题、请求或贡献。 要从 PyPi 安装该库,只需运行
pip install daal4py
或 conda-forge 变体
conda install -c conda-forge daal4py --override-channels
这些结果表明,通过对代码进行简单的更改,您可以在当前的 Intel® 硬件上更快地完成梯度提升数据分析任务。 这些性能改进可以降低计算成本,并帮助您更快地获得结果,而不会牺牲质量。