天天看點

使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流

使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流
使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流

市場營銷是金融領域的一個重要方向,在機構發展新客戶的過程中,不容忽視老使用者的流失情況。假如獲得一個新客戶的成本是保留一個老客戶的成本的5倍,那麼将其客戶流失率降低5%,其利潤就可能增加25%以上。

在本文中,我們将利用無伺服器架構工作流,用于資料分析,模型部署,批量推理,進而實作提前發現可能的流失客戶,及時維護避免流失。

使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流

???? 想要了解更多亞馬遜雲科技最新技術釋出和實踐創新,敬請關注在上海、北京、深圳三地舉辦的2021亞馬遜雲科技中國峰會!點選圖檔報名吧~

方案概述

本文将以一個常見的使用案例,通過 Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流,過程如下:

1.使用Amazon Glue進行ETL工作,生成樣本資料集

2.使用Amazon SageMaker部署本地訓練好的模型,用于機器學習推理

下圖示範了上述Amazon Step Functions無伺服器架構工作流:

使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流

後續操作使用了下列亞馬遜雲科技服務:

  • Amazon Step Functions

    https://www.amazonaws.cn/step-functions/

是由多個離散步驟組成的狀态機,其中每個步驟都可以執行任務、作出選擇、啟動并行執行或管理逾時。其中一個步驟的輸出作為下一個步驟的輸入,并支援将錯誤處理嵌入到工作流中。

在Amazon Step Functions Data Science SDK

誕生前,隻能使用基于JSON的Amazon States Language定義Amazon Step Functions;但現在可以借助此SDK使用Python代碼輕松建立、執行和可視化Amazon Step Functions工作流。

  • Amazon Step Functions Data Science SDK

    https://docs.amazonaws.cn/zh_cn/step-functions/latest/dg/concepts-python-sdk.html

本文是以Amazon Step Functions Data Science SDK為主線,讨論如何建立Amazon Step Functions步驟、使用參數、內建服務特定的功能以及将這些步驟關聯在一起以建立和可視化工作流。

Amazon SageMaker可為開發人員和資料科學家提供建構、訓練和部署不同類型機器學習模型時所需的工具。

  • Amazon SageMaker

    https://www.amazonaws.cn/sagemaker/

Amazon Glue是一項完全托管的提取、轉換和加載(ETL)服務,在分布式Apache Spark環境中運作,能夠充分利用Spark而無需管理基礎設施。将Glue指向受支援的資料存儲,它将會生成代碼以從指定的存儲中提取資料并加載到目标存儲中。

  • Amazon Glue

    https://www.amazonaws.cn/glue/

本文使用機器學習方法進行客戶流失預測,采用模拟的資料(近期消費記錄,線上時長等)為示例資料集,首先使用Amazon Glue進行資料處理,再使用Amazon SageMaker進行模型部署,并進行批量轉換。

該場景的使用的算法為XGBoost (eXtreme Gradient Boosting),它是一種監督式學習算法, 嘗試将一組較簡單且較弱模型的一系列估計值結合在一起,進而準确地預測目标變量,可以用來處理回歸、分類(二進制和多類)和排名問題。利用XGBoost預測客戶是否會流失,以及早進行幹預。

1.建立Jupyter Notebook

1.1 建立Amazon SageMaker 筆記本執行個體,部署模型

使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流

1.2 建立一個筆記本執行個體,類型選擇t2.medium。選擇或者建立一個IAM角色(IAM Role)

1.3 其他部分選擇預設選項,點選建立(Create)

使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流

1.4 在筆記本建立完成後,打開Jupyter,選擇New,建立一個ipynb,選擇核心為conda_python3

2. 使用Amazon Step Functions Data Science SDK建立和管理工作流

2.1 安裝和加載所有必需的子產品

使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流

2.2 按照代碼中的注釋要求,替換使用您自己的 S3 bucket/prefix

後面需要将資料上傳到該項目的Amazon S3存儲桶,用作訓練模型的資料和Model Artifact的存儲

使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流

2.3 按照代碼中的注釋要求,替換使用您自己的 S3 bucket/prefix

2.4 建立一個Role附加到Amazon Step Functions

關聯的政策如下所示,可以根據實際使用的服務調整政策,并将政策附加到建立的Role

使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流

2.5 設定執行的Role

為確定Amazon SageMaker可以順利運作相關的任務,這裡擷取筆記本執行個體的執行角色(建立Amazon SageMaker 筆記本執行個體的時候已經建立/選擇的角色)。同理Amazon Step Functions順利運作的前提也是要有相應的執行角色,可參考上圖中角色的關聯資源。

使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流

3. 驗證模型

3.1 安裝和加載所有必需的子產品

因為需要使用joblib來加載模型,需要使用sklearn版本為0.22.1。

使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流
使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流

3.2 讀取樣本資料

樣本資料上傳到Notebook後,可以看到共有1000行74列資料(列沒有顯示完),包括主鍵(cust_id)和使用者按照時間次元統計的交易金額、線上換手率金額、線上贖回筆數等資訊。

使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流

3.3 加載模型,傳回預測标簽

利用邏輯回歸進行客戶流失率模組化,使用sklearn拆分測試集和訓練集,提供回歸的xgboost模型。

本文中的模型已在本地訓練好,在Notebook中使用joblib加載模型。

使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流

4. 準備環境工作(執行一次)

4.1 打包容器&推送容器到ECR

使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流

編輯Dockerfile,準備鏡像。

這個過程可能需要進行很多次,因為不可避免地要修改Dockerfile或者某類程式以使得它們可以正常工作。

建議使用官方鏡像檔案,在此基礎上添加元件,國内鏡像倉庫位址參考如下連結:

https://docs.amazonaws.cn/sagemaker/latest/dg/sagemaker-algo-docker-registry-paths.html

在cn-north-1下使用sklearn的訓練鏡像和推理鏡像的路徑為:

450853457545.dkr.ecr.cn-north-1.amazonaws.com.cn

使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流
使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流

在拉取公共鏡像之前,需要做基本身份驗證

使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流

推送鏡像到自有ECR鏡像倉庫

使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流

4.2 上傳模型檔案到S3

我們需要将本地已經訓練好的模型放到之前建立的s3存儲桶,prefix字首是對象名稱前的完整路徑。

比如一個對象model.tar.gz,

存儲路徑BucketName/Project/Demo/model.tar.gz,

則字首是BucketName/Project/Demo/

使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流
使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流

4.3 推理腳本

使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流

4.3.1 打包代碼并上傳到s3

使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流

4.4 建立Amazon SageMaker模型對象

下圖中的image_uri為4.1步驟中指定容器鏡像位址,model_uri為4.2步驟中指定模型的s3路徑,transform_script為4.3步驟中建立的推理腳本,code_uri為4.3.1步驟中上傳在s3的代碼路徑。

使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流

5. 批量轉換(模型推理)

5.1 使用Amazon SageMaker Batch Transform

要獲得整個資料集的推理結果,可以使用批處理變換。使用批處理轉換,可以使用訓練好的模型和資料集建立批處理轉換作業,這些資料必須存儲在Amazon S3中。

  • Amazon SageMaker Batch Transform

    https://docs.amazonaws.cn/sagemaker/latest/dg/batch-transform.html

Amazon SageMaker将推理儲存在建立批處理轉換作業時指定的S3存儲桶中。

批量轉換管理擷取推理所需的所有計算資源,并在批處理轉換作業完成後将其删除。

5.1.1 輸出結果整合輸入id

使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流

指定model_name,執行個體的數量和機型

使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流

6. 使用Data Science SDK建立Amazon Step Functions Step

6.1 建立Glue Step,指定glue job name

下圖中名為glue-demo-job-0223的Glue job是已經建立好的作業,其目的是定期生成需要推理的樣本資料。

使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流

6.2 建立Batch Transform Step,指定job name和model_name

使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流

6.3 串聯上述的步驟

導入fields子產品,更改attrs屬性,本文中需要更改glue和Amazon SageMaker對應的Step

(1)把resource: “arn:aws:states:::glue:startJobRun.sync”

替換為resource: “arn:aws-cn:states:::glue:startJobRun.sync”

(2)把resource: “arn:aws:states:::sagemaker:createTransformJob.sync”

替換為resource:”arn:aws-cn:states:::sagemaker:createTransformJob.sync”

使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流
使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流

7. 運作上述workflow,指定workflow name

7.1 操作步驟

建立名為MyInferenceRoutine01的工作流

使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流

生成圖示

使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流

建立和執行workflow,可以看到圖示不同的顔色代表不同的狀态

使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流
使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流

可以列出失敗的events,正在執行的workflow和執行成功的workflow

使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流
使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流
使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流

正常執行完成後的圖示:

使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流

7.2 生成的檔案

最後在s3對應的檔案夾下,可以看到生成的推理檔案:

使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流

客戶ID和對應的分數,可以看到,分數越低的客戶流失的可能性會更高。

使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流

8. 總結

本文讨論的是使用Amazon Step Functions Data Science SDK,從資料ETL,到模型部署,再到批量推理,建立一個基于無伺服器架構的工作流。對于業務端的資料科學家來講,這些步驟都可以在Notebook中完成,而且可以通過Amazon Step Functions監控每個任務的運作狀态和日志記錄,最終實作整個流程的自動化,減少資料科學家的人工重複工作,提高生産開發效率。本文涉及的示例代碼下載下傳連結:

https://github.com/hlmiao/sagemaker/tree/main/sklearn-xgboost

參考資料

[1] amazon-step-functions-data-science-sdk-python

https://github.com/aws/aws-step-functions-data-science-sdk-python

[2] Amazon Step Functions Data Science SDK – Hello World

https://sagemaker-examples.readthedocs.io/en/latest/step-functions-data-science-sdk/hello_world_workflow/hello_world_workflow.html#Create-steps-for-your-workflow

[3] Build a machine learning workflow using Step Functions and SageMaker

https://sagemaker-examples.readthedocs.io/en/latest/step-functions-data-science-sdk/machine_learning_workflow_abalone/machine_learning_workflow_abalone.html#Build-a-machine-learning-workflow-using-Step-Functions-and-SageMaker

[4] Using the SageMaker Python SDK

https://sagemaker.readthedocs.io/en/stable/overview.html#id3

本篇作者

使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流

缪翰林

亞馬遜雲科技解決方案架構師

負責基于亞馬遜雲科技的方案咨詢,設計和架構評估。在運維,DevOps方面有豐富的經驗,目前側重于大資料領域的研究。

使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流

王世帥

亞馬遜雲科技機器學習産品技術專家

負責基于亞馬遜雲科技的機器學習方案的咨詢與設計,對于機器學習應用等有濃厚的興趣和熱情,參與了多個客戶的機器學習項目。

使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流
使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流

聽說,點完下面4個按鈕

就不會碰到bug了!

使用Amazon Step Functions Data Science SDK建立基于無伺服器架構的工作流