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

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

第 4 步:训练模型

这些区域有:亚马逊 SageMaker Python 开发工具包提供框架估计器和通用估计器来训练模型,同时协调机器学习 (ML) 生命周期,访问 SageMaker 功能以进行训练和Amazon基础设施,如 Amazon EElastic Container Registry (Amazon ECR)、Amazon Elastic Compute Cloud (Amazon EC2)、Amazon Simple Storage Service (Amazon S3)。有关 的更多信息 SageMaker 内置框架估计器和算法估计器,请参阅框架第一方算法分别在亚马逊 SageMaker Python 开发工具包文档中)。

选择训练算法

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

提示

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

创建并运行训练 Job

在你找出要使用哪种模型之后,开始构造 SageMaker 用于训练的估计器。本教程使用 xGBoost 内置算法进行 SageMaker 通用估计器。

运行模型训练作业

  1. 导入亚马逊 SageMaker Python 开发工具包然后首先从当前的基本信息中检索 SageMaker 会话。

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

    这将返回以下信息:

    • region— 最新的AmazonSageMaker 笔记本实例运行的区域。

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

    注意

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

    ! pip install -qU sagemaker

    如果你在退出时运行此安装 SageMaker Studio 或笔记本实例,您需要手动刷新内核才能完成应用版本更新。

  2. 使用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())] )

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

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

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

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

    • volume_size— 要附加到训练实例的 EBS 存储卷的大小(以 GB 为单位)。如果您使用,该数据必须足够大以存储训练数据File模式 ()File默认情况下模式打开)。

    • output_pathSageMaker 存储模型构件和训练结果的 S3 存储桶的路径。

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

    • rules— 指定一个列表 SageMaker 调试程序内置规则。在此示例中,create_xgboost_report()规则创建一个 xgBoost 报告,提供有关训练进度和结果的见解。有关更多信息,请参阅 SageMaker 调试器 xgBoost 培训报告

    提示

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

  3. 通过调用 XGBoost 算法的超参数设置set_hyperparameters估计程序的方法。有关 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=Truefit方法显示进度日志,并等到训练完成。

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

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

    培训工作完成后,您可以下载 xgBoost 培训报告和由 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

    将调试器 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 脚本返回调试器性能分析报告的文件链接,该链接显示了 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在报告的顶部。

    要确定训练问题,例如过度拟合、消失渐变以及阻止模型收敛的其他问题,请使用 SageMaker 在设计和训练机器学习模型的同时,调试器并采取自动操作。有关更多信息,请参阅 亚马逊SageMakerDebugger (调试程序)。要查找模型参数的完整分析,请参阅亚马逊的可解释性 SageMaker Debugger (调试程序)例笔记本。

您现在有一个训练有素的 XGBoost 模型。 SageMaker 将模型项目存储在 S3 存储桶中。要查找模型对象的位置,请运行以下代码以打印xgb_model估算器:

xgb_model.model_data
提示

要衡量机器学习生命周期的每个阶段(数据收集、模型训练和调整以及对部署用于预测的机器学习模型的监控)可能出现的偏见,请使用 SageMaker 澄清。有关更多信息,请参阅 亚马逊 SageMaker 澄清模型的可解释性。对于 end-to-end 例如,请参阅公平性和可解释性 SageMaker 澄清例笔记本。