「工具人」何須徹夜守候,SageMaker 幫你靈活調度 Notebook

image

星期五下午五點,你終於趕在下班前搞定了一個複雜、繁瑣的特徵工程策略。這個策略在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 CloudWatchAWS 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仍然能夠正常執行。下圖展現了這個架構。
image

接下來,咱們概述了三種不一樣的安裝和使用此功能的方法,這些功能容許咱們以所需方式處理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實例當中使用。
image

爲Amazon SageMaker Studio用戶設置Jupyter擴展後,會看到新的Notebook執行側邊欄(火箭飛船圖標)。此邊欄讓咱們執行或調度正在查看的Notebook。咱們可使用默認設置建立的notebook-runner容器,或者構建的其餘容器。輸入這些做業用到的和實例須要的執行角色的ARN,就準備好走下一步了。

在選擇Run Now後,Lambda函數會選取Notebook並將其運行在一個Amazon SageMaker Processing做業之上。這時,咱們能夠選擇Runs以查看該做業的狀態,詳見如下截屏。
image

做業完成後,完成的Notebook將存儲在Amazon S3當中。請注意,這意味着以前的運行仍將持久化,因此咱們能夠輕鬆恢復它們。

最後,選擇View Output與Import Notebook導入輸出Notebook。若是沒有導入Notebook,則其永遠不會被複制至本地目錄。這樣設計很棒,當咱們想查看什麼在發生時,可是不想生成太多額外的Notebook時,就能夠這樣作。
image

關於設置JupyterLab擴展以及使用GUI運行並監控Notebook的更多說明信息,請參閱GitHub repo
總結

本文討論瞭如何將Amazon SageMaker與AWS雲的模塊化功能結合起來,藉此爲數據科學家及機器學習工程師們在臨時實例上提供無縫化的Notebook運行體驗。咱們還發布了一款開源工具箱以進一步簡化整個流程,其中包含一個CLI、便捷工具箱以及Jupyter功能部件。

以此爲基礎,咱們討論了多種用例,從運行夜間報告到擴展特徵工程,再到對最新數據集進行模型分析等。咱們也分享了運行這款工具箱的多種示例方式。歡迎瀏覽GitHub上的快速入門教程,並在GitHub repo上查看更多示例。

image

相關文章
相關標籤/搜索