iT邦幫忙

2021 iThome 鐵人賽

DAY 25
0
AI & Data

一起學習 Azure Machine Learning 系列 第 25

[DAY25] 用 Azure Machine Learning SDK 註冊模型與部署

DAY25 用 Azure Machine Learning SDK 註冊模型與部署

之前提過在 Azure Machine Learning 裡面,提供了模型註冊的功能。這樣子的功能很重要,在當代 MLOps 的工具裡面都會有這類的功能,因為好好的管理每個版本的模型是現代企業導入 AI 最重要的事情之一。我們今天就來講怎麼用 AML SDK 註冊模型和部署吧!

註冊模型

  1. 註冊模型的方式很簡單,使用 Model 物件就可以了。參考程式碼如下:
from azureml.core import Model

classification_model = Model.register(workspace=ws,
                       model_name='mnist_model',
                       model_path='mnist.h5', # local path
                       description='mnist 的模型')
  1. 另外也可以再 Run 裡面註冊模型哦!
run.register_model( model_name='mnist_model',
                    model_path='outputs/mnist.h5', # run outputs path
                    description='A classification model')
  1. 我們進到圖形化介面,可以看到已經被註冊進去囉!如下圖:
    Register and deploy model in Azure machine learning

  2. 當然也可以用 SDK 的方式來取得:

for model in Model.list(ws):
    print(model.name)

部署模型

  1. 在部署模型時,我們要先建立一個 script,一般都取名為 score.py。這個 script 至少要有兩個 function:
  • init(): 初始化時呼叫。
  • run(raw_data): 資料提交時呼叫。

根據 MNIST 的 model,程式碼參考如下:

import json
import numpy as np
import os
from tensorflow.keras.preprocessing import image
from tensorflow.keras.models import load_model

def init():
    global model
    # AZUREML_MODEL_DIR 是環境變數
    model_path = os.path.join(os.getenv('AZUREML_MODEL_DIR'), 'mnist.h5')
    model = load_model(model_path)

def run(raw_data):
    data = np.array(json.loads(raw_data)['data'])

    predictions = model.predict(pred_img)

    return predictions.tolist()
  1. 接著開新的檔案,來寫部署的程式。我們要使用 InferenceConfig 這個物件,就像 ScriptRunConfig 一樣,都是一個包裝用的設定工具。
from azureml.core import Environment, Workspace
from azureml.core.model import InferenceConfig

ws = Workspace.from_config()

env = Environment.get(ws,"AzureML-tensorflow-2.4-ubuntu18.04-py37-cuda11-gpu")
env.inferencing_stack_version='latest'

mnist_inference_config = InferenceConfig(source_directory = '.',
                                              entry_script="score.py",
                                              environment=env)
  1. 接著建立部署的運算資源,這裡和我們前幾天開運算資源非常的相似哦!我們建立一個 AKS cluster吧!跟之前一樣,這裡會等待比較久哦!
from azureml.core.compute import ComputeTarget, AksCompute

cluster_name = 'MnistAksCluster' 
compute_config = AksCompute.provisioning_configuration(location='westus2')
production_cluster = ComputeTarget.create(ws, cluster_name, compute_config)
production_cluster.wait_for_completion(show_output=True)
  1. 然後再建立 AksWebservice。
from azureml.core.webservice import AksWebservice

classifier_deploy_config = AksWebservice.deploy_configuration(cpu_cores = 2,
                                                              memory_gb = 1,
                                                              enable_app_insights = True)
  1. 接著就部署上去囉!
from azureml.core.model import Model

model = ws.models['mnist_model']
service = Model.deploy(workspace=ws,
                       name = 'mnist-classification',
                       models = [model],
                       inference_config = mnist_inference_config,
                       deployment_config = classifier_deploy_config,
                       deployment_target = production_cluster)
service.wait_for_deployment(show_output = True)
  1. 接著我們進到圖形化介面的 Endpoints 裡,就可以看到我們剛剛部署完成的 endpoint 啦!一樣到 Comsume 裡面有提供程式碼可以對接,記得要把影像轉成 numpy array 哦!
    Register and deploy model in Azure machine learning

今天我們就講完了模型的註冊和部署了,明天我們來講 Pipeline 吧!


上一篇
[DAY24] Azure Machine Learning SDK 的 ScriptRunConfig
下一篇
[DAY26] 用 Azure Machine Learning SDK 來做 Pipeline
系列文
一起學習 Azure Machine Learning 30

尚未有邦友留言

立即登入留言