步骤 4:训练模型 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

步骤 4:训练模型

Amaz SageMaker on Python SDK 提供框架估算器和通用估算器,用于训练您的模型,同时协调机器学习 (ML) 生命周期,访问用于训练和Amazon基础设施的SageMaker功能,例如亚马逊弹性容器注册表 (Amazon ECR)、亚马逊弹性计算云 (Amazon EC2)、亚马逊简单存储服务 (Amazon S3)。有关SageMaker内置框架估算器的更多信息,请参阅 Amaz SageMaker on Python SDK 文档中的框架。有关内置算法的更多信息,请参见使用亚马逊SageMaker内置算法或预先训练的模型

选择训练算法

要为您的数据集选择正确的算法,您通常需要评估不同的模型以找到最适合您的数据的模型。为简单起见,本教程全程使用SageMakerXGBoost 算法内置算法,无需预先评估模型。

提示

如果您SageMaker想为表格数据集找到合适的模型,请使用可SageMaker自动执行机器学习解决方案的 Amazon Autopilot。有关更多信息,请参阅使用亚马逊自动SageMaker驾驶仪自动进行模型开发

创建并运行训练作业

确定要使用哪个模型后,开始构造用于训练的SageMaker估计器。本教程使用SageMaker通用估计器的 XGBoost 内置算法。

运行模型训练作业
  1. 导入 Amaz SageMaker on Python SDK,首先从当前SageMaker会话中检索基本信息。

    import sagemaker region = sagemaker.Session().boto_region_name print("Amazon Region: {}".format(region)) role = sagemaker.get_execution_role() print("RoleArn: {}".format(role))

    这将返回以下信息:

    • region— 运行SageMaker笔记本实例的当前Amazon区域。

    • role— 笔记本实例使用的 IAM 角色。

    注意

    通过运行来检查 SageMaker Python SDK 版本sagemaker.__version__。本教程基于sagemaker>=2.20。如果 SDK 已过时,请运行以下命令安装最新版本:

    ! pip install -qU sagemaker

    如果您在现有的 SageMaker Studio 或笔记本实例中运行此安装,则需要手动刷新内核才能完成版本更新的应用。

  2. 使用该类创建 XGBoost 估算器。sagemaker.estimator.Estimator在以下示例代码中,xgBoost 估计器被命名为。xgb_model

    from sagemaker.debugger import Rule, rule_configs from sagemaker.session import TrainingInput s3_output_location='s3://{}/{}/{}'.format(bucket, prefix, 'xgboost_model') container=sagemaker.image_uris.retrieve("xgboost", region, "1.2-1") print(container) xgb_model=sagemaker.estimator.Estimator( image_uri=container, role=role, instance_count=1, instance_type='ml.m4.xlarge', volume_size=5, output_path=s3_output_location, sagemaker_session=sagemaker.Session(), rules=[ Rule.sagemaker(rule_configs.create_xgboost_report()), ProfilerRule.sagemaker(rule_configs.ProfilerReport()) ] )

    要构造SageMaker估计器,请指定以下参数:

    • image_uri— 指定训练容器镜像 URI。在此示例中,使用指定 SageMaker XGBoost 训练容器 URI。sagemaker.image_uris.retrieve

    • role— 用于代表您执行任务的 Amazon Identity and Access Management (IAM) 角色(例如,读取训练结果、从 Amazon S3 调用模型对象以及将训练结果写入 Amazon S3)。SageMaker

    • instance_countinstance_type — 用于模型训练的 Amazon EC2 ML 计算实例的类型和数量。在本次训练练习中,您将使用单个实例,该ml.m4.xlarge实例具有 4 个 CPU、16 GB 内存、亚马逊弹性区块存储 (Amazon EBS) 存储空间和高网络性能。有关 EC2 计算实例类型的更多信息,请参阅 Amazon EC2 实例类型。有关账单的更多信息,请参阅亚马逊SageMaker定价

    • volume_size— 连接到训练实例的 EBS 存储卷的大小,以 GB 为单位。如果您使用File模式(File默认情况下模式处于开启状态),则必须足够大以存储训练数据。如果您未指定此参数,则其值默认为 30。

    • output_path— SageMaker 存放模型构件和训练结果的 S3 存储桶的路径。

    • sagemaker_session— 用于管理与训练作业使用SageMaker的 API 操作和其他Amazon服务的交互的会话对象。

    • rules— 指定SageMaker调试器内置规则列表。在此示例中,该create_xgboost_report()规则创建了一个 XGBoost 报告,提供有关训练进度和结果的见解,该ProfilerReport()规则创建了有关 EC2 计算资源利用率的报告。有关更多信息,请参阅SageMaker 调试器 xgBoost 训练报告

    提示

    如果您想对大型深度学习模型(例如卷积神经网络 (CNN) 和自然语言处理 (NLP) 模型)运行分布式训练,请使用SageMaker分布式进行数据并行或模型并行。有关更多信息,请参阅亚马逊的分布式培训 SageMaker

  3. 通过调用估计器的set_hyperparameters方法来设置 XGBoost 算法的超参数。有关 XGBoost 超参数的完整列表,请参见。XGBoost 超参数

    xgb_model.set_hyperparameters( max_depth = 5, eta = 0.2, gamma = 4, min_child_weight = 6, subsample = 0.7, objective = "binary:logistic", num_round = 1000 )
    提示

    您也可以使用超参数优化功能调整SageMaker超参数。有关更多信息,请参阅使用进行自动模型调整 SageMaker

  4. 使用该TrainingInput类配置用于训练的数据输入流程。以下示例代码显示如何配置TrainingInput对象以使用您在将数据集拆分为训练、验证和测试数据集部分中上传到 Amazon S3 的训练和验证数据集。

    from sagemaker.session import TrainingInput train_input = TrainingInput( "s3://{}/{}/{}".format(bucket, prefix, "data/train.csv"), content_type="csv" ) validation_input = TrainingInput( "s3://{}/{}/{}".format(bucket, prefix, "data/validation.csv"), content_type="csv" )
  5. 要开始模型训练,请使用训练和验证数据集调用估算器的fit方法。通过设置wait=True,该fit方法显示进度日志并等待训练完成。

    xgb_model.fit({"train": train_input, "validation": validation_input}, wait=True)

    有关模型训练的更多信息,请参阅使用亚马逊训练模型 SageMaker。此教程培训作业最多可能需要 10 分钟。

    训练作业完成后,您可以下载 XGBoost 训练报告和由 Debugger 生成的SageMaker分析报告。XGBoost 训练报告可让您深入了解训练进度和结果,例如与迭代相关的损失函数、特征重要性、混淆矩阵、精度曲线和其他训练统计结果。例如,您可以从 XGBoost 训练报告中找到以下损失曲线,该曲线清楚地表明存在过拟问题。

    运行以下代码以指定生成调试器训练报告的 S3 存储桶 URI,并检查报告是否存在。

    rule_output_path = xgb_model.output_path + "/" + xgb_model.latest_training_job.job_name + "/rule-output" ! aws s3 ls {rule_output_path} --recursive

    将 Debugger XGBoost 训练和分析报告下载到当前工作空间:

    ! aws s3 cp {rule_output_path} ./ --recursive

    运行以下 IPython 脚本获取 XGBoost 训练报告的文件链接:

    from IPython.display import FileLink, FileLinks display("Click link below to view the XGBoost Training report", FileLink("CreateXgboostReport/xgboost_report.html"))

    以下 IPython 脚本返回 Debugger 概要分析报告的文件链接,该报告显示 EC2 实例资源利用率、系统瓶颈检测结果和 python 操作分析结果的摘要和详细信息:

    profiler_report_name = [rule["RuleConfigurationName"] for rule in xgb_model.latest_training_job.rule_job_summary() if "Profiler" in rule["RuleConfigurationName"]][0] profiler_report_name display("Click link below to view the profiler report", FileLink(profiler_report_name+"/profiler-output/profiler-report.html"))
    提示

    如果 HTML 报表未在JupyterLab视图中呈现图形,则必须在报表顶部选择 “信任 HTML”。

    要识别训练问题,例如过度拟合、渐变消失以及其他阻碍模型收敛的问题,请使用 D SageMaker ebugger 并在对机器学习模型进行原型设计和训练时自动执行操作。有关更多信息,请参阅使用 Amazon Debu SageMaker gger 调试和分析训练任务:要查找模型参数的完整分析,请参阅 Amazon SageMaker Debugger 可解释性示例笔记本。

你现在有一个经过训练的 XGBoost 模型。SageMaker将模型构件存储在您的 S3 存储桶中。要找到模型构件的位置,请运行以下代码打印估计器的 model_data 属性:xgb_model

xgb_model.model_data
提示

要衡量在机器学习生命周期的每个阶段(数据收集、模型训练和调整以及监控为预测而部署的 ML 模型)中可能出现的偏差,请使用 Clarify SageMaker。有关更多信息,请参阅亚马逊SageMaker阐明模型的可解释性:有关其端到端示例,请参阅 Clari fy 的公平性和可SageMaker解释性示例笔记本。