XGBoost亚马逊算法 SageMaker - Amazon SageMaker

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

XGBoost亚马逊算法 SageMaker

XGBoost(Gr eXtreme adient Boosting)是梯度提升树算法的一种流行且高效的开源实现。梯度提升是一种监督学习算法,它试图通过组合来自一组更简单模型的多个估计值来准确预测目标变量。该XGBoost算法在机器学习竞赛中表现良好,原因如下:

  • 它可以很好地处理各种数据类型、关系和分布。

  • 您可以微调的超参数种类。

XGBoost可用于回归、分类(二进制和多类)和排名问题。

您可以将新版本的XGBoost算法用作以下任一用途:

  • 亚马逊的 SageMaker 内置算法。

  • 在本地环境中运行训练脚本的框架。

与原始版本相比,此实现具有更小的内存占用、更好的日志记录、改进的超参数验证和更大的指标集。它提供了XGBoostestimator在托管XGBoost环境中运行训练脚本的。的当前版本基于原始XGBoost版本 1.0、1.2、1.3、1.5 和 1.7。 SageMaker XGBoost

有关 Amazon SageMaker XGBoost 算法的更多信息,请参阅以下博客文章:

支持的版本

  • 框架(开源)模式:1.2-1、1.2-2、1.3-1、1.5-1、1.7-1

  • 算法模式:1.2-1、1.2-2、1.3-1、1.5-1、1.7-1

警告

由于需要计算容量,的 1.7-1 版本与 P2 GPU 实例系列中用于训练或推理 SageMaker XGBoost的实例不兼容。

重要

检索 SageMaker XGBoost图像时URI,请勿使用:latest:1作为图像URI标签。您必须指定其中一个支持的版本才能选择包含要使用的本机XGBoost软件包版本的 SageMaker托管XGBoost容器。要查找迁移到 SageMakerXGBoost容器中的软件包版本,请参阅 Docker 注册表路径和示例代码。然后选择你的 AWS 区域,然后导航到 XGBoost(算法)部分。

警告

XGBoost0.90 版本已被弃用。已停止支持 XGBoost 0.90 版的安全更新或错误修复。我们强烈建议您将该XGBoost版本升级到较新的版本之一。

注意

XGBoost不支持 v1.1。 SageMakerXGBoost当测试输入的特征少于输入中的训练数据时,1.1 运行预测的能力就会中LIBSVM断。此功能已在 XGBoost v1.2 中恢复。考虑使用 SageMaker XGBoost 1.2-2 或更高版本。

注意

你可以使用 XGBoost v1.0-1,但官方不支持它。

EC2XGBoost算法的实例推荐

SageMaker XGBoost支持CPU、GPU训练和推理。实例建议取决于训练和推理需求以及XGBoost算法版本。有关更多信息,请选择以下选项之一:

训练

该 SageMaker XGBoost算法支持CPU和GPU训练。

CPU训练

SageMaker XGBoost仅使用 1.0-1 或更早版本的列车。CPUs它是一种内存限制型(而不是计算限制型)算法。因此,通用计算实例(例如 M5)是比计算优化的实例(例如 C4)更适合的选择。此外,我们建议您在选定的实例中有足够的总内存来保存训练数据。它支持使用磁盘空间来处理不适合主存储器的数据。这是 libsvm 输入模式中提供的 out-of-core功能的结果。即便如此,将缓存文件写入磁盘也会减慢算法处理时间。

GPU训练

SageMaker XGBoost1.2-2 或更高版本支持GPU训练。尽管每个实例的成本更高,但GPUs训练速度更快,从而更具成本效益。

SageMaker XGBoost版本 1.2-2 或更高版本支持 P2、P3、G4dn 和 G5 实例系列。GPU

SageMaker XGBoost版本 1.7-1 或更高版本支持 P3、G4dn 和 G5 实例系列。GPU请注意,由于计算容量要求,1.7-1 或更高版本不支持 P2 实例系列。

要利用GPU培训,请执行以下操作:

  • 将实例类型指定为其中一个GPU实例(例如 P3)

  • 在现有XGBoost脚本gpu_hist中将tree_method超参数设置为

分布式训练

SageMaker XGBoost分布式训练的支持CPU和GPU实例。

分布式CPU训练

要在多个实例上运行CPU训练,请将估计器的instance_count参数设置为大于 1 的值。输入数据必须按照实例总数进行划分。

在实例之间划分输入数据

使用以下步骤划分输入数据:

  1. 将输入数据分解成较小的文件。文件数量至少应等于用于分布式训练的实例数。相比一个大文件,使用多个较小的文件还可以缩短训练作业的数据下载时间。

  2. 创建时 TrainingInput,将分布参数设置为ShardedByS3Key。这样,如果训练作业中指定了 n 个实例,则每个实例将获得大约 S3 中文件数量的 1/ n

分布式GPU训练

您可以对单实例GPU或多GPU实例使用分布式训练。

使用单GPU实例进行分布式训练

SageMaker XGBoost版本 1.2-2 到 1.3-1 仅支持单实例训练。GPU这意味着,即使您选择了多GPU实例,每个实例GPU也只能使用一个实例。

在以下情况下,您必须将输入数据除以实例总数:

  • 你使用的是 1.2-2 到 1.3-1 的XGBoost版本。

  • 您无需使用多GPU实例。

有关更多信息,请参阅 在实例之间划分输入数据

注意

即使您选择多实例,1.2-2 到 1.3-1 版本也 SageMaker XGBoost只能GPU为每个实例使用一个实例。GPU

使用多GPU实例进行分布式训练

从 1.5-1 版本开始,使用 Dask SageMaker XGBoost 提供分布式GPU训练。使用 Dask,您可以在使用一个或多个多实例GPUs时充分利用所有GPU实例。使用单GPU实例时,Dask 也可以使用。

通过以下步骤使用 Dask 进行训练:

  1. 要么省略您的中的distribution参数,要TrainingInput么将其设置为。FullyReplicated

  2. 定义超参数时,请将 use_dask_gpu_training 设置为 "true"

重要

使用 Dask 进行分布式训练仅支持 CSV Parquet 输入格式。如果您使用其他数据格式,例如LIBSVM或PROTOBUF,则训练作业将失败。

对于 Parquet 数据,请确保按照字符串格式保存列名。列名使用其他数据类型的列将无法加载。

重要

使用 Dask 进行分布式训练不支持管道模式。如果指定了管道模式,则训练作业将失败。

使用 Dask 训练 SageMaker XGBoost时需要注意一些注意事项。请确保将数据拆分成较小的文件。Dask 将每个 Parquet 文件作为一个分区读取。每个人都有一个 Dask 工作人员。GPU因此,文件数应大于总数GPUs(实例数 x GPUs 每个实例的数量)。文件数量过大也会降低性能。有关更多信息,请参阅 Dask 最佳实践

输出中的变化

指定的tree_method超参数决定了用于XGBoost训练的算法。树方法 approxhistgpu_hist 都是近似方法,使用 Sketching 进行分位数计算。有关更多信息,请参阅XGBoost文档中的树方法。Sketching 是一种近似算法。因此,根据各种因素(例如为分布式训练选择的工作线程数),预期模型中会出现变化。变化的重要性取决于数据。

推理

SageMaker XGBoost支持CPU和用于推理的GPU实例。有关用于推理的实例类型的信息,请参阅 Amazon SageMaker ML 实例类型