【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

使用适用于 Amazon SageMaker 的 AWS Step Functions Data Science SDK 自动执行模型重新训练和部署

  • 2020-04-07
  • 本文字数:4599 字

    阅读完需:约 15 分钟

使用适用于 Amazon SageMaker 的 AWS Step Functions Data Science SDK 自动执行模型重新训练和部署

随着机器学习 (ML) 在公司核心业务中占据的份量越来越重,缩短从模型创建到部署的时间就变得越来越重要。2019 年 11 月,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 Functions 来处理整个工作流的触发、协调和状态管理。在 Data Science SDK 诞生之前,您只能使用基于 JSON 的 Amazon States Language 定义 Step Functions。现在,您可以借助此 SDK 使用 Python 代码轻松创建、执行和可视化 Step Functions。


本文提供了此 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 中的 ModelStepEndpointConfigStep 创建一个模型对象和部署配置。请参阅以下代码:


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. 对于定义模式,选择计划



7. 对于固定匹配为每隔,选择 1 小时


8. 在选择事件总线下,选择 AWS 默认事件总线。


9. 选择启用 在选定的事件总线上启用该规则



10. 在选择目标下,对于目标,选择 Step Functions 状态机


11. 对于状态机,选择您的状态机。



12. 依次选择配置输入常量(JSON 文本)


13. 以 JSON 文本的形式为工作流输入输入参数。


14. 选择为此特定资源创建新角色


15. 输入角色名称。如果已有角色,则选择使用现有角色


16. 选择创建


总结

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


如需与此 SDK 相关的其他技术文档和示例手册,请参阅适用于 Amazon SageMaker 的 AWS Step Functions Data Science SDK 公告


本文转载自 AWS 技术博客。


原文链接:https://amazonaws-china.com/cn/blogs/china/automating-model-retraining-and-deployment-using-the-aws-step-functions-data-science-sdk-for-amazon-sagemaker/


2020-04-07 17:17538

评论

发布
暂无评论
发现更多内容

[C++总结记录]函数相关细节注意点

图解AI

c++

[C++总结记录]构造函数与析构函数注意点

图解AI

RUOYI 框架教程 10 |若依Excell数据导出小数处理,你会么!

Java_若依框架教程

Java 技术 Ruoyi 框架 若依

【遇见Doris】Apache Doris在一点资讯自媒体平台的应用

ApacheDoris

【遇见Doris】

【遇见Doris】Apache Doris Parquet文件读取的设计与实现

ApacheDoris

【遇见Doris】

RUOYI 框架教程 4 | 若依操作小技巧,快看看你学"废"了吗!(第二篇~)

Java_若依框架教程

Java 技术 Ruoyi 框架 若依

RUOYI框架教程1 |小白都能学会的3分钟搭建框架教程

Java_若依框架教程

Java 技术 Ruoyi 框架 若依

RUOYI 框架教程 2 |小白都能学会的 3 分钟搭建框架教程

Java_若依框架教程

Java 技术 Ruoyi 框架 若依

【遇见Doris】Spark Doris Sink的设计和实现

ApacheDoris

【遇见Doris】

【遇见Doris】Apache Doris 在百度商业大规模微服务全链路监控的实践

ApacheDoris

【遇见Doris】

【遇见Doris】Doris核心功能介绍——数据模型和物化视图

ApacheDoris

RUOYI 框架教程 11 | 若依主页面调用类目表,写入主表相关信息,居然这么简单!(第九篇~)

Java_若依框架教程

Java 技术 Ruoyi 框架 若依

有趣的技术知识 2 | 来了,阿里云网盘公测!

Java_若依框架教程

有趣的技术知识

RUOYI 框架教程 5 |若依Excell导入这么做,0经验小白都能写!

Java_若依框架教程

Java 技术 Ruoyi 框架 若依

RUOYI 框架教程 6 |若依日期操作居然这么多写法,你敢信么!

Java_若依框架教程

Java Ruoyi 教程 框架 若依

RUOYI 框架教程 7 |若依js设置高度及自适应居然这么简单,你敢信么!

Java_若依框架教程

Java 技术 Ruoyi 框架 若依

[C++总结记录]对象内存占用情况及this指针注意点

图解AI

c++

RUOYI 框架教程 8 | 若依给页面加水印这么简单,你见过么!

Java_若依框架教程

Java 技术 Ruoyi 框架 若依

[C++总结记录]struct与class注意点

图解AI

c++

[C++总结记录]构造函数与析构函数调用时机

图解AI

c++

[C++总结记录]构造函数初始化注意点

图解AI

c++

【遇见Doris】Doris基于Hive表的全局字典设计与实现

ApacheDoris

【遇见Doris】

【实践分享】ProxySQL实现Doris FE高可用

ApacheDoris

有趣的技术知识1 | 为什么这些网站电脑打不开,手机却可以访问?(附智能追剧解决方案)

Java_若依框架教程

有趣的技术知识

【遇见Doris】寒冷冬日的一次温暖相聚 · Doris开发者沙龙

ApacheDoris

【遇见Doris】

【遇见Doris】 Apache Doris 基于 Bitmap的精确去重和用户行为分析

ApacheDoris

【遇见Doris】

RUOYI 框架教程 3 | 操作小技巧,快看看你掌握了多少!

Java_若依框架教程

Java 技术 Ruoyi 框架 若依

【遇见Doris】Apache Doris在京东双十一大促中的实践

ApacheDoris

【遇见Doirs】

【Doris全面解析】存储层设计介绍1——存储结构设计解析

ApacheDoris

【Doris全面解析】存储层设计介绍2——写入流程、删除流程分析

ApacheDoris

RUOYI 框架教程 9|若依数据权限这样控制到个人,你是这么用的么!

Java_若依框架教程

Java 技术 Ruoyi 框架 若依

使用适用于 Amazon SageMaker 的 AWS Step Functions Data Science SDK 自动执行模型重新训练和部署_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章