星期五下午五点,你终于赶在上班前搞定了一个简单、繁琐的特色工程策略。这个策略在Amazon SageMaker Studio t3.medium Notebook上曾经开始工作,你想做的是插入这个策略到一个大型实例中,通过程度扩大将其笼罩残余数据集,而后开始周末的Happy hour。

然而……尽管能够间接降级Notebook实例,但只有一敞开电脑,这项作业马上就会进行。怎么办?作业运行期间始终守在电脑前?为什么不间接从Notebook调度作业呢?

Amazon SageMaker提供了一套全托管式解决方案,可用于构建、训练以及部署各种机器学习(ML)模型。在本文中,咱们将演示如何应用Amazon SageMaker Processing Jobs配合开源我的项目Papermill执行Jupyter Notebook。Amazon SageMaker与Amazon CloudWatch、AWS Lambda以及整个AWS栈的联合,向咱们提供了实时和按计划扩大作业所需模块化骨干,比方像特色工程这样的作业。咱们很快乐提供了一款DIY工具箱简化整个流程,应用AWS CloudFormation设置权限,应用Lambda启动作业,并应用Amazon Elastic Container Registry (Amazon ECR)创立自定义执行环境。它还蕴含一套类库与CLI(命令行执行工具),可用于从任意AWS客户端初始Notebook执行,外加一款用于提供无缝化用户体验的Jupyter插件。

截至本文撰稿时,大家曾经能够在Jupyter notebook中编写代码,并一键立刻或按计划将其运行在Amazon SageMaker长期实例上。应用本文提供的工具,大家将能够从任何下列中央执行这个操作:在Shell提示符下、在Amazon SageMaker的JupyterLab中、在本人的另一个JupyterLab环境中,或者在编写的程序中主动实现。咱们也提供了相干示例代码,借此简化应用AWS CloudFormation解决沉重的设置过程,并提供了简便的工具运行和监控整套零碎的执行状况。

对于执行Notebook的更多详细信息,请参见GitHub repo。GitHub上的aws-samples提供了所有示例源代码。上面,将介绍如何应用调度的Notebook执行。

何时应用这套解决方案

这套工具箱特地适宜运行夜间报告类作业。例如,咱们可能须要剖析数据迷信团队当天曾经实现的所有训练工作,进行老本/收益剖析,并生成一份模型被部署到生产环境后行将带来的业务价值报告。这类用例就完满适宜应用调度的Notebook—— 所有图形、表格与图表都将由代码主动生成,像咱们本人逐渐调试Notebook一样,不过当初它们将被主动解决,此外后果被长久保留在Amazon Simple Storage Service (Amazon S3)当中。咱们能够应用昨夜执行后的最新Notebook开始新一天的工作,推动剖析能力的倒退。

或者,构想想纵向扩大特色工程。你曾经实现了for循环来执行全副Pandas转换,接下来须要的是工夫和将其运行在全副20GB数据上的算力。没问题 —— 只须要把Notebook放入工具箱内、运行一个作业、敞开Notebook,而后所有就搞定了。无论以后是否在被动应用Jupyter,代码都会继续运行在调度的实例上。

或者,你所在的数据迷信团队可能依然在本地Notebook或者Amazon SageMaker notebook上训练模型,且尚未采纳Amazon SageMaker长期实例执行训练作业。应用这套工具箱,咱们能够在模型训练期间轻松应用高级计算选项。咱们能够为一个小时的模型训练启动一台p3.xlarge实例,但在全天应用可负担得起的t3.medium实例运行Studio环境。咱们能够通过几行代码轻松将这些资源接入Experiments SDK。尽管齐全反对在p3实例上运行Amazon SageMaker notebook与Amazon SageMaker Studio,然而养成一个仅短期应用最大型实例的习惯是一种节约老本的重要实际。

你可能还有一个装满了对象的S3存储桶,而且须要在每个对象上运行一个残缺的Notebook。这些对象可能是呼叫核心内的电话记录日期,或是社交网络中特定用户的推文流。无论如何,咱们能够应用这个工具箱轻松为这些对象编写for循环,由该工具箱为各个文件调度作业,在其专用实例上运行该作业,并存储实现的Notebook在Amazon S3当中。这些甚至能够是从咱们喜爱的训练环境中加载的模型构件 — 打包推理代码到Notebook当中,而后应用这个工具箱轻松部署。

最初,客户还向咱们反映报告模型的运行性能是对于各利益攸关方的一个重要资产。应用这款工具箱,咱们能够实施起一套人工参加的解决方案,该解决方案能够剖析特色重要性、生成ROC曲线,并评估模型在对最终产品很重要的各类极其状况下是如何体现。咱们还能够构建一款模型分析器,供团队中的所有数据科学家轻松拜访。咱们能够在每一项训练作业实现后触发此模型分析器,并在将剖析值发送给各利益攸关方之后完结整个循环。

在SageMaker中执行调度Notebook的三种形式

要在Amazon SageMaker中执行Notebook,咱们能够应用Lambda函数以配置并运行Amazon SageMaker Processing作业。该函数可间接由用户调用,或者作为指标被增加至Amazon EventBridge规定中以按计划或通过事件响应的形式运行。要运行的Notebook被存储为Amazon S3对象,因而即便咱们不在线,当执行产生时这些Notebook依然能够失常执行。下图展现了这个架构。

接下来,咱们概述了三种不同的装置和应用此性能的办法,这些性能容许咱们以所需形式解决Notebook和调度。

应用AWS API或者间接应用CLI

咱们能够间接应用AWS API以执行并调度Notebook。为简化流程,咱们提供一套CloudFormation模板以配置须要的Lambda函数,同时提供运行Notebook所须要的AWS身份与拜访治理(AWS Identity and Access Management,简称IAM)角色及策略。咱们还提供相干脚本,用于构建及定制在运行Notebook时Amazon SageMaker Processing作业应用的Docker容器镜像。

在对CloudFormation模板进行实例化并实现容器镜像创立之后,能够应用以下代码运行一个Notebook:

$ aws lambda invoke --function-name RunNotebook  --payload '{"input_path": "s3://mybucket/mynotebook.ipynb",  "parameters": {"p": 0.75}}' result.json

要创立调度,请输出以下代码,请留神替换Region(区域)与账户编号局部的arn,并替换input_path指向本人的S3存储桶。

$ aws events put-rule --name "RunNotebook-test" --schedule "cron(15 1 * * ? *)"$ aws lambda add-permission --statement-id EB-RunNotebook-test  --action lambda:InvokeFunction  --function-name RunNotebook  --principal events.amazonaws.com  --source-arn arn:aws:events:us-east-1:123456789:rule/RunNotebook-test$ aws events put-targets --rule RunNotebook-test  --targets '[{"Id": "Default",  "Arn": "arn:aws:lambda:us-east-1:123456789:function:RunNotebook",  "Input": "{ "input_path": "s3://mybucket/mynotebook.ipynb",  "parameters": {"p": 0.75}}"}]‘

通过这种形式,即可将Notebook挪动至Amazon S3,监控Amazon SageMaker Processing作业,并从Amazon S3提取输入的Notebook。

如果是经验丰富的AWS用户,心愿在不波及额定依赖项的前提下构建解决方案,那么这套计划能够说是一套了不起的解决方案。咱们甚至能够批改本人编写的Lambda函数或者Papermill执行容器,来满足更多具体需要。

对于应用AWS API进行调度Notebook的更多详细信息,请参阅GitHub repo上的残缺配置阐明。

应用便捷工具箱简化整个流程

为了进一步简化调度Notebook(尤其当咱们不是AWS专家时),AWS还开发出一套便捷的工具箱,封装AWS工具成为CLI和Python库,为咱们提供更天然的运行和调度Notebook的接口。这款工具箱让咱们能够通过AWS CodeBuild构建自定义执行环境,而不用应用Docker,同时治理并监控Amazon S3交互与作业。

在设置运行实现后,应用以下代码执行Notebook:

$ run-notebook run mynotebook.ipynb -p p=0.5 -p n=200

应用以下代码进行调度Notebook:

$ run-notebook schedule --at "cron(15 1 * * ? *)" --name nightly weather.ipynb -p "name=Boston, MA"

这款便捷工具箱还蕴含用于监控作业及查看以后调度的工具,具体参见以下代码:

$ run-notebook list-runsDate Rule Notebook Parameters Status Job2020-06-15 15:31:40 fraud-analysis.ipynb name=Tom Completed papermill-fraud-analysis-2020-06-15-22-31-392020-06-15 01:00:08 DailyForecastSeattle DailyForecast.ipynb place=Seattle, WA Completed papermill-DailyForecast-2020-06-15-08-00-082020-06-15 01:00:03 DailyForecastNewYork DailyForecast.ipynb place=New York, NY Completed papermill-DailyForecast-2020-06-15-08-00-022020-06-12 22:34:06 powers.ipynb p=0.5 Completed papermill-powers-2020-06-13-05-34-05 n=20$

对于这款便捷工具箱的更多详细信息,请参阅GitHub repo。

应用GUI通过JupyterLab间接执行Notebook

如果更偏好交互体验,便捷工具箱还提供JupyterLab扩大,可供大家在本地JupyterLab、Amazon SageMaker Studio或Amazon SageMaker notebook实例当中应用。

为Amazon SageMaker Studio用户设置Jupyter扩大后,会看到新的Notebook执行侧边栏(火箭飞船图标)。此边栏让咱们执行或调度正在查看的Notebook。咱们能够应用默认设置创立的notebook-runner容器,或者构建的其余容器。输出这些作业用到的和实例须要的执行角色的ARN,就筹备好走下一步了。

在抉择Run Now后,Lambda函数会选取Notebook并将其运行在一个Amazon SageMaker Processing作业之上。这时,咱们能够抉择Runs以查看该作业的状态,详见以下截屏。

作业实现后,实现的Notebook将存储在Amazon S3当中。请留神,这意味着之前的运行仍将长久化,所以咱们能够轻松复原它们。

最初,抉择View Output与Import Notebook导入输入Notebook。如果没有导入Notebook,则其永远不会被复制至本地目录。这样设计很棒,当咱们想查看什么在产生时,然而不想生成太多额定的Notebook时,就能够这样做。

对于设置JupyterLab扩大以及应用GUI运行并监控Notebook的更多阐明信息,请参阅GitHub repo。
总结

本文探讨了如何将Amazon SageMaker与AWS云的模块化性能联合起来,借此为数据科学家及机器学习工程师们在长期实例上提供无缝化的Notebook运行体验。咱们还公布了一款开源工具箱以进一步简化整个流程,其中蕴含一个CLI、便捷工具箱以及Jupyter性能部件。

以此为根底,咱们探讨了多种用例,从运行夜间报告到扩大特色工程,再到对最新数据集进行模型剖析等。咱们也分享了运行这款工具箱的多种示例形式。欢送浏览GitHub上的疾速入门教程,并在GitHub repo上查看更多示例。