本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
步骤 4:训练模型
Amazon SageMaker Python SDK
选择训练算法
要为数据集选择正确的算法,您通常需要评估不同的模型,以找到最适合您数据的模型。为简单起见,在本教程中始终使用SageMakerXGBoost 算法内置算法,而无需对模型进行预评估。
如果要为表格式数据集SageMaker查找合适的模型,请使用 Amazon SageMaker Autopilot 自动执行机器学习解决方案。有关更多信息,请参阅使用 Amazon SageMaker Autopilot 自动开发模型。
创建并运行训练作业
在找出要使用的模型后,开始构建SageMaker评估程序以进行训练。本教程使用 XGBoost 内置算法作为SageMaker通用评估程序。
运行模型训练作业
-
导入 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 或笔记本实例中运行此安装,则需要手动刷新内核以完成应用版本更新。
-
-
使用
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.retrieve
URI。 -
role
– AWS Identity and Access Management 用来代表您执行任务(例如,读取训练结果、从 调用模型构件IAM以及将训练结果写入到 )的 SageMaker (Amazon S3) 角色Amazon S3。 -
train_instance_count
和train_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分布式实现数据并行或模型并行。有关更多信息,请参阅分布式训练。
-
-
通过调用评估程序的
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超参数。有关更多信息,请参阅执行自动模型优化。
-
使用
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" )
-
要开始模型训练,请使用训练和验证数据集调用评估程序的
fit
方法。通过设置wait=True
,fit
方法显示进度日志并等待训练完成。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