星期五下午五点,你终于赶在下班前搞定了一个复杂、繁琐的特征工程策略。这个策略在Amazon SageMaker Studio t3.medium Notebook上已经开始工做,你想作的是插入这个策略到一个大型实例中,经过水平扩展将其覆盖剩余数据集,而后开始周末的Happy hour。git
然而……虽然能够直接升级Notebook实例,但只要一关闭电脑,这项做业立刻就会中止。怎么办?做业运行期间一直守在电脑前?为何不直接从Notebook调度做业呢?github
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插件。json
截至本文撰稿时,你们已经能够在Jupyter notebook中编写代码,并一键当即或按计划将其运行在Amazon SageMaker临时实例上。使用本文提供的工具,你们将能够从任何下列地方执行这个操做:在Shell提示符下、在Amazon SageMaker的JupyterLab中、在本身的另外一个JupyterLab环境中,或者在编写的程序中自动完成。咱们也提供了相关示例代码,借此简化使用AWS CloudFormation处理繁重的设置过程,并提供了简便的工具运行和监控整套系统的执行状况。网络
关于执行Notebook的更多详细信息,请参见GitHub repo。GitHub上的aws-samples提供了全部示例源代码。下面,将介绍如何使用调度的Notebook执行。架构
什么时候使用这套解决方案app
这套工具箱特别适合运行夜间报告类做业。例如,咱们可能须要分析数据科学团队当天已经完成的全部训练工做,进行成本/收益分析,并生成一份模型被部署到生产环境后即将带来的业务价值报告。这类用例就完美适合使用调度的Notebook—— 全部图形、表格与图表都将由代码自动生成,像咱们本身逐步调试Notebook同样,不过如今它们将被自动处理,此外结果被持久保存在Amazon Simple Storage Service (Amazon S3)当中。咱们可使用昨夜执行后的最新Notebook开始新一天的工做,推进分析能力的发展。机器学习
或者,设想一想纵向扩展特征工程。你已经完成了for循环来执行所有Pandas转换,接下来须要的是时间和将其运行在所有20GB数据上的算力。没问题 —— 只须要把Notebook放入工具箱内、运行一个做业、关闭Notebook,而后一切就搞定了。不管当前是否在主动使用Jupyter,代码都会持续运行在调度的实例上。ide
或许,你所在的数据科学团队可能仍然在本地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-runs Date Rule Notebook Parameters Status Job 2020-06-15 15:31:40 fraud-analysis.ipynb name=Tom Completed papermill-fraud-analysis-2020-06-15-22-31-39 2020-06-15 01:00:08 DailyForecastSeattle DailyForecast.ipynb place=Seattle, WA Completed papermill-DailyForecast-2020-06-15-08-00-08 2020-06-15 01:00:03 DailyForecastNewYork DailyForecast.ipynb place=New York, NY Completed papermill-DailyForecast-2020-06-15-08-00-02 2020-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上查看更多示例。