iT邦幫忙

0

【Azure MLOps - 6】建立CD pipeline:把機器學習模型部署到staging area

  • 分享至 

  • xImage
  •  

延續上一篇文章,當CI pipeline執行結束後,模型會被下載到【pipeline published artifact區域】。接下來,就把【pipeline published artifact區域】產生新的模型檔案,做為「觸發CD pipeline的條件」。本次練習CD pipeline的目的是在將機器學習模型部署成endpoint。
https://ithelp.ithome.com.tw/upload/images/20230118/20154404nMjDiIdvyJ.png

本篇文章結構:
1.概念說明
2.建立agent的任務
3.設定觸發條件
4.試跑第一部分CD pipeline

CI pipeline文章:
【Azure MLOps - 1】使用Azure DevOps建立AML pipelines
【Azure MLOps - 2】使用Azure DevOps建立專案與連線設定
【Azure MLOps - 3】使用Azure DevOps建立訓練模型的CI pipeline(上)
【Azure MLOps - 4】使用Azure DevOps建立訓練模型的CI pipeline(下)
【Azure MLOps - 5】執行Azure DevOps CI pipeline

1.概念說明

先來思考一下資料科學家使用Azure Machine Learning部署模型時(示意圖如下),會點選deploy,透過一些必要的設定,把模型部署成web service。部署後,提供模型的使用者api「輸入特徵值」,產出模型預測結果,例如預測機率值。
https://ithelp.ithome.com.tw/upload/images/20230118/20154404C18Egetk38.png

在這次的練習情境中,在模型部署時,會分成測試環境(staging area)與正式環境(production area),把模型部署成real-time endpoint,也可以依照你的需求部署成batch endpoint。只有當測試環境(staging area)模型部署結束,才會考慮是否要把模型部署到正式環境(production area)。
考慮的面向很多,很可能是開發團隊想要觀察模型表現一陣子,確認新模型的預測結果是否比舊版模型好(每個模型的允許放行的條件不同)。

所以在CD pipeline中,會有兩個部分:
(1)模型自動部署到測試環境(staging area)
(2)模型自動部署到正式環境(production area)
而這兩個部分中間,並不會直接觸發,中間會卡一個核准的關卡。

如果是在測試環境(staging area)模型吃的運算資源,設定為Azure compute instance(ACI);如果是正式環境(production area),模型服務最好是部署到AzureAKS。可參考在 Azure Machine Learning 上建立運算資源

https://ithelp.ithome.com.tw/upload/images/20230118/20154404NRo8S6ja0L.png

2.建立agent的任務

2-1 建立pipeline與設定agent

因為要產生一條新的CD pipeline,到Azure DevOps點選pipeline下的release,點選new pipeline:
https://ithelp.ithome.com.tw/upload/images/20230118/20154404FeHQTChQEb.png

選擇empty job:
https://ithelp.ithome.com.tw/upload/images/20230118/20154404a0yainrKZ7.png

點選「1 job,0 task」:
https://ithelp.ithome.com.tw/upload/images/20230118/20154404Deh7PnFAXW.png

接下來就會到熟悉的畫面,把這個部分稱作Deploy to staging:
https://ithelp.ithome.com.tw/upload/images/20230118/20154404vJNMjSVo3s.png

和CI pipeline一樣,選擇agent的系統和版本,我這裡還是選擇ubuntu-18.04:
https://ithelp.ithome.com.tw/upload/images/20230118/20154404oeCK71DsPZ.png

備註:因為在建立CI pipeline的時候已經解說過很多概念,所以CD pipeline會很快速的帶過。如果還不知道agent是什麼,也不知道什麼是Azure Machine Learning CLI extension (機器學習延伸模組),建議回頭從頭複習一下。
/images/emoticon/emoticon39.gif

2-2 agent任務:安裝az ml extension

由於後續會在agent裡面測試部署的api是否可以呼叫並預測,而測試使用的程式碼是staging_test.py (位在【pipeline published artifact區域】)如下圖,所以我們需要指定agent python版本。
https://ithelp.ithome.com.tw/upload/images/20230118/201544046Uyl7Dy5U9.png

點擊agent旁邊的+,搜尋python,加入use python任務,指定python版本:
https://ithelp.ithome.com.tw/upload/images/20230118/201544049TeTCMGbGq.png

與CI pipeline相同,需要再agent安裝az ml extension,才有辦法使用指令對Azure Machine Learning各種操作。所以點擊agent旁邊的+,搜尋Azure CLI,加入任務:
https://ithelp.ithome.com.tw/upload/images/20230118/20154404I1NLCSKEx0.png

在inline script當中寫入指令:

az extension add -n azure-cli-ml

2-3 agent任務:部署模型到azure compute instance

接下來我們希望模型部署到container上,下一個任務 Deploy to Azure contrainer instance (ACI)。

因為要使用az ml cli指令部署模型,點擊agent旁邊的+,搜尋Azure CLI,加入任務,命名為Deploy to ACI:
https://ithelp.ithome.com.tw/upload/images/20230118/20154404GpkyvVqLWo.png

使用指令:az ml model deploy進行部署,指令的詳細參數可參閱官方說明:

az ml model deploy -g $(azureml.resourceGroup) -w $(azureml.workspaceName) -n $(service.name.staging) -f ../metadata/model.json --dc aciDeploymentConfigStaging.yml --ic inferenceConfig.yml --overwrite

提醒大家使用Azure Machine Learning部署,需要以下兩個要素
(1)model
(2)Inferencing and deployment configuration (Compute target+Environment+Scoring scripts)

model很簡單理解,就是model.pkl(如示意圖),我們也已經複製到【pipeline published artifact區域】。
https://ithelp.ithome.com.tw/upload/images/20230118/201544048ONfsKfIhN.png

而另外一個要素,「Inferencing and deployment configuration」又由3個元素組成:
(1)Compute target
(2)Environment
(3)Scoring scripts

也就是模型在部署和推斷(預測)的時候需要的configuration,稍微說明:
(1)compute target就是模型吃的運算資源,所以staging area就會是ACI,production area就會是AKS,所以用Azure CLI指令進行模型部署的時候,會需要進行aci configuration。也就是上面指令的參數--dc所指定的檔案: aciDeploymentConfigStaging.yml

(2)Environment則是機器學習模型「在預測的時候」會需要什麼環境,例如模型需要sklean,python3.7。也就是上面指令的--ic參數:inferenceConfig.yml

(3)scoring.py就是產出預測結果的程式,裡面有兩個功能,一個是把model load 到ACI的功能init function,另一個是進行預測的run function:
https://ithelp.ithome.com.tw/upload/images/20230118/201544047hpto5yd4H.png

所以可以看到az ml model deploy指令所加入的參數有點複雜:
--ic參數 指定inference configuration file,檔案位在【pipeline published artifact區域】的inferenceConfig.yml (如下圖),這個檔案當中,指定模型部署的environment ymal檔案為「scoringConfig.yml」,而Scoring scripts則是「score.py」。
https://ithelp.ithome.com.tw/upload/images/20230118/20154404BkMAQeE6Tt.png

以上這些檔案,都位在【pipeline published artifact區域】中,如下圖,所以這就是為什麼會在CI pipeline中,最後的copy file任務時,把這些檔案一併複製:
https://ithelp.ithome.com.tw/upload/images/20230118/2015440474fHeCcnds.png

其實在AML部署模型有點複雜,所以就多說明了一些,對剛接觸的人會較難理解沒錯,本系列文章先繼續專注在MLOPS流程建立。

因為az ml model deploy指令中,所需的檔案都在【pipeline published artifact區域】,所以需要指定工作目錄,下拉選單/_MLOps-WorkShop-1-CI/landing/s/deployment:
https://ithelp.ithome.com.tw/upload/images/20230118/20154404PJKqea2b2v.png

最後指定$()內的名稱變數:
https://ithelp.ithome.com.tw/upload/images/20230118/20154404aYJHswg478.png

azureml.resourceGroup mlops-wsh-rg-1
azureml.workspaceName mlops-wsh-aml-1
service.name.staging insurance-service-aci (web service名稱)

2-4 agent任務:測試endpoint

如果執行CD pipeline,當agent執行到2-3時,一個名叫做insurance-service-aci的web service會被部署完成。所以在azure machine learning workspace的endpoint會出現insurance-service-aci (如下圖示意圖):
https://ithelp.ithome.com.tw/upload/images/20230118/20154404AKOzfPNBO9.png

並且有這個service專屬的endpoint url(如下圖)。
建立pipeline的目的就是希望能夠自動化,由agent自動測試這個endpoint url「是否能可以呼叫,輸入特徵值,且回傳預測結果」,所以接下來新增的任務是「測試endpoint url」。
https://ithelp.ithome.com.tw/upload/images/20230118/20154404AJtjbCBkcf.png

測試endpoit的程式碼: staging_test.py 一樣位在【pipeline published artifact區域】,測試程式檔中,會執行「傳入特徵值(json格式)給endpoint」,和資料科學家在AML workshop使用UI測試是一樣的流程:
https://ithelp.ithome.com.tw/upload/images/20230118/20154404xmqxxzmUG1.png

要在agent當中執行staging_test.py,就需要先把程式當中需要的套件安裝好,所以一樣會需要在agent執行安裝指令(與CI pipeline一樣,可以回去複習)。增加一個bash task,執行install_requirements.sh:
(install_requirements.sh在_MLOps-WorkShop-1-CI/landing/s/package_requirement/)
https://ithelp.ithome.com.tw/upload/images/20230118/20154404HJmWRU4cCM.png

接下來新增一個Azure CLI任務,取名為「Staging test」,執行pytest,pytest解釋詳見之前位於CI pipeline文章的解說:
https://ithelp.ithome.com.tw/upload/images/20230118/20154404IR4BihLORr.png
在inline script當中輸入:

pytest staging_test.py --doctest-modules --junitxml=junit/test-results.xml --cov-report=xml --cov-report=html --scoreurl $(az ml service show -g $(azureml.resourceGroup) -w $(azureml.workspaceName) -n $(service.name.staging) --query scoringUri -o tsv) 

這邊特別說明一下,agent要測試的endpoint url需要由--scoreurl參數帶入,az ml service show指令可以吐出部署的service detail,但我們只需要url資訊,所以az ml service show後面會有--query scoringUri參數。
其他細節請查閱官方文件。

staging_test.py檔案位在【pipeline published artifact區域】/_MLOps-WorkShop-1-CI/landing/s/tests/integration,所以往下捲動,設定工作目錄:
https://ithelp.ithome.com.tw/upload/images/20230118/20154404pvczHxfaKy.png

2-5 agent任務:發布endpoint測試結果

前一步驟使用pytest測試,並產出report,新增一個任務把這些報告發布到Azure DevOps中。搜尋publish result,add後修改名稱Publish Staging Test Results。前一個步驟有設定pytest報告的檔名都叫做test-,所以Test results files填入:**/test-*.xml
https://ithelp.ithome.com.tw/upload/images/20230118/201544045s8yhxYmtT.png

CD pipeline的第一部分:模型自動部署到測試環境(staging area),到這裡就設定完成了!記得按儲存!

3. 設定CD pipeline觸發條件

CD pipeline artifact來源是CI pipeline產生的artifact,一旦有新artifact就觸發CD pipeline。
所以接下來要設定:
(1)CD pipeline artifact來源
(2)觸發條件
回到這條release pipeline的首頁,點選artifact,Source (build pipeline)處填寫:CI pipeline,選擇最新latest:
https://ithelp.ithome.com.tw/upload/images/20230118/20154404gzYrWl91LK.png

設定Continuous deployment trigger,點擊閃電處:
https://ithelp.ithome.com.tw/upload/images/20230118/20154404VhSu9KCRWl.png

打開Continuous deployment trigger:
https://ithelp.ithome.com.tw/upload/images/20230118/2015440465FFqeyOQC.png

4.試跑第一部分CD pipeline

雖然我們設定好觸發條件,不過在真的讓他自動觸發前,還是先執行一次這個pipeline看看,點選頁面右上方的create release:
https://ithelp.ithome.com.tw/upload/images/20230118/2015440482yqWKPI6d.png

然後點選Create:
https://ithelp.ithome.com.tw/upload/images/20230118/20154404T479qjvrPB.png

和CI pipeline一樣,每次執行會有一個編號(run ID),下圖顯示這次release pipline正在運行:
https://ithelp.ithome.com.tw/upload/images/20230118/20154404xr4yjDQruP.png
https://ithelp.ithome.com.tw/upload/images/20230118/20154404xoqd20QGUh.png

運行執行成功後,可以檢視一下發布的測試報告:
https://ithelp.ithome.com.tw/upload/images/20230118/20154404kY3vSxIRjJ.png

如果運行執行成功,可以在Azure Machine Learning當中,看到我們部署的service:
https://ithelp.ithome.com.tw/upload/images/20230118/20154404nsflxahHRc.png

下一篇【Azure MLOps - 7】建立CD pipeline:把機器學習模型部署到production area


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言