Wdrażanie modeli uczenia maszynowego na platformie Azure
DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure ml w wersji 1zestawu SDK języka Python azureml v1
Dowiedz się, jak wdrożyć model uczenia maszynowego lub uczenia głębokiego jako usługę internetową w chmurze platformy Azure.
Uwaga
Punkty końcowe usługi Azure Machine Learning (wersja 2) zapewniają ulepszone, prostsze środowisko wdrażania. Punkty końcowe obsługują scenariusze wnioskowania w czasie rzeczywistym i wsadowego. Punkty końcowe zapewniają ujednolicony interfejs do wywoływania wdrożeń modeli i zarządzania nimi w różnych typach obliczeniowych. Zobacz Co to są punkty końcowe usługi Azure Machine Learning?.
Przepływ pracy wdrażania modelu
Przepływ pracy wygląda podobnie niezależnie od tego, gdzie wdrażasz model:
- Zarejestrowanie modelu.
- Przygotuj skrypt wejścia.
- Przygotuj konfigurację wnioskowania.
- Wdróż model lokalnie, aby upewnić się, że wszystko działa.
- Wybierz docelowy obiekt obliczeniowy.
- Wdrażanie modelu w chmurze.
- Przetestuj wynikową usługę internetową.
Aby uzyskać więcej informacji na temat pojęć związanych z przepływem pracy wdrażania uczenia maszynowego, zobacz Zarządzanie, wdrażanie i monitorowanie modeli za pomocą usługi Azure Machine Learning.
Wymagania wstępne
DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji 1
Ważne
Niektóre polecenia interfejsu wiersza polecenia platformy Azure w tym artykule używają azure-cli-ml
rozszerzenia , lub w wersji 1 dla usługi Azure Machine Learning. Obsługa rozszerzenia w wersji 1 zakończy się 30 września 2025 r. Będzie można zainstalować rozszerzenie v1 i używać go do tej daty.
Zalecamy przejście do ml
rozszerzenia , lub w wersji 2 przed 30 września 2025 r. Aby uzyskać więcej informacji na temat rozszerzenia w wersji 2, zobacz Rozszerzenie interfejsu wiersza polecenia usługi Azure ML i zestaw Python SDK w wersji 2.
- Obszar roboczy usługi Azure Machine Learning. Aby uzyskać więcej informacji, zobacz Tworzenie zasobów obszaru roboczego.
- Model. W przykładach w tym artykule użyto wstępnie wytrenowanego modelu.
- Maszyna, która może uruchamiać platformę Docker, na przykład wystąpienie obliczeniowe.
Nawiązywanie połączenia z obszarem roboczym
DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji 1
Aby wyświetlić obszary robocze, do których masz dostęp, użyj następujących poleceń:
az login
az account set -s <subscription>
az ml workspace list --resource-group=<resource-group>
Rejestrowanie modelu
Typową sytuacją dla wdrożonej usługi uczenia maszynowego jest to, że potrzebne są następujące składniki:
- Zasoby reprezentujące konkretny model, który chcesz wdrożyć (na przykład plik modelu pytorch).
- Kod, który będzie uruchamiany w usłudze, która wykonuje model na danych wejściowych.
Usługa Azure Machine Learning pozwala na rozdzielenie wdrożenia na dwa oddzielne składniki, dzięki czemu można zachować ten sam kod i zaktualizować jedynie model. Mechanizm, za pomocą którego przesyłany jest model, definiujemy oddzielnie od kodu jako „rejestrowanie modelu”.
Podczas rejestrowania modelu przekazujemy go do chmury (na domyślne konto magazynu obszaru roboczego), a następnie instalujemy w tym samym środowisku obliczeniowym, w którym działa usługa internetowa.
W poniższych przykładach pokazano, jak zarejestrować model.
Ważne
Należy używać tylko modeli samodzielnie utworzonych lub uzyskanych z zaufanego źródła. Modele serializowane należy traktować jako kod, ponieważ w wielu popularnych formatach wykryto luki w zabezpieczeniach. Ponadto modele mogą być celowo wytrenowane ze złośliwym zamiarem, aby dawać stronnicze lub niedokładne dane wyjściowe.
DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji 1
Następujące polecenia pobierają model, a następnie rejestrują go w obszarze roboczym usługi Azure Machine Learning:
wget https://aka.ms/bidaf-9-model -O model.onnx --show-progress
az ml model register -n bidaf_onnx \
-p ./model.onnx \
-g <resource-group> \
-w <workspace-name>
Ustaw -p
ścieżkę folderu lub pliku, który chcesz zarejestrować.
Aby uzyskać więcej informacji na temat az ml model register
programu , zobacz dokumentację referencyjną.
Rejestrowanie modelu z zadania szkoleniowego usługi Azure Machine Learning
Jeśli musisz zarejestrować model utworzony wcześniej za pomocą zadania szkoleniowego usługi Azure Machine Learning, możesz określić eksperyment, przebieg i ścieżkę do modelu:
az ml model register -n bidaf_onnx --asset-path outputs/model.onnx --experiment-name myexperiment --run-id myrunid --tag area=qna
Parametr --asset-path
odnosi się do lokalizacji w chmurze modelu. W tym przykładzie używana jest ścieżka pojedynczego pliku. Aby dołączyć wiele plików do rejestracji modelu, ustaw --asset-path
ścieżkę folderu zawierającego pliki.
Aby uzyskać więcej informacji na temat az ml model register
programu , zobacz dokumentację referencyjną.
Uwaga
Model można również zarejestrować z pliku lokalnego za pośrednictwem portalu interfejsu użytkownika obszaru roboczego.
Obecnie istnieją dwie opcje przekazywania pliku modelu lokalnego w interfejsie użytkownika:
- Z plików lokalnych, które będą rejestrować model w wersji 2.
- Z plików lokalnych (opartych na strukturze), które będą rejestrować model w wersji 1.
Należy pamiętać, że tylko modele zarejestrowane za pośrednictwem wejścia Z plików lokalnych (na podstawie struktury) (które są znane jako modele v1) mogą być wdrażane jako usługi internetowe przy użyciu zestawu SDKv1/CLIv1.
Definiowanie fikcyjnego skryptu wpisu
Skrypt wejściowy odbiera dane przesyłane do wdrożonej usługi internetowej i przekazuje je do modelu. Następnie zwraca odpowiedź modelu na klienta. Skrypt jest specyficzny dla modelu. Skrypt wejściowy musi zrozumieć dane oczekiwane i zwracane przez model.
Dwie czynności, które należy wykonać w skry skrycie wejściowym, to:
- Ładowanie modelu (przy użyciu funkcji o nazwie
init()
) - Uruchamianie modelu na danych wejściowych (przy użyciu funkcji o nazwie
run()
)
W przypadku początkowego wdrożenia użyj fikcyjnego skryptu wpisu, który wyświetla odbierane dane.
import json
def init():
print("This is init")
def run(data):
test = json.loads(data)
print(f"received data {test}")
return f"test is {test}"
Zapisz ten plik jako echo_score.py
wewnątrz katalogu o nazwie source_dir
. Ten fikcyjny skrypt zwraca wysyłane do niego dane, więc nie używa modelu. Warto jednak przetestować, czy skrypt oceniania jest uruchomiony.
Definiowanie konfiguracji wnioskowania
W konfiguracji wnioskowania opisano kontener i pliki platformy Docker używane podczas inicjowania usługi internetowej. Wszystkie pliki w katalogu źródłowym, w tym podkatalogi, zostaną spakowane i przekazane do chmury podczas wdrażania usługi internetowej.
Poniższa konfiguracja wnioskowania określa, że wdrożenie uczenia maszynowego będzie używać pliku echo_score.py
w ./source_dir
katalogu do przetwarzania żądań przychodzących i że będzie używać obrazu platformy Docker z pakietami języka Python określonymi w project_environment
środowisku.
Podczas tworzenia środowiska projektu można użyć dowolnego środowiska wnioskowania usługi Azure Machine Learning wyselekcjonowanych jako podstawowego obrazu platformy Docker. Zainstalujemy wymagane zależności na górze i zapiszemy wynikowy obraz platformy Docker w repozytorium skojarzonym z obszarem roboczym.
Uwaga
Przekazywanie katalogu źródłowego wnioskowania usługi Azure Machine Learning nie uwzględnia pliku .gitignore ani amlignore
DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji 1
Konfigurację wnioskowania minimalnego można zapisać jako:
{
"entryScript": "echo_score.py",
"sourceDirectory": "./source_dir",
"environment": {
"docker": {
"arguments": [],
"baseDockerfile": null,
"baseImage": "mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04",
"enabled": false,
"sharedVolumes": true,
"shmSize": null
},
"environmentVariables": {
"EXAMPLE_ENV_VAR": "EXAMPLE_VALUE"
},
"name": "my-deploy-env",
"python": {
"baseCondaEnvironment": null,
"condaDependencies": {
"channels": [],
"dependencies": [
"python=3.6.2",
{
"pip": [
"azureml-defaults"
]
}
],
"name": "project_environment"
},
"condaDependenciesFile": null,
"interpreterPath": "python",
"userManagedDependencies": false
},
"version": "1"
}
}
Zapisz ten plik pod nazwą dummyinferenceconfig.json
.
Zapoznaj się z tym artykułem , aby zapoznać się z bardziej szczegółowym omówieniem konfiguracji wnioskowania.
Definiowanie konfiguracji wdrożenia
Konfiguracja wdrożenia określa ilość pamięci i rdzeni, których potrzebuje usługa internetowa w celu uruchomienia. Zawiera również szczegóły konfiguracji bazowej usługi internetowej. Na przykład konfiguracja wdrożenia umożliwia określenie, że usługa potrzebuje 2 gigabajtów pamięci, 2 rdzeni procesora CPU, 1 rdzeni procesora GPU i chcesz włączyć skalowanie automatyczne.
Opcje dostępne dla konfiguracji wdrożenia różnią się w zależności od wybranego celu obliczeniowego. We wdrożeniu lokalnym można określić, na którym porcie będzie obsługiwana usługa internetowa.
DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji 1
Wpisy w dokumencie deploymentconfig.json
są mapować na parametry dla LocalWebservice.deploy_configuration. W poniższej tabeli opisano mapowanie między jednostkami w dokumencie JSON i parametrami metody :
Jednostka JSON | Parametr metody | opis |
---|---|---|
computeType |
NA | Docelowy obiekt obliczeniowy. W przypadku miejsc docelowych lokalnych wartość musi mieć wartość local . |
port |
port |
Port lokalny, na którym można uwidocznić punkt końcowy HTTP usługi. |
Ten kod JSON to przykładowa konfiguracja wdrożenia do użycia z interfejsem wiersza polecenia:
{
"computeType": "local",
"port": 32267
}
Zapisz ten kod JSON jako plik o nazwie deploymentconfig.json
.
Aby uzyskać więcej informacji, zobacz schemat wdrażania.
Wdrażanie modelu uczenia maszynowego
Teraz możesz przystąpić do wdrażania modelu.
DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji 1
Zastąp bidaf_onnx:1
ciąg nazwą modelu i jego numerem wersji.
az ml model deploy -n myservice \
-m bidaf_onnx:1 \
--overwrite \
--ic dummyinferenceconfig.json \
--dc deploymentconfig.json \
-g <resource-group> \
-w <workspace-name>
Wywoływanie modelu
Sprawdźmy, czy model echa został pomyślnie wdrożony. Powinno być możliwe wykonywanie prostego żądania aktualności, a także żądanie oceniania:
DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji 1
curl -v http://localhost:32267
curl -v -X POST -H "content-type:application/json" \
-d '{"query": "What color is the fox", "context": "The quick brown fox jumped over the lazy dog."}' \
http://localhost:32267/score
Definiowanie skryptu wpisu
Teraz nadszedł czas, aby rzeczywiście załadować model. Najpierw zmodyfikuj skrypt wpisu:
import json
import numpy as np
import os
import onnxruntime
from nltk import word_tokenize
import nltk
def init():
nltk.download("punkt")
global sess
sess = onnxruntime.InferenceSession(
os.path.join(os.getenv("AZUREML_MODEL_DIR"), "model.onnx")
)
def run(request):
print(request)
text = json.loads(request)
qw, qc = preprocess(text["query"])
cw, cc = preprocess(text["context"])
# Run inference
test = sess.run(
None,
{"query_word": qw, "query_char": qc, "context_word": cw, "context_char": cc},
)
start = np.asscalar(test[0])
end = np.asscalar(test[1])
ans = [w for w in cw[start : end + 1].reshape(-1)]
print(ans)
return ans
def preprocess(word):
tokens = word_tokenize(word)
# split into lower-case word tokens, in numpy array with shape of (seq, 1)
words = np.asarray([w.lower() for w in tokens]).reshape(-1, 1)
# split words into chars, in numpy array with shape of (seq, 1, 1, 16)
chars = [[c for c in t][:16] for t in tokens]
chars = [cs + [""] * (16 - len(cs)) for cs in chars]
chars = np.asarray(chars).reshape(-1, 1, 1, 16)
return words, chars
Zapisz ten plik w pliku score.py
w pliku source_dir
.
Zwróć uwagę na użycie zmiennej środowiskowej AZUREML_MODEL_DIR
do zlokalizowania zarejestrowanego modelu. Po dodaniu niektórych pakietów.
DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji 1
{
"entryScript": "score.py",
"sourceDirectory": "./source_dir",
"environment": {
"docker": {
"arguments": [],
"baseDockerfile": null,
"baseImage": "mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04",
"enabled": false,
"sharedVolumes": true,
"shmSize": null
},
"environmentVariables": {
"EXAMPLE_ENV_VAR": "EXAMPLE_VALUE"
},
"name": "my-deploy-env",
"python": {
"baseCondaEnvironment": null,
"condaDependencies": {
"channels": [],
"dependencies": [
"python=3.6.2",
{
"pip": [
"azureml-defaults",
"nltk",
"numpy",
"onnxruntime"
]
}
],
"name": "project_environment"
},
"condaDependenciesFile": null,
"interpreterPath": "python",
"userManagedDependencies": false
},
"version": "2"
}
}
Zapisz ten plik jako inferenceconfig.json
Wdróż ponownie i wywołaj usługę
Ponownie wdróż usługę:
DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji 1
Zastąp bidaf_onnx:1
ciąg nazwą modelu i jego numerem wersji.
az ml model deploy -n myservice \
-m bidaf_onnx:1 \
--overwrite \
--ic inferenceconfig.json \
--dc deploymentconfig.json \
-g <resource-group> \
-w <workspace-name>
Następnie upewnij się, że możesz wysłać żądanie post do usługi:
DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji 1
curl -v -X POST -H "content-type:application/json" \
-d '{"query": "What color is the fox", "context": "The quick brown fox jumped over the lazy dog."}' \
http://localhost:32267/score
Wybieranie docelowego obiektu obliczeniowego
Docelowy obiekt obliczeniowy używany do hostowania modelu będzie mieć wpływ na koszt i dostępność wdrożonego punktu końcowego. Użyj tej tabeli, aby wybrać odpowiedni docelowy obiekt obliczeniowy.
Docelowy zasób obliczeniowy | Sposób użycia | Obsługa procesora GPU | opis |
---|---|---|---|
Lokalna usługa internetowa | Testowanie/debugowanie | Służy do ograniczonego testowania i rozwiązywania problemów. Przyspieszanie sprzętowe zależy od używania bibliotek w systemie lokalnym. | |
Azure Machine Learning Kubernetes | Wnioskowanie w czasie rzeczywistym | Tak | Uruchamianie obciążeń wnioskowania w chmurze. |
Azure Container Instances | Wnioskowanie w czasie rzeczywistym Zalecane tylko do celów tworzenia i testowania. |
Służy do obsługi obciążeń opartych na procesorach o niskiej skali, które wymagają mniej niż 48 GB pamięci RAM. Nie wymaga zarządzania klastrem. Nadaje się tylko do modeli o rozmiarze mniejszym niż 1 GB. Obsługiwane w projektancie. |
Uwaga
Podczas wybierania jednostki SKU klastra najpierw skaluj w górę, a następnie skaluj w poziomie. Zacznij od maszyny, która ma 150% pamięci RAM wymaganej przez model, sprofiluj wynik i znajdź maszynę, która ma wymaganą wydajność. Po tym, jak już wiesz, zwiększ liczbę maszyn, aby dopasować je do potrzeb współbieżnego wnioskowania.
Uwaga
Punkty końcowe usługi Azure Machine Learning (wersja 2) zapewniają ulepszone, prostsze środowisko wdrażania. Punkty końcowe obsługują scenariusze wnioskowania w czasie rzeczywistym i wsadowego. Punkty końcowe zapewniają ujednolicony interfejs do wywoływania wdrożeń modeli i zarządzania nimi w różnych typach obliczeniowych. Zobacz Co to są punkty końcowe usługi Azure Machine Learning?.
Wdrażanie w chmurze
Po potwierdzeniu, że usługa działa lokalnie i wybrano zdalny docelowy obiekt obliczeniowy, możesz przystąpić do wdrażania w chmurze.
Zmień konfigurację wdrożenia, aby odpowiadała wybranemu celowi obliczeniowemu, w tym przypadku usługi Azure Container Instances:
DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji 1
Opcje dostępne dla konfiguracji wdrożenia różnią się w zależności od wybranego celu obliczeniowego.
{
"computeType": "aci",
"containerResourceRequirements":
{
"cpu": 0.5,
"memoryInGB": 1.0
},
"authEnabled": true,
"sslEnabled": false,
"appInsightsEnabled": false
}
Zapisz ten plik jako re-deploymentconfig.json
.
Aby uzyskać więcej informacji, zobacz tę dokumentację.
Ponownie wdróż usługę:
DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji 1
Zastąp bidaf_onnx:1
ciąg nazwą modelu i jego numerem wersji.
az ml model deploy -n myservice \
-m bidaf_onnx:1 \
--overwrite \
--ic inferenceconfig.json \
--dc re-deploymentconfig.json \
-g <resource-group> \
-w <workspace-name>
Aby wyświetlić dzienniki usługi, użyj następującego polecenia:
az ml service get-logs -n myservice \
-g <resource-group> \
-w <workspace-name>
Wywoływanie zdalnej usługi internetowej
Podczas wdrażania zdalnego może być włączone uwierzytelnianie klucza. W poniższym przykładzie pokazano, jak pobrać klucz usługi za pomocą języka Python w celu utworzenia żądania wnioskowania.
import requests
import json
from azureml.core import Webservice
service = Webservice(workspace=ws, name="myservice")
scoring_uri = service.scoring_uri
# If the service is authenticated, set the key or token
key, _ = service.get_keys()
# Set the appropriate headers
headers = {"Content-Type": "application/json"}
headers["Authorization"] = f"Bearer {key}"
# Make the request and display the response and logs
data = {
"query": "What color is the fox",
"context": "The quick brown fox jumped over the lazy dog.",
}
data = json.dumps(data)
resp = requests.post(scoring_uri, data=data, headers=headers)
print(resp.text)
print(service.get_logs())
Zobacz artykuł dotyczący aplikacji klienckich do korzystania z usług internetowych, aby uzyskać więcej przykładowych klientów w innych językach.
Jak skonfigurować wiadomości e-mail w programie Studio
Aby rozpocząć odbieranie wiadomości e-mail po zakończeniu zadania, punktu końcowego online lub punktu końcowego wsadowego lub w przypadku wystąpienia problemu (niepowodzenie, anulowane), wykonaj następujące kroki:
- W usłudze Azure ML Studio przejdź do ustawień, wybierając ikonę koła zębatego.
- Wybierz kartę Powiadomienia e-mail.
- Przełącz, aby włączyć lub wyłączyć powiadomienia e-mail dla określonego zdarzenia.
Opis stanu usługi
Podczas wdrażania modelu może zostać wyświetlona zmiana stanu usługi podczas jego pełnego wdrażania.
W poniższej tabeli opisano różne stany usługi:
Stan usługi internetowej | opis | Stan końcowy? |
---|---|---|
Przechodzenie | Usługa jest w trakcie wdrażania. | Nie. |
Nieprawidłowy | Usługa została wdrożona, ale jest obecnie niemożliwa do osiągnięcia. | Nie. |
Nieplanowalne | W tej chwili nie można wdrożyć usługi z powodu braku zasobów. | Nie. |
Niepowodzenie | Wdrożenie usługi nie powiodło się z powodu błędu lub awarii. | Tak |
Dobra kondycja | Usługa jest w dobrej kondycji, a punkt końcowy jest dostępny. | Tak |
Napiwek
Podczas wdrażania obrazy platformy Docker dla celów obliczeniowych są kompilowane i ładowane z usługi Azure Container Registry (ACR). Domyślnie usługa Azure Machine Learning tworzy usługę ACR korzystającą z podstawowej warstwy usługi. Zmiana usługi ACR dla obszaru roboczego na warstwę Standardowa lub Premium może skrócić czas potrzebny na kompilowanie i wdrażanie obrazów do celów obliczeniowych. Aby uzyskać więcej informacji, zobacz Warstwy usługi Azure Container Registry.
Uwaga
Jeśli wdrażasz model w usłudze Azure Kubernetes Service (AKS), zalecamy włączenie usługi Azure Monitor dla tego klastra. Pomoże to zrozumieć ogólną kondycję klastra i użycie zasobów. Przydatne mogą być również następujące zasoby:
- Sprawdzanie zdarzeń usługi Resource Health wpływających na klaster usługi AKS
- Diagnostyka usługi Azure Kubernetes Service
Jeśli próbujesz wdrożyć model w klastrze, który jest w złej kondycji lub jest przeciążony, wystąpienie problemów jest bardzo prawdopodobne. Jeśli potrzebujesz pomocy w rozwiązywaniu problemów z klastrem usługi AKS, skontaktuj się z pomocą techniczną usługi AKS.
Usuwanie zasobów
DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji 1
# Get the current model id
import os
stream = os.popen(
'az ml model list --model-name=bidaf_onnx --latest --query "[0].id" -o tsv'
)
MODEL_ID = stream.read()[0:-1]
MODEL_ID
az ml service delete -n myservice
az ml service delete -n myaciservice
az ml model delete --model-id=<MODEL_ID>
Aby usunąć wdrożona usługę internetową, użyj polecenia az ml service delete <name of webservice>
.
Aby usunąć zarejestrowany model z obszaru roboczego, użyj polecenia az ml model delete <model id>
Przeczytaj więcej na temat usuwania usługi internetowej i usuwania modelu.
Następne kroki
- Rozwiązywanie problemów z niepowodzeniem wdrożenia
- Aktualizowanie usługi internetowej
- Wdrażanie jednym kliknięciem dla zautomatyzowanych przebiegów uczenia maszynowego w usłudze Azure Machine Learning Studio
- Zabezpieczanie usługi internetowej za pomocą usługi Azure Machine Learning przy użyciu protokołu TLS
- Monitorowanie modeli usługi Azure Machine Learning za pomocą usługi Application Insights
- Tworzenie alertów zdarzeń i wyzwalaczy dla wdrożeń modelu