

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

# 使用亚马逊 AI 的 xgBoost 算法 SageMaker
<a name="xgboost"></a>

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

您可以使用 XGBoost 来处理回归、分类（二元和多元）和排名问题。

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

与原始版本相比，此实施占用内存更少，并且具有更好的日志记录、改进的超参数验证以及一组更大的指标。它提供了一个 XGBoost `estimator`，用于在托管的 XGBoost 环境中运行训练脚本。当前版本的 SageMaker AI 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/)
+ [亚马逊 A SageMaker I 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 XGBoost 3.0-5 版本不支持调试器。 SageMaker 

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

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

**重要**  
检索 SageMaker AI xgBoost 图像 URI 时，请勿使用`:latest`或`:1`作为图像 URI 标签。必须指定其中一个才能选择包含[支持的版本](#xgboost-supported-versions)要使用的本机 SageMaker AI-managed XGBoost 包版本的 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 v1.1。 SageMaker 当测试输入的特征少于 LIBSVM 输入中的训练数据时，XGBoost 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 AI xgBoost 算法支持 CPU 和 GPU 训练。

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

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

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

SageMaker AI xgBoost 1.2-2 或更高版本支持 GPU 训练。尽管每实例成本较高，但 GPU 训练的速度更快，因此更经济高效。

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 脚本中将 `tree_method` 超参数设置为 `gpu_hist`

### 分布式训练
<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 *1/n**个实例，则每个实例将获得大致等于 S3 中文件数量的值。

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

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

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

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

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

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

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

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

[从版本 1.5-1 开始， SageMaker AI xgBoost 通过 Dask 提供分布式 GPU 训练。](https://www.dask.org/)通过 Dask，您可以在使用一个或多个多 GPU 实例时使用所有 GPU。使用单 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 工作人员。因此，文件数应大于 GPU 的总数（实例数 \* 每个实例的 GPU 数）。文件数量过大也会降低性能。有关更多信息，请参阅 [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/)。