Wdrażanie modeli uczenia maszynowego na platformie AzureDeploy machine learning models to Azure

Dowiedz się, jak wdrożyć model uczenia maszynowego lub uczenia głębokiego w ramach usługi sieci Web w chmurze platformy Azure.Learn how to deploy your machine learning or deep learning model as a web service in the Azure cloud. Możesz również wdrożyć na Azure IoT Edge urządzeń.You can also deploy to Azure IoT Edge devices.

Przepływ pracy wygląda podobnie niezależnie od tego, gdzie wdrażasz model:The workflow is similar no matter where you deploy your model:

  1. Zarejestruj model (opcjonalnie, patrz poniżej).Register the model (optional, see below).
  2. Przygotuj konfigurację wnioskowania (jeśli nie jest używane wdrożenie bez kodu).Prepare an inference configuration (unless using no-code deployment).
  3. Przygotuj skrypt wejścia (chyba że jest używany do wdrożenia bez kodu).Prepare an entry script (unless using no-code deployment).
  4. Wybierz element docelowy obliczeń.Choose a compute target.
  5. Wdrożenie modelu na docelowym obiekcie obliczeniowym.Deploy the model to the compute target.
  6. Przetestuj utworzoną usługę sieci Web.Test the resulting web service.

Aby uzyskać więcej informacji na temat pojęć związanych z przepływem pracy wdrożenia uczenia maszynowego, zobacz artykuł Zarządzanie, wdrażanie i monitorowanie modeli przy użyciu Azure Machine Learning.For more information on the concepts involved in the machine learning deployment workflow, see Manage, deploy, and monitor models with Azure Machine Learning.

Wymagania wstępnePrerequisites

Nawiązywanie połączenia z obszarem roboczymConnect to your workspace

Postępuj zgodnie z instrukcjami w dokumentacji interfejsu wiersza polecenia platformy Azure, aby ustawić kontekst subskrypcji.Follow the directions in the Azure CLI documentation for setting your subscription context.

Następnie wykonaj następujące czynności:Then do:

az ml workspace list --resource-group=<my resource group>

Aby wyświetlić obszary robocze, do których masz dostęp.to see the workspaces you have access to.

Zarejestruj model (opcjonalnie)Register your model (optional)

Zarejestrowany model to logiczny kontener dla co najmniej jednego pliku, który składa się z modelu.A registered model is a logical container for one or more files that make up your model. Na przykład jeśli masz model, który jest przechowywany w wielu plikach, możesz zarejestrować je jako jeden model w obszarze roboczym.For example, if you have a model that's stored in multiple files, you can register them as a single model in the workspace. Po zarejestrowaniu plików można pobrać lub wdrożyć zarejestrowany model i odebrać wszystkie zarejestrowane pliki.After you register the files, you can then download or deploy the registered model and receive all the files that you registered.

Porada

Zarejestrowanie modelu śledzenia wersji jest zalecane, ale nie jest wymagane.Registering a model for version tracking is recommended but not required. Jeśli wolisz korzystać bez rejestrowania modelu, musisz określić katalog źródłowy w InferenceConfig lub inferenceconfig.jsna i upewnić się, że Twój model znajduje się w tym katalogu źródłowym.If you would rather proceed without registering a model, you will need to specify a source directory in your InferenceConfig or inferenceconfig.json and ensure your model resides within that source directory.

Porada

Po zarejestrowaniu modelu podajesz ścieżkę do lokalizacji w chmurze (z przebiegu szkoleniowego) lub katalogu lokalnego.When you register a model, you provide the path of either a cloud location (from a training run) or a local directory. Ta ścieżka służy tylko do lokalizowania plików do przekazania w ramach procesu rejestracji.This path is just to locate the files for upload as part of the registration process. Nie musi być zgodna ze ścieżką używaną w skrypcie wprowadzania.It doesn't need to match the path used in the entry script. Aby uzyskać więcej informacji, zobacz Lokalizowanie plików modelu w skrypcie wprowadzania.For more information, see Locate model files in your entry script.

Ważne

Korzystając z opcji Filtruj według Tags na stronie modele Azure Machine Learning Studio, zamiast korzystać z TagName : TagValue klientów należy używać TagName=TagValue (bez spacji)When using Filter by Tags option on the Models page of Azure Machine Learning Studio, instead of using TagName : TagValue customers should use TagName=TagValue (without space)

W poniższych przykładach pokazano, jak zarejestrować model.The following examples demonstrate how to register a model.

Zarejestruj model na podstawie przebiegu szkolenia z usługi Azure MLRegister a model from an Azure ML training run

az ml model register -n sklearn_mnist  --asset-path outputs/sklearn_mnist_model.pkl  --experiment-name myexperiment --run-id myrunid --tag area=mnist

Porada

Jeśli zostanie wyświetlony komunikat o błędzie z informacją, że rozszerzenie ml nie jest zainstalowane, użyj następującego polecenia, aby je zainstalować:If you get an error message stating that the ml extension isn't installed, use the following command to install it:

az extension add -n azure-cli-ml

--asset-pathParametr odnosi się do lokalizacji w chmurze modelu.The --asset-path parameter refers to the cloud location of the model. W tym przykładzie jest używana ścieżka pojedynczego pliku.In this example, the path of a single file is used. Aby uwzględnić w rejestracji modelu wiele plików, ustaw --asset-path ścieżkę folderu zawierającego pliki.To include multiple files in the model registration, set --asset-path to the path of a folder that contains the files.

Rejestrowanie modelu z pliku lokalnegoRegister a model from a local file

az ml model register -n onnx_mnist -p mnist/model.onnx

Aby uwzględnić w rejestracji modelu wiele plików, ustaw -p ścieżkę folderu zawierającego pliki.To include multiple files in the model registration, set -p to the path of a folder that contains the files.

Aby uzyskać więcej informacji na temat az ml model register , zapoznaj się z dokumentacją referencyjną.For more information on az ml model register, consult the reference documentation.

Zdefiniuj skrypt wpisuDefine an entry script

Skrypt wejściowy odbiera dane przesyłane do wdrożonej usługi internetowej i przekazuje je do modelu.The entry script receives data submitted to a deployed web service and passes it to the model. Następnie pobiera odpowiedź zwróconą przez model i zwraca ją do klienta.It then takes the response returned by the model and returns that to the client. Skrypt jest specyficzny dla modelu.The script is specific to your model. Musi on zrozumieć dane, które są oczekiwane i zwracane przez model.It must understand the data that the model expects and returns.

Poniżej przedstawiono dwie rzeczy, które należy wykonać w skrypcie wprowadzania:The two things you need to accomplish in your entry script are:

  1. Ładowanie modelu (przy użyciu funkcji o nazwie init() )Loading your model (using a function called init())
  2. Uruchamianie modelu na danych wejściowych (przy użyciu funkcji o nazwie run() )Running your model on input data (using a function called run())

Przechodźmy tu szczegółowo.Let's go through these steps in detail.

Pisanie init ()Writing init()

Ładowanie zarejestrowanego modeluLoading a registered model

Zarejestrowane modele są przechowywane w ścieżce wskazywanej przez zmienną środowiskową o nazwie AZUREML_MODEL_DIR .Your registered models are stored at a path pointed to by an environment variable called AZUREML_MODEL_DIR. Aby uzyskać więcej informacji na temat dokładnej struktury katalogów, zobacz Lokalizowanie plików modelu w skrypcie wpisuFor more information on the exact directory structure, see Locate model files in your entry script

Ładowanie modelu lokalnegoLoading a local model

Jeśli wybrano opcję rejestrowania modelu i przeszedł model jako część katalogu źródłowego, można odczytać go w taki sam sposób, jak w przypadku lokalnego, przekazując ścieżkę do modelu względem Twojego skryptu oceniania.If you opted against registering your model and passed your model as part of your source directory, you can read it in like you would locally, by passing the path to the model relative to your scoring script. Na przykład, jeśli katalog ma strukturę:For example, if you had a directory structured as:


- source_dir
    - score.py
    - models
        - model1.onnx

możesz ładować modele przy użyciu następującego kodu w języku Python:you could load your models with the following Python code:

import os

model = open(os.path.join('.', 'models', 'model1.onnx'))

Zapis przebiegu ()Writing run()

run() jest wykonywane za każdym razem, gdy model otrzymuje żądanie oceniania i oczekuje treści żądania jako dokumentu JSON o następującej strukturze:run() is executed every time your model receives a scoring request, and expects the body of the request to be a JSON document with the following structure:

{
    "data": <model-specific-data-structure>
}

Dane wejściowe run() to ciąg języka Python, który jest zgodny z kluczem "Data".The input to run() is a Python string containing whatever follows the "data" key.

Poniższy przykład ilustruje sposób ładowania zarejestrowanego modelu scikit-Dowiedz się i oceny z danymi numpy:The following example demonstrates how to load a registered scikit-learn model and score it with numpy data:

import json
import numpy as np
import os
from sklearn.externals import joblib


def init():
    global model
    model_path = os.path.join(os.getenv('AZUREML_MODEL_DIR'), 'sklearn_mnist_model.pkl')
    model = joblib.load(model_path)

def run(data):
    try:
        data = np.array(json.loads(data))
        result = model.predict(data)
        # You can return any data type, as long as it is JSON serializable.
        return result.tolist()
    except Exception as e:
        error = str(e)
        return error

Aby uzyskać bardziej zaawansowane przykłady, w tym automatyczne generowanie schematów Swagger i dane binarne (tj. obraz), zapoznaj się z artykułem na temat tworzenia skryptów zaawansowanego wprowadzaniaFor more advanced examples, including automatic Swagger schema generation and binary (i.e. image) data, read the article on advanced entry script authoring

Definiowanie konfiguracji wnioskowaniaDefine an inference configuration

Konfiguracja wnioskowania opisuje sposób konfigurowania usługi sieci Web zawierającej model.An inference configuration describes how to set up the web-service containing your model. Jest on używany później podczas wdrażania modelu.It's used later, when you deploy the model.

Minimalną konfigurację wnioskowania można napisać jako:A minimal inference configuration can be written as:

{
    "entryScript": "score.py",
    "sourceDirectory": "./working_dir"
}

Oznacza to, że wdrożenie uczenia maszynowego będzie używać pliku score.py w ./working_dir katalogu do przetwarzania żądań przychodzących.This specifies that the machine learning deployment will use the file score.py in the ./working_dir directory to process incoming requests.

Zapoznaj się z tym artykułem , aby uzyskać bardziej szczegółowe omówienie konfiguracji wnioskowania.See this article for a more thorough discussion of inference configurations.

Porada

Aby uzyskać informacje na temat używania niestandardowego obrazu platformy Docker z konfiguracją wnioskowania, zobacz jak wdrożyć model przy użyciu niestandardowego obrazu platformy Docker.For information on using a custom Docker image with an inference configuration, see How to deploy a model using a custom Docker image.

Wybierz element docelowy obliczeńChoose a compute target

Obiekt docelowy obliczeń używany do hostowania modelu będzie miał wpływ na koszt i dostępność wdrożonego punktu końcowego.The compute target you use to host your model will affect the cost and availability of your deployed endpoint. Użyj tej tabeli, aby wybrać odpowiedni element docelowy obliczeń.Use this table to choose an appropriate compute target.

Docelowy zasób obliczeniowyCompute target Sposób użyciaUsed for Obsługa procesora GPUGPU support Obsługa FPGAFPGA support OpisDescription
Lokalna   Usługa sieci Web  Local web service Testowanie/debugowanieTesting/debugging     Służy do ograniczonego testowania i rozwiązywania problemów.Use for limited testing and troubleshooting. Przyspieszenie sprzętowe zależy od użycia bibliotek w systemie lokalnym.Hardware acceleration depends on use of libraries in the local system.
Azure Kubernetes Service (AKS)Azure Kubernetes Service (AKS) Wnioskowanie w czasie rzeczywistymReal-time inference Tak (wdrożenie usługi sieci Web)Yes (web service deployment) TakYes Używany w przypadku wdrożeń produkcyjnych o dużej skali.Use for high-scale production deployments. Zapewnia krótki czas odpowiedzi i automatyczne skalowanie wdrożonej usługi.Provides fast response time and autoscaling of the deployed service. Skalowanie automatyczne klastra nie jest obsługiwane za pomocą zestawu SDK Azure Machine Learning.Cluster autoscaling isn't supported through the Azure Machine Learning SDK. Aby zmienić węzły w klastrze AKS, użyj interfejsu użytkownika klastra AKS w Azure Portal.To change the nodes in the AKS cluster, use the UI for your AKS cluster in the Azure portal.

Obsługiwane przez projektanta.Supported in the designer.
Azure Container InstancesAzure Container Instances Testowanie lub programowanieTesting or development     Używany w przypadku obciążeń opartych na PROCESORAch o niskiej skali, które wymagają mniej niż 48 GB pamięci RAM.Use for low-scale CPU-based workloads that require less than 48 GB of RAM.

Obsługiwane przez projektanta.Supported in the designer.
Klaster obliczeniowy usługi Azure Machine LearningAzure Machine Learning compute clusters  Wnioskowanie partiiBatch inference Tak (potok Machine Learning)Yes (machine learning pipeline)   Uruchom ocenianie wsadowe w przypadku obliczeń bezserwerowych.Run batch scoring on serverless compute. Obsługuje maszyny wirtualne o normalnym i niskim priorytecie.Supports normal and low-priority VMs. Brak obsługi wnioskowania o czasie rzeczywistym.No support for realtime inference.

Uwaga

Chociaż obiekty docelowe obliczeń, takie jak lokalne, Azure Machine Learning obliczeniowe i Azure Machine Learning, obsługują procesor GPU na potrzeby szkoleń i eksperymentowania, użycie procesora GPU do wnioskowania w przypadku wdrożenia jako usługi sieci Web jest obsługiwane tylko w AKS.Although compute targets like local, Azure Machine Learning compute, and Azure Machine Learning compute clusters support GPU for training and experimentation, using GPU for inference when deployed as a web service is supported only on AKS.

Użycie procesora GPU do wnioskowania, gdy ocenianie z potokiem uczenia maszynowego jest obsługiwane tylko na Azure Machine Learning obliczeń.Using a GPU for inference when scoring with a machine learning pipeline is supported only on Azure Machine Learning compute.

Podczas wybierania jednostki SKU klastra najpierw Skaluj w górę, a następnie Skaluj w poziomie. Zacznij od komputera, który ma 150% pamięci RAM wymaganej przez model, Profiluj wynik i Znajdź maszynę o wymaganej wydajności.When choosing a cluster SKU, first scale up and then scale out. Start with a machine that has 150% of the RAM your model requires, profile the result and find a machine that has the performance you need. Po uzyskaniu informacji o tym Zwiększ liczbę maszyn, aby dopasować ją do potrzeb współbieżności.Once you've learned that, increase the number of machines to fit your need for concurrent inference.

Uwaga

  • Wystąpienia kontenera są odpowiednie tylko w przypadku małych modeli o rozmiarze mniejszym niż 1 GB.Container instances are suitable only for small models less than 1 GB in size.
  • Używaj jednowęzłowych klastrów AKS na potrzeby tworzenia i testowania większych modeli.Use single-node AKS clusters for dev/test of larger models.

Zdefiniuj konfigurację wdrożeniaDefine a deployment configuration

Opcje dostępne dla konfiguracji wdrożenia różnią się w zależności od wybranego elementu docelowego obliczeń.The options available for a deployment configuration differ depending on the compute target you choose.

Wpisy w dokumencie są deploymentconfig.json mapowane na parametry LocalWebservice.deploy_configuration.The entries in the deploymentconfig.json document map to the parameters for LocalWebservice.deploy_configuration. W poniższej tabeli opisano mapowanie między jednostkami w dokumencie JSON a parametrami metody:The following table describes the mapping between the entities in the JSON document and the parameters for the method:

Jednostka JSONJSON entity Parametr metodyMethod parameter OpisDescription
computeType Nie dotyczyNA Docelowy zasób obliczeniowy.The compute target. Dla lokalnych obiektów docelowych wartość musi być local .For local targets, the value must be local.
port port Port lokalny, na którym ma zostać ujawniony punkt końcowy HTTP usługi.The local port on which to expose the service's HTTP endpoint.

Ten kod JSON jest przykładową konfiguracją wdrożenia do użycia z interfejsem wiersza polecenia:This JSON is an example deployment configuration for use with the CLI:

{
    "computeType": "local",
    "port": 32267
}

Aby uzyskać więcej informacji, zobacz to odwołanie.For more information, see this reference.

Wdróż model uczenia maszynowegoDeploy your machine learning model

Teraz można przystąpić do wdrażania modelu.You are now ready to deploy your model.

Korzystanie z zarejestrowanego modeluUsing a registered model

Jeśli model został zarejestrowany w obszarze roboczym Azure Machine Learning, Zastąp ciąg "webmodeling: 1" nazwą Twojego modelu i numerem wersji.If you registered your model in your Azure Machine Learning workspace, replace "mymodel:1" with the name of your model and its version number.

az ml model deploy -m mymodel:1 --ic inferenceconfig.json --dc deploymentconfig.json

Korzystanie z modelu lokalnegoUsing a local model

Jeśli wolisz nie rejestrować modelu, możesz przekazać parametr "sourceDirectory" w inferenceconfig.js, aby określić katalog lokalny, który ma być obsługiwany przez model.If you would prefer not to register your model, you can pass the "sourceDirectory" parameter in your inferenceconfig.json to specify a local directory from which to serve your model.

az ml model deploy --ic inferenceconfig.json --dc deploymentconfig.json

Informacje o stanie usługiUnderstanding service state

Podczas wdrażania modelu może zostać wyświetlona zmiana stanu usługi podczas jej pełnego wdrożenia.During model deployment, you may see the service state change while it fully deploys.

W poniższej tabeli opisano różne stany usług:The following table describes the different service states:

Stan usługi WebServiceWebservice state OpisDescription Końcowy stan?Final state?
PrzechodzenieTransitioning Usługa jest w trakcie wdrażania.The service is in the process of deployment. NieNo
NieprawidłowyUnhealthy Usługa została wdrożona, ale jest obecnie nieosiągalna.The service has deployed but is currently unreachable. NieNo
UnschedulableUnschedulable Nie można teraz wdrożyć usługi z powodu braku zasobów.The service cannot be deployed at this time due to lack of resources. NieNo
NiepowodzenieFailed Wdrożenie usługi nie powiodło się z powodu błędu lub awarii.The service has failed to deploy due to an error or crash. TakYes
Dobra kondycjaHealthy Usługa jest w dobrej kondycji, a punkt końcowy jest dostępny.The service is healthy and the endpoint is available. TakYes

Porada

Podczas wdrażania obrazy platformy Docker dla obiektów docelowych obliczeń są kompilowane i ładowane z Azure Container Registry (ACR).When deploying, Docker images for compute targets are built and loaded from Azure Container Registry (ACR). Domyślnie Azure Machine Learning tworzy ACR, który korzysta z warstwy usługi podstawowa .By default, Azure Machine Learning creates an ACR that uses the basic service tier. Zmiana ACR dla obszaru roboczego na warstwę Standardowa lub Premium może skrócić czas potrzebny do kompilowania i wdrażania obrazów w celach obliczeniowych.Changing the ACR for your workspace to standard or premium tier may reduce the time it takes to build and deploy images to your compute targets. Aby uzyskać więcej informacji, zobacz Azure Container Registry warstwy usług.For more information, see Azure Container Registry service tiers.

Uwaga

W przypadku wdrażania modelu w usłudze Azure Kubernetes Service (AKS) zaleca się włączenie Azure monitor dla tego klastra.If you are deploying a model to Azure Kubernetes Service (AKS), we advise you enable Azure Monitor for that cluster. Ułatwi to zrozumienie ogólnej kondycji klastra i użycia zasobów.This will help you understand overall cluster health and resource usage. Przydatne może być również znalezienie następujących zasobów:You might also find the following resources useful:

Jeśli próbujesz wdrożyć model w złej kondycji lub przeciążonym klastrze, oczekiwano problemów.If you are trying to deploy a model to an unhealthy or overloaded cluster, it is expected to experience issues. Jeśli potrzebujesz pomocy w rozwiązywaniu problemów z klastrem AKS, skontaktuj się z pomocą techniczną AKS.If you need help troubleshooting AKS cluster problems please contact AKS Support.

Wnioskowanie partiiBatch inference

Azure Machine Learning obiekty docelowe obliczeń są tworzone i zarządzane przez Azure Machine Learning.Azure Machine Learning Compute targets are created and managed by Azure Machine Learning. Mogą one służyć do prognozowania partii z potoków Azure Machine Learning.They can be used for batch prediction from Azure Machine Learning pipelines.

Aby zapoznać się z przewodnikiem dotyczącym wnioskowania partii przy użyciu obliczeń Azure Machine Learning, zobacz jak uruchamiać przewidywania wsadowe.For a walkthrough of batch inference with Azure Machine Learning Compute, see How to run batch predictions.

IoT Edge wnioskowanieIoT Edge inference

Obsługa wdrażania na brzegu jest w wersji zapoznawczej.Support for deploying to the edge is in preview. Aby uzyskać więcej informacji, zobacz wdrażanie Azure Machine Learning jako moduł IoT Edge.For more information, see Deploy Azure Machine Learning as an IoT Edge module.

Usuwanie zasobówDelete resources

Aby usunąć wdrożoną usługę sieci Web, użyj programu az ml service <name of webservice> .To delete a deployed webservice, use az ml service <name of webservice>.

Aby usunąć zarejestrowany model z obszaru roboczego, użyj az ml model delete <model id>To delete a registered model from your workspace, use az ml model delete <model id>

Przeczytaj więcej na temat usuwania usługi sieci Web i usuwania modelu.Read more about deleting a webservice and deleting a model.

Następne krokiNext steps