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

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

步骤 4:训练模型

Amazon SageMaker Python SDK 提供了框架评估程序和通用评估程序来训练模型,同时编排机器学习 (ML) 生命周期,以访问SageMaker训练功能和AWS基础设施,例如 Amazon Elastic Container Registry (Amazon ECR)、 Amazon Elastic Compute Cloud (Amazon EC2)、 () Amazon Simple Storage Service (Amazon S3)。有关SageMaker内置框架评估程序和算法评估程序的更多信息,请分别参阅 文档中的框架第一方算法Amazon SageMaker Python SDK

选择训练算法

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

提示

如果要为表格式数据集SageMaker查找合适的模型,请使用 Amazon SageMaker Autopilot 自动执行机器学习解决方案。有关更多信息,请参阅使用 Amazon SageMaker Autopilot 自动开发模型

创建并运行训练作业

在找出要使用的模型后,开始构建SageMaker评估程序以进行训练。本教程使用 XGBoost 内置算法作为SageMaker通用评估程序。

运行模型训练作业

  1. 导入 Amazon SageMaker Python SDK 并通过从当前SageMaker会话中检索基本信息来启动 。

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

    这将返回以下信息:

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

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

    注意

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

    ! pip install -qU sagemaker

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

  2. 使用 sagemaker.estimator.Estimator 类创建 XGBoost 评估程序。在以下示例代码中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 训练容器 sagemaker.image_uris.retrieveURI。

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

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

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

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

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

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

    提示

    如果要对大型深度学习模型(如卷积神经网络 (CNN) 和自然语言处理 (NLP) 模型)运行分布式训练,请使用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超参数。有关更多信息,请参阅执行自动模型优化

  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 视图中呈现图表,则必须选择报告顶部的 Trust HTML信任 HTML)。

    要确定训练问题(例如,过度拟合、梯度消失和其他导致模型无法融合的问题),请在为 ML 模型制作原型并训练 ML 模型时,使用 SageMaker 调试程序 并执行自动化操作。有关更多信息,请参阅Amazon SageMaker 调试程序。要查找模型参数的完整分析,请参阅具有Amazon SageMaker 调试程序示例笔记本的 Explainability。

现在,您有一个经过训练的 XGBoost 模型。 将模型构件SageMaker存储在 S3 存储桶中。要查找模型构件的位置,请运行以下代码以输出xgb_model评估程序的 model_data 属性:

xgb_model.model_data
提示

要测量在 ML 生命周期的每个阶段可能发生的偏差(数据收集、模型训练和优化,以及为预测而部署的 ML 模型的监控),请使用 SageMaker Creify。有关更多信息,请参阅模型可解释性。有关其端到端示例,请参阅“Fairness and Explainability with SageMaker Clearout”示例笔记本。