案例分享 | 思科結合 SageMaker 與 Kubeflow 打造的混合機器學習工做流

image
Amazon SageMaker是一項能夠幫助開發人員和數據科學家快速構建、訓練和部署機器學習(ML)模型的託管服務;Kubeflow則是一個爲Kubernetes構建的可組合、可移植、可擴展機器學習技術棧。這二者結合在一塊兒可以玩出什麼新花樣?html

下文將以思科的實踐案例出發介紹他們的作法。python

做爲一家大型企業,思科旗下多個業務部門都在應用機器學習(ML)與人工智能(AI)技術。該公司中向CTO直接報告的思科AI團隊主要負責在公司內部各業務部門中推廣開源AI/ML最佳實踐,同時也是Kubeflow開源項目與MLPerf/MLCommons的主要貢獻者。git

該部門但願在機器學習領域開發出要同時供思科業務部門與客戶使用的工件與最佳實踐,並以參考架構的形式共享這些解決方案。github

背景介紹

因爲業務需求(如本地化數據要求)限制,思科公司運營着一套混合雲環境。模型訓練在思科本身的UCS硬件上完成,但思科也有很多團隊在使用雲端資源執行推理,藉此實現良好的可擴展性、地理冗餘與彈性。然而因爲在混合集成環境下構建並支持統一的AI/ML工做流每每對專業知識與使用技能提出嚴苛要求,所以客戶在實際使用中可能面臨巨大挑戰。算法

爲解決這個問題,思科使用Cisco Kubeflow入門包爲混合雲環境構建起機器學習管道,其中的雲端模型推理服務正是由Amazon SageMaker負責提供。經過這樣一套參考架構,思科但願幫助客戶在複雜的基礎設施中構建起無縫且統一的機器學習工做負載,進而解決他們可能面臨的任何限制。安全

Kubeflow是一套用於Kubernetes上機器學習編排的流行開源庫。若是用戶一樣使用了混合雲環境,則可安裝Cisco Kuberflow入門包在本地設施中開發、構建、訓練並部署機器學習模型。此入門包中包含最新版本的Kubeflow以及示例應用程序捆綁包。bash

Amazon SageMaker則是一項託管機器學習服務,可幫助用戶準備數據、處理數據、訓練模型、跟蹤模型實驗、託管模型以及監控端點。經過使用SageMaker Components for Kubeflow Pipelines,任何人均可以像思科那樣在混合機器學習項目中同樣在Kubeflow管道中編排各項做業。經過這種方法便可無縫地從本地Kubeflow集羣上實現對Amazon SageMaker託管服務的調用,以完成模型的訓練與推理。此外,Amazon SageMaker還讓用戶的託管模型具有一系列企業級功能,例如自動規模伸縮、多模型端點、模型監控、高可用性以及安全合規等。服務器

爲了解釋該用例如何工做,思科使用了徹底公開的室內定位與導航BLE RSSI數據集從新建立場景。這套數據集中包含藍牙低功耗(BLE)接收信號強度指示(RSSI)指標。整個管道將訓練並部署模型,藉以預測藍牙設備的位置。在如下步驟中,將介紹Kubernetes集羣如何與Amazon SageMaker交互以實現混合解決方案。操做中將使用運行在Cisco UCS服務器上的Kubeflow以訓練由Apache MXNet編寫的機器學習模型,藉此知足思科的數據本地化要求,然後使用Amazon SageMaker將模型部署至AWS。架構

建立並訓練完成的模型將被上傳至Amazon Simple Storage Service(Amazon S3),然後使用Amazon SageMaker端點提供服務。下圖所示爲思科的端到端工做流程。
imageapp

開發環境

首先,若是當前沒有思科硬件,能夠設置Amazon Elastic Kubernetes Service(Amazon EKS)以配合Kubeflow共同運行。關於具體操做說明,請參閱建立Amazon EKS集羣部署Kubeflow管道

若是已經擁有一臺UCS設備,則可在Kubernetes集羣(v15.x或者更高版本)上使用Cisco Kubeflow入門包快速完成Kubeflow設置。要安裝Kubeflow,請在該設備的IP地址中設定INGRESS_IP變量,並運行kubeflowup.bash安裝腳本。具體參見如下代碼:

export INGRESS_IP=<UCS Machine's IP>
bash kubeflowup.bash

關於安裝的更多詳細信息,請參閱GitHub repo上的安裝說明

準備混合管道

爲了在Cisco UCS與AWS之間創建起無縫工做流,可以使用Kubeflow Pipelines組件與Amazon SageMaker Kubeflow組件共同建立起一條混合型管道。

要使用各組件,須要首先導入Kubeflow Pipeline軟件包,其中包括AWS軟件包:

import kfp
import kfp.dsl as dsl
from kfp import components
from kfp.aws import use_aws_secret

關於配置及運行管道的完整代碼,請參見GitHub repo

如下管道描述以圖形形式呈現了工做流以及各組件之間的相互關係。管道配置包括運行管道所須要的輸入(參數)定義,以及各組件的輸入與輸出。如下截屏爲Kubeflow UI上已經完成的管道的直觀表示。
image

這條管道將運行如下三個步驟:

1.訓練模型。
2.建立模型資源。
3.部署模型。

訓練模型

咱們能夠在本地設備中使用BLE數據訓練模型、建立鏡像、將鏡像上傳至S3存儲桶,然後經過應用MXNet模型配置.yaml文件將模型註冊至Amazon SageMaker。

將通過訓練的模型上傳至Amazon S3以後,Amazon SageMaker便可進一步將存儲在S3中的模型部署至託管端點。Amazon SageMaker端點可以簡化下游應用程序對模型的使用,同時幫助團隊使用Amazon CloudWatch監控其運行狀態。具體參見如下代碼:

def blerssi_mxnet_train_upload_op(step_name='mxnet-train'):
 return dsl.ContainerOp(
 name='mxnet-train-upload-s3',
 image='ciscoai/mxnet-blerssi-train-upload:v0.2',
 command=['python', '/opt/mx-dnn.py', 'train'],
 arguments=['--bucket-name', bucket_name]
 ).apply(use_aws_secret(secret_name=aws_secret_name, aws_access_key_id_name='AWS_ACCESS_KEY_ID', aws_secret_access_key_name='AWS_SECRET_ACCESS_KEY'))

建立模型資源

在將MXNet模型與工件上傳至Amazon S3時,請使用KF Pipeline CreateModel組件以建立一套Amazon SageMaker模型資源。

Amazon SageMaker端點API很是靈活並提供多種選項,能夠將通過訓練的模型部署至端點之上。例如,咱們可使用默認的Amazon SageMaker運行時管理模型部署、運行情況檢查以及模型調用等操做。Amazon SageMaker還容許用戶使用自定義容器與算法對運行時進行自定義。關於具體操做說明,請參閱Amazon SageMaker容器概述

在本用例中,咱們但願在必定程度上對模型運行情況檢查API與模型調用API加以控制。咱們使用自定義方案替換掉默認Amazon SageMaker運行時,用於部署訓練完成的模型。這套自定義預測器可以靈活調整傳入請求的處理方式,並將其傳遞至模型以執行預測。具體參見如下代碼:

sagemaker_model_op = components.load_component_from_url(model)

部署模型

咱們可使用KF Pipeline CreateModel組件將模型部署至Amazon SageMaker端點。

使用自定義容器進行推理,可以爲團隊提供最大程度的靈活性,藉此任意調整運行情況檢查與模型調用方式。固然,自定義容器也必須遵循Amazon SageMaker運行中關於API路徑的原則性要求,具體參見如下代碼:

sagemaker_deploy_op = components.load_component_from_url(deploy)

運行管道

要運行管道,請完成如下操做步驟:

l 配置Python代碼,用於經過Amazon SageMaker組件定義這條混合管道:

@dsl.pipeline(
 name='MXNet Sagemaker Hybrid Pipeline',
 description='Pipeline to train BLERSSI model using mxnet and save in aws s3 bucket'
)
def mxnet_pipeline(
 region="",
 image="",
 model_name="",
 endpoint_config_name="",
 endpoint_name="",
 model_artifact_url="",
 instance_type_1="",
 role=""
):
 train_upload_model = blerssi_mxnet_train_upload_op()
 create_model = sagemaker_model_op(
 region=region,
 model_name=model_name,
 image=image,
 model_artifact_url=model_artifact_url,
 role=role
 ).apply(use_aws_secret(secret_name=aws_secret_name, aws_access_key_id_name='AWS_ACCESS_KEY_ID', aws_secret_access_key_name='AWS_SECRET_ACCESS_KEY'))
 create_model.after(train_upload_model)
 sagemaker_deploy=sagemaker_deploy_op(
 region=region,
 endpoint_config_name=endpoint_config_name,
 endpoint_name=endpoint_name,
 model_name_1=create_model.output,
 instance_type_1=instance_type_1
 ).apply(use_aws_secret(secret_name=aws_secret_name, aws_access_key_id_name='AWS_ACCESS_KEY_ID', aws_secret_access_key_name='AWS_SECRET_ACCESS_KEY'))
 sagemaker_deploy.after(create_model)

關於配置的更多詳細信息,請參閱管道快速上手指南。要獲取完整管道代碼,請參閱GitHub repo

l 提供如下參數運行管道,藉此執行管道功能:

run = client.run_pipeline(blerssi_hybrid_experiment.id, 'blerssi-sagemaker-pipeline-'+timestamp, pipeline_package_path='mxnet_pipeline.tar.gz', params={
 'region': aws_region,
 'image': inference_image,
 'model_name': model_name,
 'endpoint_config_name': endpoint_config_name,
 'endpoint_name': endpoint_name,
 'model_artifact_url': model_path,
 'instance_type_1': instance_type,
 'role': role_arn
})

到這裏,BLE RSSI Amazon SageMaker管道已經順利開始執行。在全部組件成功執行以後,檢查sagemaker-deploy組件的日誌以驗證端點是否已經成功建立。如下截屏所示,爲最後一步的日誌記錄以及指向已部署模型的URL。
image

驗證模型

在將模型部署至AWS以後,咱們使用這套模型的端點名稱經過HTTP請求向其提交示例數據,藉此驗證模型的預測性能。如下截屏所示,爲示例Jupyter notebook中的部分摘要。此Notebook帶有Python客戶端以及位置預測輸出。
image

總結

Amazon SageMaker與Kubeflow Pipelines可以輕鬆被集成在統一的混合管道當中。Amazon SageMaker還提供完善的博客與教程集合,可幫助你們輕鬆經過Amazon SageMaker components for Kubeflow Pipelines建立起混合管道。其API亦很是豐富,涵蓋了咱們須要使用的全部關鍵組件,並容許你們開發自定義算法並與Cisco Kubeflow入門包進行集成。

經過將訓練完成的機器學習模型上傳至Amazon S3以供Amazon SageMaker在AWS中使用,思科將管理複雜機器學習生命週期的整體複雜度與總擁有成本下降約50%。此外,思科還還嚴格遵照企業隱私策略提出的最高標準,以可擴展方式實現模型交付,並在美國及世界各地的AWS區域內提供冗餘保障。

image

相關文章
相關標籤/搜索