

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

# XGBoost 使用 Amazon A SageMaker I 的算法
<a name="xgboost"></a>

[XGBoost](https://github.com/dmlc/xgboost)（extreme Gradient Boosting）是梯度提升树算法的一种流行且高效的开源实现。梯度提升是一种有监督学习算法，它尝试通过结合一组较简单模型的多个估计值来准确预测目标变量。该 XGBoost 算法在机器学习竞赛中表现良好，原因如下：
+ 它能够可靠地处理各种数据类型、关系和分布。
+ 您可以微调的超参数种类繁多。

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

您可以将新版本的 XGBoost 算法用作以下任一用途：
+ 亚马逊 A SageMaker I 的内置算法。
+ 在本地环境中运行训练脚本的框架。

与原始版本相比，此实施占用内存更少，并且具有更好的日志记录、改进的超参数验证以及一组更大的指标。它提供了 XGBoost `estimator`在托管 XGBoost环境中运行训练脚本的。 SageMaker 人工智能 XGBoost 的当前版本基于最初的 XGBoost 版本 1.0、1.2、1.3、1.5、1.7 和 3.0。

有关 Amazon A SageMaker I XGBoost 算法的更多信息，请参阅以下博客文章：
+ [介绍开源 Amazon A SageMaker I XGBoost 算法容器](https://aws.amazon.com/blogs/machine-learning/introducing-the-open-source-amazon-sagemaker-xgboost-algorithm-container/)
+ [亚马逊 SageMaker AI XGBoost 现在提供完全分布式 GPU 训练](https://aws.amazon.com/blogs/machine-learning/amazon-sagemaker-xgboost-now-offers-fully-distributed-gpu-training/)

## 支持的版本
<a name="xgboost-supported-versions"></a>

有关更多详细信息，请参阅我们的[支持政策](https://docs.aws.amazon.com/sagemaker/latest/dg/pre-built-containers-support-policy.html#pre-built-containers-support-policy-ml-framework)。
+ 框架（开源）模式：1.2-1、1.2-2、1.3-1、1.5-1、1.7-1、3.0-5
+ 算法模式：1.2-1、1.2-2、1.3-1、1.5-1、1.7-1、3.0-5

**警告**  
由于需要计算容量， SageMaker AI XGBoost 的 3.0-5 版本与 P3 实例系列中的 GPU 实例不兼容，用于训练或推理。

**警告**  
由于软件包兼容， SageMaker AI 3.0-5 版本 XGBoost 不支持 SageMaker 调试器。

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

**警告**  
网络隔离模式：请勿将 pip 升级到版本 25.2 以上。在模块安装期间，较新的版本可能会尝试从 PyPI 获取安装工具。

**重要**  
检索 SageMaker AI XGBoost 图像 URI 时，请勿使用`:latest`或`:1`作为图像 URI 标签。您必须指定其中一个才能选择包含[支持的版本](#xgboost-supported-versions)要使用的本机 XGBoost 软件包版本的 SageMaker AI 托管 XGBoost 容器。要查找迁移到 SageMaker AI XGBoost 容器中的软件包版本，请参阅 [Docker 注册表路径和示例代码](https://docs.aws.amazon.com/sagemaker/latest/dg-ecr-paths/sagemaker-algo-docker-registry-paths.html)。然后选择你的 AWS 区域，然后导航到 **XGBoost （算法）**部分。

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

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

**注意**  
你可以使用 XGBoost v1.0-1，但官方不支持它。

## 该 XGBoost 算法的 EC2 实例推荐
<a name="Instance-XGBoost"></a>

SageMaker AI XGBoost 支持 CPU 和 GPU 训练和推理。实例建议取决于训练和推理需求以及 XGBoost 算法版本。有关更多信息，请选择以下选项之一：
+ [CPU 训练](#Instance-XGBoost-training-cpu)
+ [GPU 训练](#Instance-XGBoost-training-gpu)
+ [分布式 CPU 训练](#Instance-XGBoost-distributed-training-cpu)
+ [分布式 GPU 训练](#Instance-XGBoost-distributed-training-gpu)
+ [推理](#Instance-XGBoost-inference)

### 训练
<a name="Instance-XGBoost-training"></a>

 SageMaker 人工智能 XGBoost 算法支持 CPU 和 GPU 训练。

#### CPU 训练
<a name="Instance-XGBoost-training-cpu"></a>

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

#### GPU 训练
<a name="Instance-XGBoost-training-gpu"></a>

SageMaker 人工智能 XGBoost 版本 1.2-2 或更高版本支持 GPU 训练。尽管每个实例的成本更高，但 GPUs 训练速度更快，从而更具成本效益。

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

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

SageMaker AI XGBoost 版本 3.0-5 或更高版本支持 G4dN 和 G5 GPU 实例系列。请注意，由于计算容量要求，3.0-5 或更高版本不支持 P3 实例系列。

要利用 GPU 训练：
+ 将实例类型指定为 GPU 实例之一（例如 G4dN） 
+ 在现有 XGBoost 脚本`gpu_hist`中将`tree_method`超参数设置为

### 分布式训练
<a name="Instance-XGBoost-distributed-training"></a>

SageMaker AI XGBoost 支持 CPU 和 GPU 实例进行分布式训练。

#### 分布式 CPU 训练
<a name="Instance-XGBoost-distributed-training-cpu"></a>

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

##### 在实例之间划分输入数据
<a name="Instance-XGBoost-distributed-training-divide-data"></a>

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

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

1. 创建时 [TrainingInput](https://sagemaker.readthedocs.io/en/stable/api/utility/inputs.html)，将分布参数设置为`ShardedByS3Key`。这样，如果训练作业中指定了 *n* 个实例，每个实例将获得 S3 中文件数量的大约 *1/n*。

#### 分布式 GPU 训练
<a name="Instance-XGBoost-distributed-training-gpu"></a>

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

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

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

如果出现以下情况，您必须将输入数据按照实例总数进行划分：
+ 你使用的是 1.2-2 到 1.3-1 的 XGBoost 版本。
+ 您无需使用多 GPU 实例。

 有关更多信息，请参阅 [在实例之间划分输入数据](#Instance-XGBoost-distributed-training-divide-data)。

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

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

[从版本 1.5-1 开始， SageMaker AI 通过 Dask XGBoost 提供分布式 GPU 训练。](https://www.dask.org/)使用 Dask，您可以在使用一个或多个多 GPU 实例 GPUs 时充分利用所有功能。使用单 GPU 实例时，Dask 也可以使用。

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

1. 要么省略您的中的`distribution`参数，要[TrainingInput](https://sagemaker.readthedocs.io/en/stable/api/utility/inputs.html)么将其设置为。`FullyReplicated`

1. 定义超参数时，请将 `use_dask_gpu_training` 设置为 `"true"`。

**重要**  
使用 Dask 进行分布式训练时，仅支持 CSV 和 Parquet 输入格式。如果您使用其他数据格式，例如 LIBSVM 或 PROTOBUF，则训练作业将失败。  
对于 Parquet 数据，请确保按照字符串格式保存列名。列名使用其他数据类型的列将无法加载。

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

使用 Dask 训练 SageMaker AI XGBoost 时，需要注意一些注意事项。请确保将数据拆分成较小的文件。Dask 将每个 Parquet 文件作为一个分区读取。每个 GPU 都有一个 Dask 工作人员。因此，文件数应大于总数 GPUs （实例数 x GPUs 每个实例的数量）。文件数量过大也会降低性能。有关更多信息，请参阅 [Dask 最佳实践](https://docs.dask.org/en/stable/best-practices.html)。

#### 输出中的变化
<a name="Instance-XGBoost-distributed-training-output"></a>

指定的`tree_method`超参数决定了用于 XGBoost 训练的算法。树方法 `approx`、`hist` 和 `gpu_hist` 都是近似方法，使用 Sketching 进行分位数计算。有关更多信息，请参阅 XGBoost 文档中的[树方法](https://xgboost.readthedocs.io/en/stable/treemethod.html)。Sketching 是一种近似算法。因此，根据各种因素（例如为分布式训练选择的工作线程数），预期模型中会出现变化。变化的重要性取决于数据。

### 推理
<a name="Instance-XGBoost-inference"></a>

SageMaker AI XGBoost 支持 CPU 和 GPU 实例进行推理。有关用于推理的实例类型的信息，请参阅 [Amazon A SageMaker I ML 实例类型](https://aws.amazon.com/sagemaker/pricing/)。