使用算法运行超参数优化作业 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用算法运行超参数优化作业

超参数优化作业通过使用您指定的算法和超参数范围在数据集上运行很多训练作业来查找模型的最佳版本。然后,它会选择超参数值来生成性能最佳的模型(按所选指标衡量)。有关更多信息,请参阅 使用 SageMaker 执行自动模型调优

您可以使用算法资源,通过 Amazon SageMaker 控制台、低级别 Amazon SageMaker API 或 Amazon SageMaker Python SDK 创建超参数调整作业。

使用算法运行超参数优化作业(控制台)

使用算法运行超参数优化作业(控制台)
  1. 通过 https://console.aws.amazon.com/sagemaker/ 打开 SageMaker 控制台。

  2. 选择 Algorithms (算法)

  3. 我的算法选项卡上的列表中选择您已创建的算法,或者在 Amazon Web Services Marketplace 订阅选项卡上选择已订阅的算法。

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

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

  5. Create hyperparameter tuning job (创建超参数优化作业) 页面上,提供以下信息:

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

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

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

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

    3. 对于 IAM 角色,请选择具有在 SageMaker 中运行超参数调整作业所需的权限的 IAM 角色,或选择创建新角色以允许 SageMaker 创建已附加 AmazonSageMakerFullAccess 托管策略的角色。有关信息,请参阅 SageMaker 角色

    4. 对于 VPC,请选择您希望调整作业启动的训练作业所能访问的 Amazon VPC。有关更多信息,请参阅 为 SageMaker 训练作业授予您的 Amazon VPC 中的资源的访问权限。

    5. 选择下一步

    6. 对于 Objective metric (目标指标),选择超参数优化作业用于确定超参数的最佳组合的指标,并选择是最小化该指标还是最大化该指标。有关更多信息,请参阅 查看最佳训练作业

    7. 对于 Hyperparameter configuration (超参数配置),选择希望优化作业搜索的可优化超参数的范围,并为要在超参数优化作业启动的所有训练作业中保持不变的超参数设置静态值。有关更多信息,请参阅 定义超参数范围

    8. 选择下一步

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

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

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

      3. 对于 Compression type (压缩类型),选择要使用的数据压缩类型(如果有)。

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

      5. 对于 S3 data type (S3 数据类型)S3 data distribution type (S3 数据分布类型)S3 location (S3 位置),请指定适当的值。有关这些值的含义的信息,请参阅S3DataSource

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

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

    10. 对于 Output (输出) 位置,请指定以下值:

      1. 对于 S3 output path (S3 输出路径),请选择此超参数优化作业启动的训练作业将输出(例如模型构件)存储到的 S3 位置。

        注意

        您可以使用存储在此位置的模型构件来从该超参数优化作业创建模型或模型包。

      2. 对于加密密钥,如果您希望 SageMaker 使用 Amazon KMS 密钥对 S3 位置的输出数据进行静态加密,请指定密钥。

    11. 对于 Resource configuration (资源配置),提供以下信息:

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

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

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

      4. 对于 加密密钥,如果您希望 Amazon SageMaker 使用 Amazon Key Management Service 密钥对附加到训练实例的 ML 存储卷中的数据进行加密,请指定密钥。

    12. 对于 Resource limits (资源限制),提供以下信息:

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

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

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

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

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

使用算法运行超参数优化作业 (API)

要使用算法通过 SageMaker API 运行超参数优化作业,请指定算法的名称或 Amazon 资源名称 (ARN) 作为传递给 CreateHyperParameterTuningJobAlgorithmSpecification 对象的 AlgorithmName 字段。有关 SageMaker 中的超参数调整的信息,请参阅使用 SageMaker 执行自动模型调优

使用算法运行超参数调整作业 (Amazon SageMaker Python SDK)

使用您创建的或在 Amazon Web Services Marketplace 上订阅的算法创建超参数优化作业、创建 AlgorithmEstimator 对象并指定算法的名称或 Amazon 资源名称 (ARN) 作为 algorithm_arn 参数的值。然后,使用您创建的 AlgorithmEstimator 作为 estimator 参数的值来初始化 HyperparameterTuner 对象。最后,调用 AlgorithmEstimatorfit 方法。例如:

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()