183

多 GPU 加速学习,这是一份崭新的 XGBoost 库

 5 years ago
source link: https://www.jiqizhixin.com/articles/070802?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

随着数据规模越来越大,很多经典的机器学习算法也越来越需要 GPU 的并行计算能力。以前 XGBoost 也能使用 GPU 与 CUDA,但效率并不是很高。而最近怀卡托大学和英伟达提出了一种新型决策树加速方法,它能支持多 GPU 高效加速 XGBoost。目前这一改进与实现已经加入到了标准 XGBoost 库中,我们可以直接在 GPU 环境下进行编译与使用。

梯度提升是一种可以获得当前最佳性能的监督学习方法,它在分类、回归和排序方面有很好的表现。XGBoost是一般化梯度提升算法的实现,它在多核和分布式机器上有着高度优化的实现,且能处理稀疏数据。怀卡托大学和英伟达在这一篇论文中描述了标准XGBoost库的扩展,它支持多 GPU 的执行,并能显著地减少大规模任务的运行时间。本论文提出的扩展是原版 GPU 加速算法的新进展,它展现出拥有更快速和更高内存效率的策树算法。该算法基于特征分位数(feature quantiles)和梯度提升树其它部分的并行化算法。作者们在 GPU 上实现决策树构建、分位数生成、预测和梯度计算算法,并端到端地加速梯度提升流程。这一过程使得XGBoost库可以利用显著提升的内存带宽和大规模并行化 GPU 系统集群。

作者实现的 GPU 加速扩展现在已经可以在标准XGBoostAPI 中进行获取,我们只需要编译为 GPU 版本就行了。该 GPU 加速版本目前可用于 C++、Python、R 和 Java,并支持所有XGBoost的学习任务,如回归、分类、多类别分类和排序等。这一实现目前支持 Windows 系统与 Linux 系统,且与原版XGBoost算法一样支持稀疏输入数据。

XGBoost项目地址:https://github.com/dmlc/xgboost

论文:XGBoost: Scalable GPU Accelerated Learning 

Ir6nYfv.png!web

论文地址:https://arxiv.org/abs/1806.11248

我们于本论文中描述了在XGBoost库中实现的多 GPU梯度提升算法。我们的算法允许使用多 GPU 系统实现快速、可扩展的训练,并且支持XGBoost的所有特征。我们使用数据压缩技术以最大限度降低 GPU 显存的占用,但仍然允许高效地实现。根据算法性能,我们可以在公有云计算实例上三分钟内处理 1.15 个训练样本。该算法使用端到端的 GPU 并行算法实现,其中预测、梯度计算、特征量化、决策树构建和评估阶段都在本地进行。

2. 描述

监督梯度提升将标注的训练数据集作为输入,并反复定义一系列树来渐进改善目标函数的准确率。图一在更抽象层面上展示了这一过程,我们在一个或者多个 GPU 上实现了这些重要的运算。

ZrymAv7.png!web 图 1:梯度提升流程

3. 评估

我们把最新的实现与XGBoost的两个主要对手:LightGBM 与 CatBoost 做了对比,它们都是用多核 CPU 和 GPU 训练实现。评估是在带有 8 块 Tesla V100 GPU 和 64 个 CPU 计算核心的云上完成的。

复现参数与基准请查看:https://github.com/RAMitchell/GBM-Benchmarks

26rEVfB.png!web 图 2:XGBoost在 Airline 数据集上的运行时间:1-8 块 V100 GPU。

y6neM3m.png!web 表 1 :数据集

MRjiumz.png!web 表 2:评估结果

在 6 种数据集中,我们的算法(xgb-gpu-hist)在其中 3 种数据上是最快的,在两种数据集上是最准确的。例如在最大的数据集(1.15 亿条数据)上,我们的算法要比其它算法快了 3 倍。在任意数据集上,它的运行时间都不会超过 2 分钟。图 2 展示了在 airline 数据集上加上额外 GPU 的运行时间。通过在 8 块 GPU 上作压缩与分布式训练,每块 GPU 只需要 600MB 来存储整个矩阵。

相关数据

梯度提升 技术

Gradient boosting

梯度提升是用于回归和分类问题的机器学习技术,其以弱预测模型(通常为决策树)的集合的形式产生预测模型。 它像其他增强方法一样以阶段式方式构建模型,并且通过允许优化任意可微损失函数来推广它们。

来源: Wikipedia

目标函数 技术

Objective function

目标函数f(x)就是用设计变量来表示的所追求的目标形式,所以目标函数就是设计变量的函数,是一个标量。从工程意义讲,目标函数是系统的性能标准,比如,一个结构的最轻重量、最低造价、最合理形式;一件产品的最短生产时间、最小能量消耗;一个实验的最佳配方等等,建立目标函数的过程就是寻找设计变量与目标的关系的过程,目标函数和设计变量的关系可用曲线、曲面或超曲面表示。

来源: 百度百科

参数 技术

parameter

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

来源: 维基百科

监督学习 技术

Supervised learning

监督式学习(Supervised learning),是机器学习中的一个方法,可以由标记好的训练集中学到或建立一个模式(函数 / learning model),并依此模式推测新的实例。训练集是由一系列的训练范例组成,每个训练范例则由输入对象(通常是向量)和预期输出所组成。函数的输出可以是一个连续的值(称为回归分析),或是预测一个分类标签(称作分类)。

来源: Wikipedia

XGBoost 技术

XGBoost

XGBoost是一个开源软件库,为C ++,Java,Python,R,和Julia提供了渐变增强框架。 它适用于Linux,Windows,MacOS。从项目描述来看,它旨在提供一个“可扩展,便携式和分布式的梯度提升(GBM,GBRT,GBDT)库”。 除了在一台机器上运行,它还支持分布式处理框架Apache Hadoop,Apache Spark和Apache Flink。 由于它是许多机器学习大赛中获胜团队的首选算法,因此它已经赢得了很多人的关注。

来源: Wikipedia

准确率 技术

Accuracy

分类模型的正确预测所占的比例。在多类别分类中,准确率的定义为:正确的预测数/样本总数。 在二元分类中,准确率的定义为:(真正例数+真负例数)/样本总数

来源: Google ML Glossary

vQzyQzA.png!web
机器之心

机器之心是国内领先的前沿科技媒体和产业服务平台,关注人工智能、机器人和神经认知科学,坚持为从业者提供高质量内容和多项产业服务。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK