65.9K
CodeProject 正在变化。 阅读更多。
Home

在 CPU 上更快地进行 XGBoost、LightGBM 和 CatBoost 推理

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2023 年 12 月 18 日

CPOL

3分钟阅读

viewsIcon

3929

使用 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) 

表 1. 比较 daal4py 推理性能与原始 XGBoost*、LightGBM 和 CatBoost。 颜色编码表示每列中的最佳和最差情况,值越高表示性能越好。

oneDAL 的更新

自我们上一篇关于加速推理的文章(提高 XGBoost 和 LightGBM 推理的性能)以来已经过去几年了,因此我们认为现在是时候更新自那时以来的变化和改进了

  1. 简化的 API 以及与梯度提升框架的对齐
  2. 支持 CatBoost 模型
  3. 支持缺失值
  4. 性能改进

简化的 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)。

表 2. 版本 2023.2 与 2023.1 和原始 XGBoost* 的性能改进

所有测试均使用在 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® 硬件上更快地完成梯度提升数据分析任务。 这些性能改进可以降低计算成本,并帮助您更快地获得结果,而不会牺牲质量。

© . All rights reserved.