科技以懒人为本!

为了省事,为了提高效率,为了节约工夫,为了降低成本,咱们会千方百计地通过自动化形式来帮忙本人「偷懒」。那么当你在从事与机器学习(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规定。

请执行以下步骤:

  1. 在AWS治理控制台的服务下,抉择Amazon EventBridge。
  2. 抉择规定。
  3. 抉择创立规定。
  4. 在名称和形容下,对于名称,输出规定的名称。本文输出的名称为automate-model-retraining-trigger。
  5. 对于形容,能够输出步骤的形容,也能够留空。
  6. 对于定义模式,抉择打算。

  1. 对于固定匹配为每隔,抉择1小时。
  2. 在抉择事件总线下,抉择AWS默认事件总线。
  3. 抉择启用在选定的事件总线上启用该规定。

  1. 在抉择指标下,对于指标,抉择Step Functions状态机。
  2. 对于状态机,抉择您的状态机。

  1. 顺次抉择配置输出、常量(JSON文本)。
  2. 以JSON文本的模式为工作流输出输出参数。
  3. 抉择为此特定资源创立新角色。
  4. 输出角色名称。如果已有角色,则抉择应用现有角色。
  5. 抉择创立。

总结

本文介绍了实用于Amazon SageMaker的AWS Step Functions Data Science SDK,并展现了应用Python创立可重复使用的模型部署工作流的过程。该工作流中蕴含:用于提取和转换数据的AWS Glue作业、应用新数据训练机器学习模型的训练步骤、通过Lambda查问训练后果的步骤、创立模型构件的步骤、用于定义部署参数的终端节点配置步骤和部署新模型到现有终端节点的步骤。最初,演示了应用EventBridge实现定期触发工作流的办法。

如需与此SDK相干的其余技术文档和示例手册,请参阅实用于Amazon SageMaker的AWS Step Functions Data Science SDK布告。