Udostępnij za pośrednictwem


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:

  1. Zarejestrowanie modelu.
  2. Przygotuj skrypt wejścia.
  3. Przygotuj konfigurację wnioskowania.
  4. Wdróż model lokalnie, aby upewnić się, że wszystko działa.
  5. Wybierz docelowy obiekt obliczeniowy.
  6. Wdrażanie modelu w chmurze.
  7. 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-mlrozszerzenia , 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 mlrozszerzenia , 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 registerprogramu , 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 registerprogramu , 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:

  1. Ładowanie modelu (przy użyciu funkcji o nazwie init())
  2. 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:

  1. W usłudze Azure ML Studio przejdź do ustawień, wybierając ikonę koła zębatego.
  2. Wybierz kartę Powiadomienia e-mail.
  3. Przełącz, aby włączyć lub wyłączyć powiadomienia e-mail dla określonego zdarzenia.

Zrzut ekranu przedstawiający ustawienia programu Azure ML Studio na karcie powiadomień e-mail.

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:

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