Wdrażanie modelu w usłudze Azure Machine Edukacja

Ukończone

Jak omówiono w poprzedniej lekcji, można wdrożyć model w kilku rodzajach obiektów docelowych obliczeniowych: w tym lokalne obliczenia, wystąpienie kontenera platformy Azure (ACI), klaster usługi Azure Kubernetes Service (AKS) lub moduł Internetu rzeczy (IoT). Usługa Azure Machine Learning używa kontenerów jako mechanizmu wdrażania, pakując model i kod w celu użycia go jako obrazu, który można wdrożyć w kontenerze w wybranym docelowym obiekcie obliczeniowym.

Aby wdrożyć model jako usługę internetową wnioskowania, należy wykonać następujące zadania:

  1. Rejestrowanie wytrenowanego modelu.
  2. Zdefiniuj konfigurację wnioskowania.
  3. Zdefiniuj konfigurację wdrożenia.
  4. Wdróż model.

1. Rejestrowanie wytrenowanego modelu

Po pomyślnym wytrenowaniu modelu należy zarejestrować go w obszarze roboczym usługi Azure Machine Learning. Dzięki temu Twoja usługa w czasie rzeczywistym będzie mogła załadować model w razie potrzeby.

Aby zarejestrować model z pliku lokalnego, możesz użyć metody register obiektu Model, jak pokazano poniżej:

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. Definiowanie konfiguracji wnioskowania

Model zostanie wdrożony jako usługa składająca się z następujących elementów:

  • Skrypt ładujący model i zwracający przewidywania dla przesłanych danych.
  • Środowisko, w którym skrypt będzie uruchamiany.

W związku z tym należy zdefiniować skrypt i środowisko dla usługi.

Tworzenie skryptu wejściowego

Utwórz skrypt wejściowy (czasami nazywany skryptem oceniania) dla usługi jako plik języka Python (.py). Musi on zawierać dwie funkcje:

  • init(): wywoływana po zainicjowaniu usługi.
  • run(raw_data): wywoływana, gdy nowe dane są przesyłane do usługi.

Zazwyczaj używasz funkcji init, aby załadować model z rejestru modeli, a funkcji run, aby wygenerować przewidywania na podstawie danych wejściowych. Poniższy przykładowy skrypt przedstawia ten wzorzec:

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()

Tworzenie środowiska

Środowiska usługi Azure Machine Edukacja to hermetyzacja środowiska, w którym odbywa się trenowanie uczenia maszynowego. Definiują pakiety języka Python, zmienne środowiskowe, ustawienia platformy Docker i inne atrybuty w sposób deklaratywny. Poniższy fragment kodu przedstawia przykład sposobu tworzenia środowiska dla wdrożenia:

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

Łączenie skryptu i środowiska w klasie InferenceConfig

Po utworzeniu skryptu wejścia i środowiska można je połączyć w inferenceConfig dla usługi w następujący sposób:

from azureml.core.model import InferenceConfig

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

3. Definiowanie konfiguracji wdrożenia

Teraz, gdy masz skrypt wejściowy i środowisko, musisz skonfigurować obiekt obliczeniowy, w którym zostanie wdrożona usługa. W przypadku wdrażania w klastrze AKS przed wdrożeniem należy utworzyć klaster i docelowy obiekt obliczeniowy:

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)

Po utworzeniu docelowego obiektu obliczeniowego możesz zdefiniować konfigurację wdrożenia, która określa specyfikację obliczeniową obiektu docelowego dla wdrożenia konteneryzowanego:

from azureml.core.webservice import AksWebservice

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

Kod służący do konfigurowania wdrożenia w wystąpieniu kontenera platformy Azure (ACI) jest podobny, z tą różnicą, że nie trzeba jawnie tworzyć docelowego obiektu obliczeniowego ACI i należy użyć klasy deploy_configuration z przestrzeni nazw azureml.core.webservice.AciWebservice. Możesz także użyć przestrzeni nazw azureml.core.webservice.LocalWebservice w celu skonfigurowania lokalnej usługi opartej na platformie Docker.

4. Wdrażanie modelu

Po przygotowaniu całej konfiguracji możesz wdrożyć model. Najprostszym sposobem jest wywołanie metody deploy klasy Model, jak poniżej:

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)

W przypadku wystąpienia kontenera platformy Azure lub usług lokalnych możesz pominąć parametr deployment_target (lub ustawić go tak na wartość None (Brak)).

Uwaga

Więcej informacji: Aby uzyskać więcej informacji na temat wdrażania modeli przy użyciu usługi Azure Machine Edukacja, zobacz Wdrażanie modeli przy użyciu usługi Azure Machine Edukacja w dokumentacji.