

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

# 使用算法运行超参数优化作业
<a name="sagemaker-mkt-algo-tune"></a>

以下部分介绍如何使用算法资源在 Amazon A SageMaker I 中运行超参数调整任务。超参数优化作业通过使用您指定的算法和超参数范围在数据集上运行很多训练作业来查找模型的最佳版本。然后，它会选择超参数值来生成性能最佳的模型（按所选指标衡量）。有关更多信息，请参阅 [使用 SageMaker AI 自动调整模型](automatic-model-tuning.md)。

您可以使用 Amazon AI 控制台、低级亚马逊 SageMaker API 或 Amazon SageMaker [Pyth SageMaker on](https://sagemaker.readthedocs.io/en/stable) 软件开发工具包创建使用算法资源来创建超参数调整任务。

**Topics**
+ [使用算法运行超参数优化作业（控制台）](#sagemaker-mkt-algo-tune-console)
+ [使用算法运行超参数优化作业 (API)](#sagemaker-mkt-algo-tune-api)
+ [使用算法运行超参数调优作业（[Amaz SageMaker on Python SDK](https://sagemaker.readthedocs.io/en/stable)）](#sagemaker-mkt-algo-tune-sdk)

## 使用算法运行超参数优化作业（控制台）
<a name="sagemaker-mkt-algo-tune-console"></a>

**使用算法运行超参数优化作业（控制台）**

1. 打开 SageMaker AI 控制台，网址为[https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)。

1. 选择 **Algorithms (算法)**。

1. 从**我的算法**选项卡上的列表中选择您已创建的算法，或者在 **AWS Marketplace 订阅**选项卡上选择已订阅的算法。

1. 选择 **Create hyperparameter tuning job (创建超参数优化作业)**。

   将自动选择您选定的算法。

1. 在 **Create hyperparameter tuning job (创建超参数优化作业)** 页面上，提供以下信息：

   1. 对于 **Warm start (热启动)**，选择 **Enable warm start (启用热启动)** 以使用来自之前的超参数优化作业的信息作为此超参数优化作业的起点。有关更多信息，请参阅 [运行热启动超参数调优作业](automatic-model-tuning-warm-start.md)。

      1. 选择 **Identical data and algorithm (相同的数据和算法)**（如果您的输入数据与此超参数优化作业的父作业的输入数据相同），或选择 **Transfer learning (迁移学习)** 以将附加或其他输入数据用于此超参数优化作业。

      1. 对于 **Parent hyperparameter tuning job(s) (父超参数优化作业)**，请选择最多 5 个超参数优化作业以用作此超参数优化作业的父作业。

   1. 对于 **Hyperparameter tuning job name (超参数优化作业名称)**，请键入优化作业的名称。

   1. 对于 **IAM 角色**，请选择具有在 A SageMaker I 中运行超参数调整任务所需权限的 IAM 角色，或者选择**创建新角色**以允许 SageMaker AI 创建附加了`AmazonSageMakerFullAccess`托管策略的角色。有关信息，请参阅[如何使用 SageMaker AI 执行角色](sagemaker-roles.md)。

   1. 对于 **VPC**，请选择您希望调整作业启动的训练作业所能访问的 Amazon VPC。有关更多信息，请参阅 [让 SageMaker AI 训练作业访问您的 Amazon VPC 中的资源](train-vpc.md)。

   1. 选择**下一步**。

   1. 对于 **Objective metric (目标指标)**，选择超参数优化作业用于确定超参数的最佳组合的指标，并选择是最小化该指标还是最大化该指标。有关更多信息，请参阅 [查看最佳训练作业](automatic-model-tuning-ex-tuning-job.md#automatic-model-tuning-best-training-job)。

   1. 对于 **Hyperparameter configuration (超参数配置)**，选择希望优化作业搜索的可优化超参数的范围，并为要在超参数优化作业启动的所有训练作业中保持不变的超参数设置静态值。有关更多信息，请参阅 [定义超参数范围](automatic-model-tuning-define-ranges.md)。

   1. 选择**下一步**。

   1. 对于 **Input data configuration (输入数据配置)**，请指定要用于超参数优化作业的每个输入数据通道的以下值。在算法的**算法摘要**页面中，您可在**通道规范**部分下查看用于超参数调整的算法支持哪些通道，以及每个通道的内容类型、支持的压缩类型和支持的输入模式。

      1. 对于 **Channel name (通道名称)**，键入输入通道的名称。

      1. 对于 **Content type (内容类型)**，键入算法预期用于通道的数据的内容类型。

      1. 对于 **Compression type (压缩类型)**，选择要使用的数据压缩类型（如果有）。

      1. 对于 **Record wrapper (记录包装程序)**，如果算法需要 `RecordIO` 格式的数据，则选择 `RecordIO`。

      1. 对于 **S3 data type (S3 数据类型)**、**S3 data distribution type (S3 数据分布类型)** 和 **S3 location (S3 位置)**，请指定适当的值。有关这些值的含义的信息，请参阅[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html)。

      1. 对于 **Input mode (输入模式)**，选择 **File (文件)** 以将数据下载到预配置的 ML 存储卷，并将目录挂载到 Docker 卷。选择 **Pipe (管道)** 以直接从 Amazon S3 将数据流式传输到容器。

      1. 要添加另一个输入通道，请选择 **Add channel (添加通道)**。如果已添加完输入通道，请选择 **Done (完成)**。

   1. 对于 **Output (输出)** 位置，请指定以下值：

      1. 对于 **S3 output path (S3 输出路径)**，请选择此超参数优化作业启动的训练作业将输出（例如模型构件）存储到的 S3 位置。
**注意**  
您可以使用存储在此位置的模型构件来从该超参数优化作业创建模型或模型包。

      1. 对于**加密密钥**，如果您希望 SageMaker AI 使用 AWS KMS 密钥对 S3 位置的静态输出数据进行加密。

   1. 对于 **Resource configuration (资源配置)**，提供以下信息：

      1. 对于 **Instance type (实例类型)**，选择要用于超参数优化作业启动的每个训练作业的实例类型。

      1. 对于 **Instance count (实例计数)**，键入要用于超参数优化作业启动的每个训练作业的 ML 实例的数目。

      1. 对于 **Additional volume per instance (GB) (每个实例的附加卷 (GB))**，键入预配置超参数优化作业启动的每个训练作业所需的 ML 存储卷的大小。ML 存储卷存储模型构件和增量状态。

      1. 对于**加密密钥**，如果您希望 Amazon SageMaker AI 使用 AWS 密钥管理服务密钥对附加到训练实例的 ML 存储卷中的数据进行加密，请指定密钥。

   1. 对于 **Resource limits (资源限制)**，提供以下信息：

      1. 对于 **Maximum training jobs (最大训练作业数)**，请指定您希望超参数优化作业启动的训练作业的最大数目。超参数优化作业最多可启动 500 个训练作业。

      1. 对于 **Maximum parallel training jobs (最大并行训练作业数)**，请指定超参数优化作业可启动的并发训练作业的最大数目。超参数优化作业最多可启动 10 个并发训练作业。

      1. 对于 **Stopping condition (停止条件)**，请指定您希望超参数优化作业启动的每个训练作业运行的最长时间（以秒、分钟、小时或天为单位）。

   1. 对于 **Tags (标签)**，请指定一个或多个标签来管理超参数优化作业。每个标签都由一个键和一个可选值组成。每个资源的标签键必须是唯一的。

   1. 选择 **Create jobs (创建作业)** 以运行超参数优化作业。

## 使用算法运行超参数优化作业 (API)
<a name="sagemaker-mkt-algo-tune-api"></a>

要使用算法通过 SageMaker API 运行超参数调整任务，请将算法的名称或 Amazon 资源名称 (ARN) 指定为传递`AlgorithmName`给的对象[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AlgorithmSpecification.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AlgorithmSpecification.html)的字段。[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateHyperParameterTuningJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateHyperParameterTuningJob.html)有关 SageMaker AI 中超参数调整的信息，请参阅[使用 SageMaker AI 自动调整模型](automatic-model-tuning.md)。

## 使用算法运行超参数调优作业（[Amaz SageMaker on Python SDK](https://sagemaker.readthedocs.io/en/stable)）
<a name="sagemaker-mkt-algo-tune-sdk"></a>

使用您创建或订阅的算法创建超参数调整任务，创建`AlgorithmEstimator`对象并指定 Amazon 资源名称 (ARN) 或算法名称作为参数的值。 AWS Marketplace `algorithm_arn`然后，使用您创建的 `AlgorithmEstimator` 作为 `estimator` 参数的值来初始化 `HyperparameterTuner` 对象。最后，调用 `AlgorithmEstimator` 的 `fit` 方法。例如：

```
from sagemaker import AlgorithmEstimator
from sagemaker.tuner import HyperparameterTuner

data_path = os.path.join(DATA_DIR, 'marketplace', 'training')

algo = AlgorithmEstimator(
            algorithm_arn='arn:aws:sagemaker:us-east-2:764419575721:algorithm/scikit-decision-trees-1542410022',
            role='SageMakerRole',
            instance_count=1,
            instance_type='ml.c4.xlarge',
            sagemaker_session=sagemaker_session,
            base_job_name='test-marketplace')

train_input = algo.sagemaker_session.upload_data(
    path=data_path, key_prefix='integ-test-data/marketplace/train')

algo.set_hyperparameters(max_leaf_nodes=10)
tuner = HyperparameterTuner(estimator=algo, base_tuning_job_name='some-name',
                                objective_metric_name='validation:accuracy',
                                hyperparameter_ranges=hyperparameter_ranges,
                                max_jobs=2, max_parallel_jobs=2)

tuner.fit({'training': train_input}, include_cls_metadata=False)
tuner.wait()
```