星期五下午五点,你终于赶在上班前搞定了一个简单、繁琐的特色工程策略。这个策略在 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-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 上查看更多示例。