作者:Masoud Koleini 2022年10月21日
介绍
XGBoost(eXtreme Gradient Boosting)是一个在Gradient Boosting Decision Tree(GBDT)框架下的开源机器学习库(https://github.com/dmlc/xgboost)。XGBoost用于使用机器学习解决数据科学中的回归和分类问题。任务可以分布在一组机器上,以便更快地进行训练和推理。例如,XGBoost4J-Spark(https://xgboost.readthedocs.io/en/latest/jvm/xgboost4j_spark_tutorial.html)是一个将XGBoost与Apache Spark集成的项目。
LightGBM(Light Gradient Boosting Machine)是微软开发的另一款基于GDBT的开源工具(https://www.microsoft.com/en-us/research/project/lightgbm/),与XGBoost相比,它以更高效的训练而闻名。与XGBoost类似,LightGBM培训可以分布在一个节点集群上,并通过减少节点之间的通信来降低任务分配的成本。
这个博客比较了在几个AWS实例上运行的XGBoost和LightGBM的性能。这些实例包括类型C5(Skylake SP或Cascade Lake)、C6i(Intel Ice Lake)、C6g(AWS Graviton2)和C7g(AWS Graviton3),大小为12xlarge。这些实例都配备了48个vCPU和96GB内存。
AWS Graviton3:第三代Graviton处理器系列
AWS Graviton2处理器是AWS使用Arm Neoverse内核设计的第二代处理器,与Amazon EC2中的x86实例相比,为不同的工作负载提供了广泛的性价比改进。AWS Gravaton3是Graviton处理器系列的第三代,与第二代相比,计算性能提高了25%。特定计算的性能可以提高2到3倍,例如浮点运算和密码运算,以及支持bfloat16的基于CPU的机器学习应用程序。与支持DDR4的实例相比,Graviton3对DDR5的支持将内存带宽提高了50%。
基准环境
基准测试工具
XGBoost集成在一个流行的Python机器库scikit-learn中。我们使用scikit-learn_bench对XGBoost进行基准测试,并对LightGBM进行少量修改。基准测试工具和参数在配置文件中传递。示例配置文件位于存储库的“config”目录中。基准测试使用Python 3.10.4和以下版本的Python库:
- XGBoost: 1.6.2
- LightGBM: 3.3.2
- scikit-learn: 1.1.2
对于XGBoost,我们为以下数据集运行基准测试:
- Airline (binary classification)(https://www.stat.purdue.edu/~sguha/rhipe/doc/html/airline.html)
- Higgs (binary classification) (https://archive.ics.uci.edu/ml/datasets/HIGGS)
- MSRank (multi-class classification)(https://www.microsoft.com/en-us/research/project/mslr/)
对于LightGBM,我们呈现Airline和Higgs数据集的结果。
基准测试使用的参数如下:
XGBoost的“hist”树方法类似于LightGBM的工作方式,可以提高训练速度。估计器(estimators)的数量设置为100,这是XGBoost和LightGBM库的默认值。线程数设置为实例上可用的vCPU数,对于12xlarge的实例为48。
性能比较
XGBoost训练性能
下图显示了三个数据集和不同实例类型的训练时间。结果表明,Graviton3实例的训练时间比C5提高了52%,比C6i提高了36%,比Graviton2提高了37%。
图1.XGBoost训练时间比较
下表显示了Airline、Higgs和MSRank数据集的XGBoost训练时间。
XGBoost推理性能
图2显示了三个数据集和不同实例类型的推理时间。结果表明,Graviton3实例的推理时间比C5提高了45%,比C6i提高了26%,比Graviton2提高了32%。
图2.XGBoost推理时间比较
下表显示了三个数据集的XGBoost推理时间。
LightGBM训练性能
图3显示了Airline和Higgs数据集以及不同实例类型的训练时间。结果表明,Graviton3实例的训练时间比C5提高了53%,比C6i提高了42%,比Graviton2提高了41%。
图3.LightGBM训练时间比较
下表显示了Airline和Higgs数据集的LighttGBM训练时间。
LightGBM推理性能
图4显示了两个数据集和不同实例类型的训练时间。结果表明,Graviton3实例比C5提高了39%,比C6i提高了31%,比Graviton2提高了31%。
图4.LightGBM推理时间比较
图4中图表的数据来自下表,显示了LightGBM以及Airline和Higgs数据集的推理时间:
基准测试考虑因素
默认情况下,scikit_learn_bench 使用了Scikit-learn补丁,使用Intel(R)Extension for scikit learn(https://github.com/intel/scikit-learn-intelex)在支持SSE2、AVX、AVX2和AVX512的Intel处理器上优化ML性能。然而,在本博客发布时,该补丁不支持梯度增强算法。
Intel提供oneAPI数据分析库(oneDAL)(https://github.com/oneapi-src/oneDAL)来加速Intel机器上的ML算法。然而,它需要从标准XGBoost和LightGBM模型到OneDAL的代码更改和转换。在本测试中,我们没有使用OneDAL转换和测试这些模型。
结论
XGBoost基准测试表明,在选择用于性能分析的三个数据集(Airline、Higgs和MSRank)中,Graviton3实例的性能优于Graviton2和x86实例。在某些情况下,Graviton3比x86高出50%。对于LightGBM以及Airline和Higgs这两个数据集,在训练和推理操作中,表现出了类似的性能增强。
访问AWS Graviton页面,了解关于采用基于Arm的处理器的客户故事。如果您对Arm Neoverse平台上运行的软件工作负载有任何疑问,请随时联系我们:sw-ecosystem@arm.com.