Kubernetes 上的機器學習推理,能夠經過這種方式進一步加強

專屬圖1.png

建立一個可靠、高效的機器學習推理服務須要作不少的投入。到底多麻煩?以一個基於 XGBoost 模型的服務來講:html

  • 開發人員須要建立一個完善的應用程序,例如經過 Flask 來加載模型,而後運行終端節點。
  • 爲了建立這個應用程序,開發人員須要考慮隊列管理、無端障部署以及從新加載新訓練的模型等事宜。
  • 應用開發好後被打包成容器鏡像,而後推送到鏡像倉庫。Kubernetes 從鏡像倉庫拉取該鏡像在集羣上進行部署,部署好後才能夠對外提供服務。
  • 這些步驟須要數據科學家從事與提升模型準確性無關的任務,或引進DevOps工程師來作這些工做。
  • 這些過程加到開發計劃中,必然會須要更多的時間進行服務迭代。

AWS 最近發佈了適用於 Kubernetes 的 Amazon SageMaker Operator,藉此,咱們能夠用 SageMaker 託管的終端節點加強現有 Kubernetes 集羣。藉助 SageMaker Operator,開發人員只須要編寫 yaml 文件來指定所保存模型的 S3 存儲位置,而實時預測經過安全的終端節點便可使用。從新配置終端節點與更新yaml文件同樣簡單。git

除了使用簡單外,該服務還具備如下特徵:github

  • 多模型終端節點 – 託管幾十個或更多模型可能會給配置帶來困難,而且會致使不少機器以低利用率運行。多模型終端節點經過動態加載用於服務的模型構件來設置一個實例;
  • 彈性推理 – 在拆分開的 GPU 上運行較小的工做負載,能夠以較低的成本部署該 GPU;
  • 高利用率和動態 Auto Scaling – 終端節點能夠以100%的利用率運行,並基於咱們定義的自定義指標(如每秒鐘的調用數量)來添加副本。或者能夠按預約義的客戶端性能指標配置自動擴展;
  • 可用區轉移 – 若是發生中斷,Amazon SageMaker 會將終端節點自動移動到 VPC 內的另外一個可用區;
  • A/B 測試– 設置多個模型,並導向與單個終端節點上設置的量成比例的流量;
  • 安全性 – 終端節點使用HTTPS建立,可配置爲在私有 VPC(沒有互聯網出口)中運行並經過 AWS PrivateLink 訪問;
  • 合規性準備 – Amazon SageMaker 已通過認證,符合 HIPAA、PCI DSS 和 SOC (1, 2, 3)規則和法規。

AWS 爲 Kubernetes 開發的 SageMaker Operator 將以上這些特性打包到一塊兒。SageMaker Operator 大大縮短模型到應用的時間,並減小建立和維護生產環境的人力。這可使單獨使用 EKS 或 EC2 的總擁有成本降低90%。api

本文演示如何設置適用於 Kubernetes 的 Amazon SageMaker Operator,以徹底從 kubectl 爲預先訓練的 XGBoost 模型建立和更新終端節點。該解決方案包含如下步驟:安全

  • 建立 IAM Amazon SageMaker 角色,提供服務模型所需的 Amazon SageMaker 權限
  • 準備 YAML 文件,以將模型部署到 Amazon SageMaker
  • 將模型部署到 Amazon SageMaker
  • 查詢終端節點以獲取預測
  • 對部署的模型執行最終的一致性更新

先決條件

本文假設符合如下先決條件:bash

  • 一個 Kubernetes 集羣
  • 集羣上已安裝 Amazon SageMaker Operator
  • 一個能夠部署的 XGBoost 模型

有關將 Operator 安裝到 Amazon EKS 集羣上的信息,請參閱現已推出適用於 Kubernetes 的 Amazon SageMaker Operator。咱們能夠自帶 XGBoost 模型,但本教程使用前面所述文中的現有模型。app

建立一個 Amazon SageMaker 執行角色

Amazon SageMaker 須要一個 IAM 角色,它能夠承擔該角色來服務您的模型。若是尚未該角色,請使用下面的 bash 代碼建立一個:機器學習

export assume_role_policy_document='{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Principal": {
      "Service": "sagemaker.amazonaws.com"
    },
    "Action": "sts:AssumeRole"
  }]
}'
aws iam create-role --role-name <execution role name> \
    --assume-role-policy-document \
    "$assume_role_policy_document"
aws iam attach-role-policy --role-name <execution role name> \
    --policy-arn \
    arn:aws:iam::aws:policy/AmazonSageMakerFullAccess

將 <execution role name> 替換爲適用的角色名稱。這將建立一個 IAM 角色,Amazon SageMaker 可使用該角色來服務咱們的模型。工具

準備託管部署

Operator 提供名爲 HostingDeployment 的自定義資源定義(CRD)。咱們可使用 HostingDeployment 在 Amazon SageMaker 託管上配置模型部署。性能

要準備託管部署,請使用如下內容建立名爲 hosting.yaml 的文件:

apiVersion: sagemaker.aws.amazon.com/v1
kind: HostingDeployment
metadata:
  name: hosting-deployment
spec:
  region: us-east-2
  productionVariants:
    - variantName: AllTraffic
      modelName: xgboost-model
      initialInstanceCount: 1
      instanceType: ml.r5.large
      initialVariantWeight: 1
  models:
    - name: xgboost-model
      executionRoleArn: SAGEMAKER_EXECUTION_ROLE_ARN
      containers:
        - containerHostname: xgboost
          modelDataUrl: s3://BUCKET_NAME/model.tar.gz
          image: 825641698319.dkr.ecr.us-east-2.amazonaws.com/xgboost:latest

將 SAGEMAKER_EXECUTION_ROLE_ARN 替換爲在上一步中建立的執行角色的 ARN。將 BUCKET_NAME 替換爲包含模型的存儲桶。
確保存儲桶區域 HostingDeployment 區域和映像 ECR 區域一致。

將模型部署到 Amazon SageMaker

隨後能夠經過運行 kubectl apply -f hosting.yaml 來啓動部署。請參閱如下代碼:

$ kubectl apply -f hosting.yaml
hostingdeployment.sagemaker.aws.amazon.com/hosting-deployment created

咱們可使用 kubectl get hostingdeployments 跟蹤部署狀態。請參閱如下代碼:

$ kubectl get hostingdeployments
NAME                 STATUS     SAGEMAKER-ENDPOINT-NAME
hosting-deployment   Creating   hosting-deployment-38ecac47487611eaa81606fc3390e6ba

模型終端節點最多可能須要十五分鐘才能部署好。咱們可使用如下命令查看狀態。終端節點達到 InService 狀態後即可以當即用於查詢。

$ kubectl get hostingdeployments
NAME                 STATUS      SAGEMAKER-ENDPOINT-NAME
hosting-deployment   InService   hosting-deployment-38ecac47487611eaa81606fc3390e6ba

查詢終端節點

終端節點投入使用後,能夠測試它是否能與如下示例代碼結合使用:

$ aws sagemaker-runtime invoke-endpoint \
  --region us-east-2 \
  --endpoint-name SAGEMAKER-ENDPOINT-NAME \
  --body $(seq 784 | xargs echo | sed 's/ /,/g') \
  >(cat) \
  --content-type text/csv > /dev/null

bash 命令使用 AWS CLI 與 HTTPS 終端節點鏈接。咱們建立的模型基於 MNIST 位數據集,預測工具會讀取圖像中的數字。當進行此調用時,它會以 CSV 格式發送包含784項特徵的推理負載,這些特徵表明圖像中的像素。咱們將在負載中看到模型所認爲的預測數字。請參閱如下代碼:

$ aws sagemaker-runtime invoke-endpoint \
  --region us-east-2 \
  --endpoint-name hosting-deployment-38ecac47487611eaa81606fc3390e6ba \
  --body $(seq 784 | xargs echo | sed 's/ /,/g') \
  >(cat) \
  --content-type text/csv > /dev/null
8.0

此代碼確認終端節點已啓動並在運行。

最終一致的更新

部署好模型後,咱們能夠對 Kubernetes YAML 進行更改,SageMaker Operator 將更新終端節點。這些更新將以最終一致的方式傳播到 Amazon SageMaker。這樣一來,咱們即可以以聲明式的方式配置終端節點,並讓 SageMaker Operator 處理細節。

爲證實這一點,咱們能夠將模型的實例類型從 ml.r5.large 更改成 ml.c5.2xlarge。請執行如下步驟:

  1. 將 hosting.yaml 中的實例類型修改成 ml.c5.2xlarge。請參閱如下代碼:
apiVersion: sagemaker.aws.amazon.com/v1
kind: HostingDeployment
metadata:
  name: hosting-deployment
spec:
  region: us-east-2
  productionVariants:
    - variantName: AllTraffic
      modelName: xgboost-model
      initialInstanceCount: 1
      instanceType: ml.c5.2xlarge
      initialVariantWeight: 1
  models:
    - name: xgboost-model
      executionRoleArn: SAGEMAKER_EXECUTION_ROLE_ARN
      containers:
        - containerHostname: xgboost
          modelDataUrl: s3://BUCKET_NAME/model.tar.gz
          image: 825641698319.dkr.ecr.us-east-2.amazonaws.com/xgboost:latest
  1. 將更改應用至 Kubernetes 集羣。請參閱如下代碼:
$ kubectl apply -f hosting.yaml
hostingdeployment.sagemaker.aws.amazon.com/hosting-deployment configured
  1. 獲取託管部署的狀態。該狀態將顯示爲正在更新,而後在準備好之後更改成 InService。請參閱如下代碼:
$ kubectl get hostingdeployments
NAME                 STATUS     SAGEMAKER-ENDPOINT-NAME
hosting-deployment   Updating   hosting-deployment-38ecac47487611eaa81606fc3390e6ba

終端節點在整個更新過程當中保持實時狀態且徹底可用。有關更多信息和其餘示例,請參閱 GitHub 存儲庫

清理

要刪除終端節點而不會產生更多使用費用,請運行 kubectl delete -f hosting.yaml。請參閱如下代碼:

$ kubectl delete -f hosting.yaml
hostingdeployment.sagemaker.aws.amazon.com "hosting-deployment" deleted

結論

本文演示了適用於 Kubernetes 的 Amazon SageMaker Operator 如何支持實時推理。它還支持訓練和超參數調整。

但願你們能分享本身的經驗和反饋,或者提交其餘示例 YAML 規範或 Operator 改進信息。你們能夠分享使用適用於 Kubernetes 的 Amazon SageMaker Operator 的相關狀況,在AWS論壇中的 Amazon SageMaker 的板塊下發布帖子,在 GitHub 存儲庫中建立問題,或發送給 AWS Support 聯繫人並由其代爲轉達。

底圖2.png

相關文章
相關標籤/搜索