Wdrażanie modelu w usłudze Azure Machine Edukacja
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:
- Rejestrowanie wytrenowanego modelu.
- Zdefiniuj konfigurację wnioskowania.
- Zdefiniuj konfigurację wdrożenia.
- 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.