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

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

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

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

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

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

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

  1. https://console.aws.amazon.com/sagemaker/ 打开 SageMaker 控制台。

  2. 选择 Algorithms (算法)

  3. My algorithms (我的算法) 选项卡上的列表中选择您创建的算法,或在 AWS Marketplace subscriptions (AWS 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 role (IAM 角色),选择具有在 SageMaker 中运行超参数优化作业所需的权限的 IAM 角色,或选择 Create a new role (创建新角色) 以允许 SageMaker 创建已附加 AmazonSageMakerFullAccess 托管策略的角色。有关信息,请参阅SageMaker 角色

    4. 对于 VPC,请选择要允许优化作业启动的训练作业访问的 Amazon VPC。有关更多信息,请参阅为 SageMaker 训练作业授予您的 Amazon VPC 中的资源的访问权限

    5. 选择下一步

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

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

    8. 选择下一步

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

      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. 对于 Encryption key (加密密钥),如果您希望 SageMaker 使用 AWS KMS 密钥对 S3 位置的静态输出数据进行加密,请指定密钥。

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

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

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

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

      4. 对于 Encryption key (加密密钥),如果您希望 Amazon SageMaker 使用 AWS 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 中的超参数优化的信息,请参阅执行自动模型优化

使用算法运行超参数优化作业(Amazon SageMaker Python SDK

使用您创建的或在 AWS 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', train_instance_count=1, train_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()