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:
- Zarejestruj model (opcjonalnie, patrz poniżej).Register the model (optional, see below).
- Przygotuj konfigurację wnioskowania (jeśli nie jest używane wdrożenie bez kodu).Prepare an inference configuration (unless using no-code deployment).
- Przygotuj skrypt wejścia (chyba że jest używany do wdrożenia bez kodu).Prepare an entry script (unless using no-code deployment).
- Wybierz element docelowy obliczeń.Choose a compute target.
- Wdrożenie modelu na docelowym obiekcie obliczeniowym.Deploy the model to the compute target.
- 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
- Obszar roboczy usługi Azure Machine Learning.An Azure Machine Learning workspace. Aby uzyskać więcej informacji, zobacz Tworzenie obszaru roboczego Azure Machine Learning.For more information, see Create an Azure Machine Learning workspace.
- Model.A model. Jeśli nie masz przeszkolonego modelu, możesz użyć modelu i plików zależności, które są dostępne w tym samouczku.If you don't have a trained model, you can use the model and dependency files provided in this tutorial.
- Rozszerzenie interfejsu wiersza polecenia platformy Azure dla usługi Machine Learning.The Azure Command Line Interface (CLI) extension for the Machine Learning service.
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-path
Parametr 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:
- Ładowanie modelu (przy użyciu funkcji o nazwie
init()
)Loading your model (using a function calledinit()
) - Uruchamianie modelu na danych wejściowych (przy użyciu funkcji o nazwie
run()
)Running your model on input data (using a function calledrun()
)
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:
- Sprawdzaj, czy Resource Health zdarzenia mające wpływ na klaster AKSCheck for Resource Health events impacting your AKS cluster
- Diagnostyka usługi Azure KubernetesAzure Kubernetes Service Diagnostics
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
- Rozwiązywanie problemów z niepowodzeniem wdrożeniaTroubleshoot a failed deployment
- Wdrażanie w usłudze Azure Kubernetes ServiceDeploy to Azure Kubernetes Service
- Tworzenie aplikacji klienckich w celu korzystania z usług sieci WebCreate client applications to consume web services
- Aktualizowanie usługi internetowejUpdate web service
- Jak wdrożyć model przy użyciu niestandardowego obrazu platformy DockerHow to deploy a model using a custom Docker image
- Zabezpieczanie usługi internetowej za pomocą usługi Azure Machine Learning przy użyciu protokołu TLSUse TLS to secure a web service through Azure Machine Learning
- Monitoruj modele Azure Machine Learning przy użyciu Application InsightsMonitor your Azure Machine Learning models with Application Insights
- Zbieranie danych dla modeli w środowisku produkcyjnymCollect data for models in production
- Tworzenie alertów zdarzeń i wyzwalaczy na potrzeby wdrożeń modeliCreate event alerts and triggers for model deployments