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

步骤 4:训练模型

Amazon SageMaker Python SDK 提供框架估算器和通用估算器来训练模型,同时编排机器学习 (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 SDK 文档中的框架。有关内置算法的更多信息,请参阅 使用 Amazon SageMaker 内置算法或预先训练模型

选择训练算法

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

提示

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

创建并运行训练作业

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

运行模型训练作业
  1. 导入 Amazon SageMaker 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.__version__ 来查看 SageMaker Python SDK 版本。本教程基于 sagemaker>=2.20。如果 SDK 已过时,请运行以下命令安装最新版本:

    ! pip install -qU sagemaker

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

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

    from sagemaker.debugger import Rule, ProfilerRule, 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 – SageMaker 用来代表您执行任务的 Amazon Identity and Access Management (IAM) 角色(例如,从 Amazon S3 读取训练结果、调用模型构件,以及将训练结果写入 Amazon S3)。

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

    • volume_size – 要附加到训练实例的 EBS 存储卷的大小 (GB)。如果使用 File 模式(默认情况下 File 模式处于打开状态),该值必须足够大,以存储训练数据。如果不指定该参数,默认值为 30。

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

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

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

    提示

    如果要对卷积神经网络 (CNN) 和自然语言处理 (NLP) 模型等大型深度学习模型进行分布式训练,可使用 SageMaker Distributed 实现数据并行或模型并行。有关更多信息,请参阅 使用 Amazon 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=Truefit 方法会显示进度日志,并等待训练完成。

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

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

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

    运行以下代码以指定生成 Debugger 训练报告的 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

    要识别训练问题,例如过度拟合、梯度消失以及其他阻碍模型收敛的问题,请使用 SageMaker Debugger,在对 ML 模型进行原型设计和训练时自动执行操作。有关更多信息,请参阅 使用 Amazon SageMaker Debugger 调试和改进模型性能。要查找对模型参数的完整分析,请参阅使用 Amazon SageMaker Debugger 的解释性示例笔记本。

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

xgb_model.model_data
提示

要测量 ML 生命周期各阶段(数据收集、模型训练和调整,以及监控为预测而部署的 ML 模型)可能出现的偏差,请使用 SageMaker Clarify。有关更多信息,请参阅 Amazon SageMaker Clarify 模型可解释性。有关端到端示例,请参阅 SageMaker Clarify 的公平性和可解释性示例笔记本。