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

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

第 4 步:训练模型

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

选择训练算法

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

提示

如果您希望 SageMaker 为您的表格数据集找到合适的模型,请使用 Amazon SageMaker 自动导航仪来自动化机器学习解决方案。有关更多信息,请参阅使用 Amazon SageMaker Autopilot 实现模型开发自动化

创建并运行训练 Job

找出要使用的模型后,开始构建一个 SageMaker 估计器进行培训。本教程使用 XGBoost 内置算法作为 SageMaker 泛型估计器。

运行模型训练作业

  1. 导入Amazon 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— 当前Amazon正在运行 SageMaker 笔记本实例的区域。

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

    注意

    通过运行检查 SageMaker Python 开发工具包的版本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', train_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 实例类型. 有关账单的更多信息,请参阅Amazon SageMaker 定价.

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

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

    • sagemaker_session— 管理与 SageMaker API 操作和其他Amazon培训作业使用的服务。

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

    提示

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

  3. 通过调用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.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 调试器并在原型和训练 ML 模型时执行自动操作。有关更多信息,请参阅Amazon SageMaker 调试程序。要查找模型参数的完整分析,请参阅使用 Amazon SageMaker 调试器进行解释示例笔记本电脑。

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

xgb_model.model_data
提示

要测量在 ML 生命周期的每个阶段(数据收集、模型培训和调整以及监视部署用于预测的 ML 模型)中可能出现的偏差,请使用 SageMaker Clelity。有关更多信息,请参阅模型说明。有关它的端到端示例,请参阅SageMaker 澄清公平性和解释性示例笔记本电脑。