科技以懒人为本!
为了省事,为了提高效率,为了节约工夫,为了降低成本,咱们会千方百计地通过自动化形式来帮忙本人「偷懒」。那么当你在从事与机器学习(ML)无关的我的项目时,不可避免须要创立并训练模型,随后依据状况进行调优,从新训练模型并再次部署,这样的循环一遍一遍进行着……
这种重复性的操作是否更简略点?
随着机器学习在公司外围业务中占据的份量越来越重,缩短从模型创立到部署的工夫就变得越来越重要。2019 年 11 月,Amazon Web Services (AWS) 公布了实用于 Amazon SageMaker 的 AWS Step Functions Data Science SDK,开发人员能够通过这款开源开发工具包,用 Python 创立基于 Step Functions 的机器学习工作流。当初,咱们曾经能够应用与模型开发所用的同款工具创立可重复使用的模型部署工作流。请拜访 GitHub 仓库的「automate_model_retraining_workflow」文件夹查阅该解决方案的残缺手册。
本文将以一个常见的应用案例「模型的定期从新训练和部署」来演示 Data Science SDK 的性能。在下文中,咱们将创立一个基于无服务器架构的工作流,用于训练机器学习模型、应用验证数据集查看模型的性能并在模型准确度超过设定阈值时将模型部署到生产环境中。最初,下文还会介绍如何定期触发工作流。
下图演示了上述 AWS Step Functions 无服务器架构工作流。
后续操作应用了下列 AWS 服务:
- AWS Step Functions 使咱们可能将多个 AWS 服务整合到一个无服务器架构工作流中。咱们能够设计并执行工作流,其中一个步骤的输入作为下一个步骤的输出,并反对将错误处理嵌入到工作流中。
- Amazon SageMaker 是一项齐全托管的服务,可为开发人员和数据科学家提供构建、训练和部署不同类型机器学习模型时所需的工具。
- AWS Glue 是一项齐全托管的提取、转换和加载(ETL)服务。咱们能够将 AWS Glue 指向受反对的数据存储,它将会生成代码以从指定的存储中提取数据并加载到指标存储中。AWS Glue 在分布式 Apache Spark 环境中运行,这使咱们可能充分利用 Spark 而无需治理基础设施。
- AWS Lambda 是一项在运行代码时无需预置或治理服务器的计算服务。仅当被触发时 Lambda 才会执行代码,并且反对主动扩大,每秒可解决数千个申请。
- Amazon EventBridge 是一项无服务器事件总线服务,通过它能够轻松连贯不同的 SaaS 应用程序、AWS 服务和应用程序中的数据。
SDK 概述
此 SDK 提供一种新的 AWS Step Functions 应用形式。一个 Step Function 是由多个离散步骤组成的状态机,其中每个步骤都能够执行工作、作出抉择、启动并行执行或治理超时。咱们能够开发独自的步骤并应用 Step Function 来解决整个工作流的触发、协调和状态治理。在 Data Science SDK 诞生前,咱们只能应用基于 JSON 的 Amazon States Language 定义 Step Function;但当初能够借助此 SDK 应用 Python 代码轻松创立、执行和可视化 Step Function。
本文提供了此 SDK 的概述,包含如何创立 Step Function 步骤、应用参数、集成服务特定的性能以及将这些步骤关联在一起以创立和可视化工作流。大家能够在本文中找到多个示例代码;同时,咱们也为整个流程创立了具体的 Amazon SageMaker 笔记本。更多信息请参阅 GitHub 仓库。
步骤、参数和动静工作流
在 Step Function 中,每个步骤均会将其输入传递至下一个步骤。咱们能够在后续的步骤中应用这些输入来创立动静工作流。此外,还能够在执行 Step Function 时传入参数,实现工作流的通用性,以便其反对其余我的项目。
要应用此 SDK 为工作流定义所需的输出参数,请参阅以下代码:
execution\_input = ExecutionInput(schema={
'TrainingJobName': str,
'GlueJobName': str,
'ModelName': str,
'EndpointName': str,
'LambdaFunctionName': str
})
内置服务集成
Data Science SDK 可与多项 AWS 服务集成。这些集成使咱们可能间接管制受反对的服务,而无需去写 API 调用代码。本文将会与 AWS Glue、Lambda 及 Amazon SageMaker 服务相集成。更多信息请参阅 AWS Step Functions 服务集成。
在模型从新训练前,首先须要获取到最新的数据。此外,还须要丰盛原始数据,同时将其保留到 ML 模型反对的文件类型和地位。AWS Glue 用于连贯大部分数据存储,也反对自定义的 Python 脚本并且无需治理服务器。作为工作流的第一步,能够用 AWS Glue 读取生产数据并将转换好的数据写入 Amazon S3 中。
通过 Data Science SDK 能够轻松向工作流增加 AWS Glue 作业。AWS Glue 作业自身可指定数据源地位、ETL 的 Python 代码以及指标文件寄存地位。此 SDK 须要的只是 AWS Glue 作业的名称,以此作为 GlueStartJobRunStep 的参数。更多信息请参阅 YouTube 上的 AWS Glue ETL 入门。
咱们能够应用输出参数,在运行的时候抉择 AWS Glue 作业:
etl\_step = steps.GlueStartJobRunStep(
'Extract, Transform, Load',
parameters={"JobName": execution\_input\['GlueJobName'\]}
)
在提取并保留输出数据之后,能够应用此 SDK 的 TrainingStep 来训练模型。Amazon SageMaker 会解决底层计算资源,但咱们须要为训练指定算法、超参数和数据源。请参阅以下代码:
training\_step = steps.TrainingStep(
'Model Training',
estimator=xgb,
data={'train': sagemaker.s3\_input(train\_data, content\_type='csv'),
'validation': sagemaker.s3\_input(validation\_data, content\_type='csv')},
job\_name=execution\_input\['TrainingJobName'\]
)
上述代码中的估算器 xgb 封装了 XGBoost 算法及其超参数。无关如何定义估算器的更多信息,请参阅 GitHub 仓库。
在模型训练实现前,Step Function 工作流将始终停留在该训练步骤。在训练实现后,须要获取训练后果,以便工作流能够依据新模型的准确度抉择分支。为了查看 Amazon SageMaker 的训练作业和返回后果,可应用 Step Functions LambdaStep 来调用 Lambda 运行一个简略的 Python 函数。要通过 SDK 增加 Lambda 状态,请指定函数名称和 Payload。本文应用 JSON 门路来抉择 Lambda 函数负载中的 TrainingJobName,而后,它能力晓得要查问的训练作业是哪个。请参阅以下代码:
lambda\_step = steps.compute.LambdaStep(
'Query Training Results',
parameters={"FunctionName": execution\_input\['LambdaFunctionName'\],
'Payload':{"TrainingJobName.$": "$.TrainingJobName"}
}
)
要部署训练好的模型,可应用 SDK 中的 ModelStep 和 EndpointConfigStep 创立一个模型对象和部署配置。请参阅以下代码:
model\_step = steps.ModelStep(
'Save Model',
model=training\_step.get\_expected\_model(),
model\_name=execution\_input\['ModelName'\],
result\_path='$.ModelStepResults'
)
endpoint\_config\_step = steps.EndpointConfigStep(
"Create Model Endpoint Config",
endpoint\_config\_name=execution\_input\['ModelName'\],
model\_name=execution\_input\['ModelName'\],
initial\_instance\_count=1,
instance\_type='ml.m4.xlarge'
)
最初,工作流应用 EndpointStep 以托管 API 终端节点的模式部署新模型。通过 update 参数可实现更新已有的 Amazon SageMaker 终端节点,而不是创立新的终端节点。请参阅以下代码:
endpoint\_step = steps.EndpointStep(
'Update Model Endpoint',
endpoint\_name=execution\_input\['EndpointName'\],
endpoint\_config\_name=execution\_input\['ModelName'\],
update=True
)
控制流和关联状态
Step Functions SDK 的 Choice 状态反对基于后面步骤的输入创立分支逻辑。咱们能够通过增加此状态来创立简单的动静工作流。
下文会创立一个步骤,它可依据咱们在 Amazon SageMaker 训练步骤中失去的后果抉择分支。请参阅以下代码:
check\_accuracy\_step = steps.states.Choice(‘Accuracy > 90%’)
向步骤增加分支和分支逻辑。Choice 状态反对多种数据类型和复合布尔表达式,然而在本文中,咱们只须要比拟两个数值。第一个值是设置好的阈值 0.90,第二个是 TrainingStep 中的验证数据集上的模型准确度。训练后果的模型错误率计算形式为(谬误数)/(总数)。因而如果测得的谬误低于 10% (0.10),则示意模型准确度高于 90%。更多信息请参阅 Choice 规定。
增加以下比拟规定:
threshold\_rule = steps.choice\_rule.ChoiceRule.NumericLessThan(variable=lambda\_step.output()\['Payload'\]\['trainingMetrics'\]\[0\]\['Value'\], value=.10)
check\_accuracy\_step.add\_choice(rule=threshold\_rule, next\_step=endpoint\_config\_step)
check\_accuracy\_step.default\_choice(next\_step=fail\_step)
工作流中的 Choice 规定须要设定当条件被满足时要执行的下一个步骤。到目前为止,咱们已创立了多个步骤,但尚未设定他们的执行程序。此时可借助 SDK 以两种不同的形式将步骤关联在一起。
形式一:应用 next () 办法为独自的步骤指定下一个步骤,代码如下:
endpoint\_config\_step.next(endpoint\_step)
形式二:应用 Chain () 办法一次将多个步骤关联在一起,代码如下:
workflow\_definition = steps.Chain(\[
etl\_step,
training\_step,
model\_step,
lambda\_step,
check\_accuracy\_step
\])
工作流创立
在确定好所有步骤的定义及执行程序之后,应用以下代码创立 Step Function:
workflow = Workflow(name='MyInferenceRoutine\_{}'.format(id),
definition=workflow\_definition,
role=workflow\_execution\_role,
execution\_input=execution\_input
)
workflow.create()
创立工作流之后,workflow.render_graph () 将返回工作流的示意图,与咱们在 Step Functions 控制台中看到的相似:
至此,咱们已准备就绪,可随时运行新的部署流程。咱们能够应用 SDK 中的 execute () 办法来手动运行模型,也能够通过自动化的形式执行此工作。
应用 EventBridge 触发器安顿工作流
咱们能够应用 EventBridge 触发器设置工作流的执行打算。下文介绍了如何在 EventBridge 中创立一个规定,以按计划调用 Step Function。更多信息请查阅创立一个由 AWS 资源产生的事件触发的 EventBridge 规定。
请执行以下步骤:
- 在 AWS 治理控制台的服务下,抉择 Amazon EventBridge。
- 抉择规定。
- 抉择创立规定。
- 在名称和形容下,对于名称,输出规定的名称。本文输出的名称为 automate-model-retraining-trigger。
- 对于形容,能够输出步骤的形容,也能够留空。
- 对于定义模式,抉择打算。
- 对于固定匹配为每隔,抉择 1 小时。
- 在抉择事件总线下,抉择 AWS 默认事件总线。
- 抉择启用在选定的事件总线上启用该规定。
- 在抉择指标下,对于指标,抉择 Step Functions 状态机。
- 对于状态机,抉择您的状态机。
- 顺次抉择配置输出、常量(JSON 文本)。
- 以 JSON 文本的模式为工作流输出输出参数。
- 抉择为此特定资源创立新角色。
- 输出角色名称。如果已有角色,则抉择应用现有角色。
- 抉择创立。
总结
本文介绍了实用于 Amazon SageMaker 的 AWS Step Functions Data Science SDK,并展现了应用 Python 创立可重复使用的模型部署工作流的过程。该工作流中蕴含:用于提取和转换数据的 AWS Glue 作业、应用新数据训练机器学习模型的训练步骤、通过 Lambda 查问训练后果的步骤、创立模型构件的步骤、用于定义部署参数的终端节点配置步骤和部署新模型到现有终端节点的步骤。最初,演示了应用 EventBridge 实现定期触发工作流的办法。
如需与此 SDK 相干的其余技术文档和示例手册,请参阅实用于 Amazon SageMaker 的 AWS Step Functions Data Science SDK 布告。