Nasazení modelu do služby Azure Machine Učení

Dokončeno

Jak jsme probrali v předchozí lekci, můžete model nasadit do několika druhů cílových výpočetních prostředků: včetně místních výpočetních prostředků, služby Azure Container Instance (ACI), clusteru Azure Kubernetes Service (AKS) nebo modulu Internet věcí (IoT). Azure Machine Learning používá jako mechanismus nasazení kontejnery. Model a kód pro jeho použití zabalí jako image, která se dá nasadit do kontejneru ve zvoleném cílovém cíli.

Pokud chcete nasadit model jako odvozovací webovou službu, musíte provést následující úlohy:

  1. Zaregistrujte natrénovaný model.
  2. Definujte konfiguraci odvozování.
  3. Definujte konfiguraci nasazení.
  4. Nasaďte model.

1. Registrace natrénovaného modelu

Po úspěšném školení modelu je potřeba ho zaregistrovat v pracovním prostoru Azure Machine Learning. Služba v reálném čase pak bude moct v případě potřeby model načíst.

Pokud chcete zaregistrovat model z místního souboru, můžete použít metodu registrace objektu Model, jak je znázorněno zde:

from azureml.core import Model

model = Model.register(workspace=ws, 
                       model_name='nyc-taxi-fare',
                       model_path='model.pkl', # local path
                       description='Model to predict taxi fares in NYC.')

2. Definování konfigurace odvozování

Model se nasadí jako služba, která se skládá z:

  • Skript pro načtení modelu a vrácení předpovědi pro odeslaná data.
  • Prostředí, ve kterém se skript spustí.

Proto musíte definovat skript a prostředí pro službu.

Vytvoření vstupního skriptu

Vytvořte pro službu vstupní skript (někdy se mu říká bodovací skript) v podobě souboru jazyka Python (.py). Musí obsahovat dvě funkce:

  • init(): Volá se při inicializaci služby.
  • run(raw_data): Volá se při odeslání nových dat do služby.

Funkce init se obvykle používá k načtení modelu z registru modelů, funkce run slouží k vygenerování předpovědí ze vstupních dat. Toto schéma znázorňuje následující vzorový skript:

import json
import joblib
import numpy as np
from azureml.core.model import Model

# Called when the service is loaded
def init():
    global model
    # Get the path to the registered model file and load it
    model_path = Model.get_model_path('nyc-taxi-fare')
    model = joblib.load(model_path)

# Called when a request is received
def run(raw_data):
    # Get the input data as a numpy array
    data = np.array(json.loads(raw_data)['data'])
    # Get a prediction from the model
    predictions = model.predict(data)
    # Return the predictions as any JSON serializable format
    return predictions.tolist()

Vytvoření prostředí

Prostředí Azure Machine Učení jsou zapouzdřením prostředí, ve kterém probíhá trénování strojového učení. Definují balíčky Pythonu, proměnné prostředí, nastavení Dockeru a další atributy deklarativním způsobem. Následující fragment kódu ukazuje příklad vytvoření prostředí pro vaše nasazení:

from azureml.core import Environment
from azureml.core.environment import CondaDependencies

my_env_name="nyc-taxi-env"
myenv = Environment.get(workspace=ws, name='AzureML-Minimal').clone(my_env_name)
conda_dep = CondaDependencies()
conda_dep.add_pip_package("numpy==1.18.1")
conda_dep.add_pip_package("pandas==1.1.5")
conda_dep.add_pip_package("joblib==0.14.1")
conda_dep.add_pip_package("scikit-learn==0.24.1")
conda_dep.add_pip_package("sklearn-pandas==2.1.0")
myenv.python.conda_dependencies=conda_dep

Kombinování skriptu a prostředí ve třídě InferenceConfig

Po vytvoření vstupního skriptu a prostředí je můžete zkombinovat do inferenceConfig pro službu takto:

from azureml.core.model import InferenceConfig

from azureml.core.model import InferenceConfig
inference_config = InferenceConfig(entry_script='score.py', 
                                   source_directory='.', 
                                   environment=myenv)

3. Definování konfigurace nasazení

Když máte vstupní skript a prostředí, musíte nakonfigurovat výpočetní prostředky, do kterých se bude služba nasazovat. Pokud nasazujete do clusteru AKS, musíte před nasazením vytvořit cluster a cílový výpočetní objekt.

from azureml.core.compute import ComputeTarget, AksCompute

cluster_name = 'aks-cluster'
compute_config = AksCompute.provisioning_configuration(location='eastus')
production_cluster = ComputeTarget.create(ws, cluster_name, compute_config)
production_cluster.wait_for_completion(show_output=True)

Pomocí vytvořeného cílového výpočetního objektu teď můžete definovat konfiguraci nasazení, která pro kontejnerizovanové nasazení nastaví výpočetní specifikaci specifickou pro cíl:

from azureml.core.webservice import AksWebservice

deploy_config = AksWebservice.deploy_configuration(cpu_cores = 1,
                                                   memory_gb = 1)

Kód pro konfiguraci nasazení ACI je podobný, s tím rozdílem, že nepotřebujete explicitně vytvořit cílový výpočetní objekt ACI a musíte použít třídu deploy_configuration z oboru názvů azureml.core.webservice.AciWebservice. Podobně můžete použít obor názvů azureml.core.webservice.LocalWebservice ke konfiguraci místní služby založené na Dockeru.

4. Nasazení modelu

Jakmile bude konfigurace připravená, můžete model nasadit. Nejjednodušší cestou je volání metody deploy třídy Model, jak je zde uvedeno:

from azureml.core.model import Model

service = Model.deploy(workspace=ws,
                       name = 'nyc-taxi-service',
                       models = [model],
                       inference_config = inference_config,
                       deployment_config = deploy_config,
                       deployment_target = production_cluster)
service.wait_for_deployment(show_output = True)

U ACI nebo místních služeb můžete vynechat parametr deployment_target (nebo ho nastavit na hodnotu None).

Poznámka:

Další informace: Další informace o nasazení modelů pomocí služby Azure Machine Učení najdete v tématu Nasazení modelů pomocí služby Azure Machine Učení v dokumentaci.