Używanie punktów końcowych wsadowych do oceniania wsadowego
DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)
Zestaw SDK języka Python azure-ai-ml w wersji 2 (bieżąca)
Punkty końcowe usługi Batch zapewniają wygodny sposób wnioskowania na dużych ilościach danych. Upraszczają one proces hostowania modeli na potrzeby oceniania wsadowego, dzięki czemu można skupić się na uczeniu maszynowym, a nie infrastrukturze. Aby uzyskać więcej informacji, zobacz Co to są punkty końcowe usługi Azure Machine Learning?.
Użyj punktów końcowych wsadowych, gdy:
- Masz kosztowne modele, które wymagają dłuższego czasu na wnioskowanie.
- Należy wnioskować o dużych ilościach danych, dystrybuowanych w wielu plikach.
- Nie masz wymagań dotyczących małych opóźnień.
- Możesz skorzystać z równoległości.
W tym artykule dowiesz się, jak używać punktów końcowych wsadowych do oceniania wsadowego.
Porada
Zalecamy przeczytanie sekcji Scenariusze (zobacz pasek nawigacyjny po lewej stronie), aby dowiedzieć się więcej o sposobie używania punktów końcowych usługi Batch w określonych scenariuszach, w tym nlP, przetwarzania obrazów lub sposobu ich integracji z innymi usługami platformy Azure.
Informacje o tym przykładzie
W tym przykładzie wdrożymy model w celu rozwiązania klasycznego MNIST ("Zmodyfikowanego Narodowego Instytutu Standardów i technologii") problemu z rozpoznawaniem cyfr w celu przeprowadzenia wnioskowania wsadowego na dużych ilościach danych (plików obrazów). W pierwszej sekcji tego samouczka utworzymy wdrożenie wsadowe z modelem utworzonym przy użyciu narzędzia Torch. Takie wdrożenie stanie się naszym domyślnym wdrożeniem w punkcie końcowym. W drugiej połowie zobaczymy, jak utworzyć drugie wdrożenie przy użyciu modelu utworzonego za pomocą biblioteki TensorFlow (Keras), przetestować go, a następnie przełączyć punkt końcowy, aby rozpocząć korzystanie z nowego wdrożenia jako domyślnego.
Informacje zawarte w tym artykule są oparte na przykładach kodu zawartych w repozytorium azureml-examples . Aby uruchomić polecenia lokalnie bez konieczności kopiowania/wklejania kodu YAML i innych plików, najpierw sklonuj repozytorium. Następnie zmień katalogi na cli/endpoints/batch
, jeśli używasz interfejsu wiersza polecenia platformy Azure lub sdk/endpoints/batch
jeśli używasz zestawu SDK języka Python.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli/endpoints/batch
Postępuj zgodnie z instrukcjami w notesach Jupyter Notebook
Ten przykład można wykonać w poniższych notesach. W sklonowanym repozytorium otwórz notes : mnist-batch.ipynb.
Wymagania wstępne
Przed wykonaniem kroków opisanych w tym artykule upewnij się, że masz następujące wymagania wstępne:
Subskrypcja platformy Azure. Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto. Wypróbuj bezpłatną lub płatną wersję usługi Azure Machine Learning.
Interfejs wiersza polecenia platformy
ml
Azure i rozszerzenie do interfejsu wiersza polecenia platformy Azure. Aby uzyskać więcej informacji, zobacz Instalowanie, konfigurowanie i używanie interfejsu wiersza polecenia (wersja 2).Ważne
Przykłady interfejsu wiersza polecenia w tym artykule zakładają, że używasz powłoki Bash (lub zgodnej). Na przykład z systemu Linux lub Podsystem Windows dla systemu Linux.
Obszar roboczy usługi Azure Machine Learning. Jeśli go nie masz, wykonaj kroki opisane w temacie Instalowanie, konfigurowanie i używanie interfejsu wiersza polecenia (wersja 2), aby go utworzyć.
Nawiązywanie połączenia z obszarem roboczym
Najpierw połączmy się z obszarem roboczym usługi Azure Machine Learning, w którym będziemy pracować.
az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
Tworzenie zasobów obliczeniowych
Punkty końcowe usługi Batch są uruchamiane w klastrach obliczeniowych. Obsługują zarówno klastry obliczeniowe usługi Azure Machine Learning (AmlCompute) jak i klastry Kubernetes. Klastry są zasobem udostępnionym, dzięki czemu jeden klaster może hostować jedno lub wiele wdrożeń wsadowych (wraz z innymi obciążeniami w razie potrzeby).
W tym artykule użyto obliczeń utworzonych tutaj o nazwie batch-cluster
. Dostosuj je zgodnie z potrzebami i odwołuj się do zasobów obliczeniowych przy użyciu azureml:<your-compute-name>
polecenia lub utwórz je, jak pokazano.
az ml compute create -n batch-cluster --type amlcompute --min-instances 0 --max-instances 5
Uwaga
Nie są naliczane opłaty za obliczenia w tym momencie, ponieważ klaster pozostanie w 0 węzłach do momentu wywołania punktu końcowego wsadowego i przesłania zadania oceniania wsadowego. Dowiedz się więcej na temat zarządzania kosztami i optymalizowania pod kątem usługi AmlCompute.
Rejestrowanie modelu
Wdrożenia usługi Batch mogą wdrażać tylko modele zarejestrowane w obszarze roboczym. Ten krok można pominąć, jeśli model, który próbujesz wdrożyć, jest już zarejestrowany. W tym przypadku rejestrujemy model Torch dla popularnego problemu z rozpoznawaniem cyfr (MNIST).
Porada
Modele są skojarzone z wdrożeniem, a nie z punktem końcowym. Oznacza to, że pojedynczy punkt końcowy może obsługiwać różne modele lub różne wersje modelu w ramach tego samego punktu końcowego, o ile są one wdrażane w różnych wdrożeniach.
MODEL_NAME='mnist'
az ml model create --name $MODEL_NAME --type "custom_model" --path "./mnist/model/"
Tworzenie punktu końcowego wsadowego
Punkt końcowy wsadowy to punkt końcowy HTTPS, który klienci mogą wywoływać w celu wyzwolenia zadania oceniania wsadowego. Zadanie oceniania wsadowego to zadanie, które ocenia wiele danych wejściowych (aby uzyskać więcej, zobacz Co to są punkty końcowe wsadowe?). Wdrożenie wsadowe to zestaw zasobów obliczeniowych hostujących model, który wykonuje rzeczywiste ocenianie wsadowe. Jeden punkt końcowy wsadowy może mieć wiele wdrożeń wsadowych.
Porada
Jedno z wdrożeń wsadowych będzie służyć jako domyślne wdrożenie punktu końcowego. Domyślne wdrożenie będzie używane do wykonywania rzeczywistego oceniania wsadowego po wywołaniu punktu końcowego. Dowiedz się więcej o punktach końcowych wsadowych i wdrożeniu wsadowym.
Kroki
Zdecyduj o nazwie punktu końcowego. Nazwa punktu końcowego zostanie zakończona identyfikatorem URI skojarzonym z punktem końcowym. W związku z tym nazwy punktów końcowych wsadowych muszą być unikatowe w regionie świadczenia usługi Azure. Na przykład może istnieć tylko jeden punkt końcowy wsadowy o nazwie
mybatchendpoint
w plikuwestus2
.W takim przypadku umieśćmy nazwę punktu końcowego w zmiennej, aby można było ją łatwo odwoływać później.
ENDPOINT_NAME="mnist-batch"
Konfigurowanie punktu końcowego wsadowego
Poniższy plik YAML definiuje punkt końcowy wsadowy, który można uwzględnić w poleceniu interfejsu wiersza polecenia na potrzeby tworzenia punktu końcowego wsadowego. W repozytorium ten plik znajduje się w lokalizacji
/cli/endpoints/batch/batch-endpoint.yml
.mnist-endpoint.yml
$schema: https://azuremlschemas.azureedge.net/latest/batchEndpoint.schema.json name: mnist-batch description: A batch endpoint for scoring images from the MNIST dataset. auth_mode: aad_token
W poniższej tabeli opisano kluczowe właściwości punktu końcowego. Aby uzyskać pełny schemat YAML punktu końcowego wsadowego, zobacz Schemat YAML punktu końcowego wsadowego interfejsu wiersza polecenia (wersja 2).
Klucz Opis name
Nazwa punktu końcowego partii. Musi być unikatowa na poziomie regionu świadczenia usługi Azure. description
Opis punktu końcowego wsadowego. Ta właściwość jest opcjonalna. auth_mode
Metoda uwierzytelniania punktu końcowego wsadowego. Obecnie obsługiwane jest tylko uwierzytelnianie oparte na tokenach usługi Azure Active Directory ( aad_token
).defaults.deployment_name
Nazwa wdrożenia, które będzie służyć jako domyślne wdrożenie punktu końcowego. Utwórz punkt końcowy:
Uruchom następujący kod, aby utworzyć wdrożenie wsadowe w punkcie końcowym wsadowym i ustawić go jako domyślne wdrożenie.
az ml batch-endpoint create --name $ENDPOINT_NAME
Tworzenie wdrożenia wsadowego
Wdrożenie to zestaw zasobów wymaganych do hostowania modelu, który wykonuje rzeczywiste wnioskowanie. Aby utworzyć wdrożenie wsadowe, potrzebne są wszystkie następujące elementy:
- Zarejestrowany model w obszarze roboczym.
- Kod do oceny modelu.
- Środowisko, w którym działa model.
- Wstępnie utworzone ustawienia zasobów i zasobów.
Wdrożenia wsadowe wymagają skryptu oceniania wskazującego sposób wykonywania danego modelu i sposób przetwarzania danych wejściowych. Punkty końcowe usługi Batch obsługują skrypty utworzone w języku Python. W tym przypadku wdrażamy model, który odczytuje pliki obrazów reprezentujące cyfry i dane wyjściowe odpowiadającej mu cyfry. Skrypt oceniania jest następujący:
Uwaga
W przypadku modeli MLflow usługa Azure Machine Learning automatycznie generuje skrypt oceniania, więc nie musisz go podawać. Jeśli model jest modelem MLflow, możesz pominąć ten krok. Aby uzyskać więcej informacji na temat sposobu pracy punktów końcowych wsadowych z modelami MLflow, zobacz dedykowany samouczek Korzystanie z modeli MLflow we wdrożeniach wsadowych.
Ostrzeżenie
Jeśli wdrażasz model zautomatyzowanego uczenia maszynowego w punkcie końcowym wsadowym, zwróć uwagę, że skrypt oceniania, który zautomatyzowane uczenie maszynowe zapewnia tylko działanie dla punktów końcowych online i nie jest przeznaczony do wykonywania wsadowego. Zobacz Tworzenie skryptów oceniania dla wdrożeń wsadowych , aby dowiedzieć się, jak utworzyć jeden w zależności od tego, co robi model.
mnist/code/batch_driver.py
# Copyright (c) Microsoft. All rights reserved. # Licensed under the MIT license. import os import numpy as np import pandas as pd import tensorflow as tf from PIL import Image from azureml.core import Model def init(): global g_tf_sess # AZUREML_MODEL_DIR is an environment variable created during deployment # It is the path to the model folder (./azureml-models) # Please provide your model's folder name if there's one model_path = os.path.join(os.environ["AZUREML_MODEL_DIR"], "model") # contruct graph to execute tf.reset_default_graph() saver = tf.train.import_meta_graph(os.path.join(model_path, "mnist-tf.model.meta")) g_tf_sess = tf.Session(config=tf.ConfigProto(device_count={"GPU": 0})) saver.restore(g_tf_sess, os.path.join(model_path, "mnist-tf.model")) def run(mini_batch): print(f"run method start: {__file__}, run({mini_batch})") resultList = [] in_tensor = g_tf_sess.graph.get_tensor_by_name("network/X:0") output = g_tf_sess.graph.get_tensor_by_name("network/output/MatMul:0") for image in mini_batch: # prepare each image data = Image.open(image) np_im = np.array(data).reshape((1, 784)) # perform inference inference_result = output.eval(feed_dict={in_tensor: np_im}, session=g_tf_sess) # find best probability, and add to result list best_result = np.argmax(inference_result) resultList.append([os.path.basename(image), best_result]) return pd.DataFrame(resultList)
Utwórz środowisko, w którym zostanie uruchomione wdrożenie wsadowe. Takie środowisko musi zawierać pakiety
azureml-core
iazureml-dataset-runtime[fuse]
, które są wymagane przez punkty końcowe wsadowe, a także wszelkie zależności wymagane przez kod do uruchomienia. W takim przypadku zależności zostały przechwycone w elemencieconda.yml
:mnist/environment/conda.yml
name: mnist-env channels: - conda-forge dependencies: - python=3.9.16 - pip<22.0 - pip: - tensorflow==2.11.0 - pillow - pandas - azureml-core - azureml-dataset-runtime[fuse]
Ważne
Pakiety
azureml-core
iazureml-dataset-runtime[fuse]
są wymagane przez wdrożenia wsadowe i powinny być uwzględniane w zależnościach środowiska.Wskaż środowisko w następujący sposób:
Definicja środowiska zostanie uwzględniona w definicji wdrożenia jako środowisko anonimowe. Zostaną wyświetlone następujące wiersze we wdrożeniu:
environment: conda_file: ./mnist/environment/conda.yml image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
Ostrzeżenie
Wyselekcjonowane środowiska nie są obsługiwane we wdrożeniach wsadowych. Musisz wskazać własne środowisko. W celu uproszczenia procesu zawsze można użyć obrazu podstawowego środowiska wyselekcjonowanych.
Tworzenie definicji wdrożenia
mnist-torch-deployment.yml
$schema: https://azuremlschemas.azureedge.net/latest/batchDeployment.schema.json name: mnist-torch-dpl description: A deployment using Torch to solve the MNIST classification dataset. endpoint_name: mnist-batch model: path: ./mnist/model/ code_configuration: code: ./mnist/code/ scoring_script: batch_driver.py environment: conda_file: ./mnist/environment/conda.yml image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest compute: azureml:batch-cluster resources: instance_count: 1 max_concurrency_per_instance: 2 mini_batch_size: 10 output_action: append_row output_file_name: predictions.csv retry_settings: max_retries: 3 timeout: 30 error_threshold: -1 logging_level: info
Aby zapoznać się ze schematem YAML pełnego wdrożenia wsadowego, zobacz Schemat yaML wdrożenia wsadowego interfejsu wiersza polecenia (wersja 2).
Klucz Opis name
Nazwa wdrożenia. endpoint_name
Nazwa punktu końcowego do utworzenia wdrożenia w obszarze. model
Model, który ma być używany do oceniania wsadowego. W przykładzie zdefiniowano wbudowany model przy użyciu polecenia path
. Pliki modelu zostaną automatycznie przekazane i zarejestrowane przy użyciu automatycznie wygenerowanej nazwy i wersji. Aby uzyskać więcej opcji, postępuj zgodnie ze schematem modelu . Najlepszym rozwiązaniem dla scenariuszy produkcyjnych jest utworzenie modelu oddzielnie i odwołanie do niego w tym miejscu. Aby odwołać się do istniejącego modelu, użyjazureml:<model-name>:<model-version>
składni.code_configuration.code.path
Katalog lokalny zawierający cały kod źródłowy języka Python w celu oceny modelu. code_configuration.scoring_script
Plik języka Python w powyższym katalogu. Ten plik musi mieć init()
funkcję irun()
funkcję.init()
Użyj funkcji w przypadku dowolnego kosztownego lub wspólnego przygotowania (na przykład załaduj model w pamięci).init()
zostanie wywołana tylko raz na początku procesu. Służyrun(mini_batch)
do oceniania każdego wpisu; wartośćmini_batch
jest listą ścieżek plików. Funkcjarun()
powinna zwrócić ramkę danych biblioteki pandas lub tablicę. Każdy zwrócony element wskazuje jeden pomyślny przebieg elementu wejściowego w elemeciemini_batch
. Aby uzyskać więcej informacji na temat tworzenia skryptu oceniania, zobacz Opis skryptu oceniania.environment
Środowisko do oceny modelu. W przykładzie zdefiniowano środowisko wbudowane przy użyciu elementów conda_file
iimage
. Zależnościconda_file
zostaną zainstalowane na platformieimage
. Środowisko zostanie automatycznie zarejestrowane przy użyciu automatycznie wygenerowanej nazwy i wersji. Aby uzyskać więcej opcji, postępuj zgodnie ze schematem środowiska . Najlepszym rozwiązaniem dla scenariuszy produkcyjnych jest utworzenie środowiska oddzielnie i odwoływanie się do niego w tym miejscu. Aby odwołać się do istniejącego środowiska, użyjazureml:<environment-name>:<environment-version>
składni .compute
Obliczenia do uruchamiania oceniania wsadowego. W przykładzie użyto utworzonego batch-cluster
na początku elementu i odwołuje się do niego przy użyciuazureml:<compute-name>
składni.resources.instance_count
Liczba wystąpień, które mają być używane dla każdego zadania oceniania wsadowego. max_concurrency_per_instance
[Opcjonalnie] Maksymalna liczba przebiegów równoległych scoring_script
na wystąpienie.mini_batch_size
[Opcjonalnie] Liczba plików, które scoring_script
może przetworzyć w jednymrun()
wywołaniu.output_action
[Opcjonalnie] Sposób organizowania danych wyjściowych w pliku wyjściowym. append_row
Spowoduje scalenie wszystkichrun()
zwróconych wyników wyjściowych do jednego pliku o nazwieoutput_file_name
.summary_only
Nie scala wyników wyjściowych i obliczaerror_threshold
tylko wartość .output_file_name
[Opcjonalnie] Nazwa pliku wyjściowego oceniania wsadowego dla . append_row
output_action
retry_settings.max_retries
[Opcjonalnie] Liczba prób maksymalnej liczby nieudanych scoring_script
run()
prób.retry_settings.timeout
[Opcjonalnie] Limit czasu w sekundach dla oceniania scoring_script
run()
minisadowej.error_threshold
[Opcjonalnie] Liczba błędów oceniania pliku wejściowego, które powinny być ignorowane. Jeśli liczba błędów dla wszystkich danych wejściowych przekroczy tę wartość, zadanie oceniania wsadowego zostanie zakończone. W przykładzie użyto -1
elementu , który wskazuje, że dowolna liczba niepowodzeń jest dozwolona bez kończenia zadania oceniania wsadowego.logging_level
[Opcjonalnie] Szczegółowość dziennika. Wartości w coraz większej szczegółowości to: OSTRZEŻENIE, INFORMACJE i DEBUGOWANIE. Utwórz wdrożenie:
Uruchom następujący kod, aby utworzyć wdrożenie wsadowe w punkcie końcowym partii i ustawić je jako domyślne wdrożenie.
::: az ml batch-deployment create --file mnist-torch-deployment.yml --endpoint-name $ENDPOINT_NAME --set-default :::
Porada
Parametr
--set-default
ustawia nowo utworzone wdrożenie jako domyślne wdrożenie punktu końcowego. Jest to wygodny sposób tworzenia nowego domyślnego wdrożenia punktu końcowego, szczególnie w przypadku pierwszego utworzenia wdrożenia. Najlepszym rozwiązaniem w przypadku scenariuszy produkcyjnych może być utworzenie nowego wdrożenia bez ustawienia domyślnego, zweryfikowanie go i zaktualizowanie domyślnego wdrożenia później. Aby uzyskać więcej informacji, zobacz sekcję Wdrażanie nowego modelu .Uwaga
Jak działa dystrybucja?:
Wdrożenia wsadowe dystrybuują pracę na poziomie pliku, co oznacza, że folder zawierający 100 plików z minisadami 10 plików spowoduje wygenerowanie 10 partii 10 plików. Należy zauważyć, że będzie to miało miejsce niezależnie od rozmiaru plików, których dotyczy problem. Jeśli pliki są zbyt duże, aby zostały przetworzone w dużych minisadach, sugerujemy podzielenie plików w mniejszych plikach w celu osiągnięcia wyższego poziomu równoległości lub zmniejszenie liczby plików na minisadową. W tej chwili wdrożenie wsadowe nie może uwzględniać niesymetryczności w dystrybucji rozmiaru pliku.
Sprawdź szczegóły punktu końcowego i wdrożenia wsadowego.
Służy
show
do sprawdzania szczegółów punktu końcowego i wdrożenia. Aby sprawdzić wdrożenie wsadowe, uruchom następujący kod:az ml batch-deployment show --name $DEPLOYMENT_NAME --endpoint-name $ENDPOINT_NAME
Uruchamianie punktu końcowego i konfigurowanie danych wejściowych i wyjściowych
Wywoływanie punktu końcowego wsadowego wyzwala zadanie oceniania wsadowego. Zadanie name
zostanie zwrócone z odpowiedzi wywołania i może służyć do śledzenia postępu oceniania wsadowego. Zadanie oceniania wsadowego jest uruchamiane przez pewien czas. Dzieli on całe dane wejściowe na wiele mini_batch
procesów i równolegle w klastrze obliczeniowym. Dane wyjściowe zadania oceniania wsadowego będą przechowywane w magazynie w chmurze w domyślnym magazynie obiektów blob obszaru roboczego lub określonym magazynie.
JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input https://azuremlexampledata.blob.core.windows.net/data/mnist/sample --input-type uri_folder --query name -o tsv)
Konfigurowanie danych wejściowych zadania
Punkty końcowe usługi Batch obsługują odczytywanie plików lub folderów znajdujących się w różnych lokalizacjach. Aby dowiedzieć się więcej o tym, jak obsługiwane typy i jak je określić, przeczytaj Temat Uzyskiwanie dostępu do danych z zadań punktów końcowych wsadowych.
Porada
Lokalne foldery danych/pliki mogą być używane podczas wykonywania punktów końcowych wsadowych z poziomu interfejsu wiersza polecenia usługi Azure Machine Learning lub zestawu Azure Machine Learning SDK dla języka Python. Jednak ta operacja spowoduje przekazanie danych lokalnych do domyślnego magazynu danych usługi Azure Machine Learning w obszarze roboczym, nad którym pracujesz.
Ważne
Powiadomienie o wycofaniu: Zestawy danych typu FileDataset
(V1) są przestarzałe i zostaną wycofane w przyszłości. Istniejące punkty końcowe wsadowe korzystające z tej funkcji będą nadal działać, ale punkty końcowe wsadowe utworzone za pomocą ogólnie dostępnej wersji CLIv2 (2.4.0 i nowszej) lub ogólnie dostępnego interfejsu API REST (2022-05-01 i nowsze) nie będą obsługiwać zestawu danych w wersji 1.
Konfigurowanie lokalizacji wyjściowej
Wyniki oceniania wsadowego są domyślnie przechowywane w domyślnym magazynie obiektów blob obszaru roboczego w folderze o nazwie według nazwy zadania (identyfikator GUID generowany przez system). Możesz skonfigurować miejsce przechowywania danych wyjściowych oceniania podczas wywoływania punktu końcowego wsadowego.
Służy output-path
do konfigurowania dowolnego folderu w zarejestrowanym magazynie danych usługi Azure Machine Learning. Składnia dla elementu --output-path
jest taka sama jak --input
w przypadku określania folderu, azureml://datastores/<datastore-name>/paths/<path-on-datastore>/
czyli . Użyj polecenia --set output_file_name=<your-file-name>
, aby skonfigurować nową nazwę pliku wyjściowego.
export OUTPUT_FILE_NAME=predictions_`echo $RANDOM`.csv
JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input https://azuremlexampledata.blob.core.windows.net/data/mnist/sample --input-type uri_folder --output-path azureml://datastores/workspaceblobstore/paths/$ENDPOINT_NAME --set output_file_name=$OUTPUT_FILE_NAME --query name -o tsv)
Ostrzeżenie
Musisz użyć unikatowej lokalizacji wyjściowej. Jeśli plik wyjściowy istnieje, zadanie oceniania wsadowego zakończy się niepowodzeniem.
Ważne
Podobnie jak w przypadku danych wejściowych, w przypadku danych wyjściowych są obsługiwane tylko magazyny danych usługi Azure Machine Learning działające na kontach usługi Blob Storage.
Zastępowanie konfiguracji wdrożenia dla każdego zadania
Niektóre ustawienia można zastąpić podczas wywoływania, aby jak najlepiej wykorzystać zasoby obliczeniowe i zwiększyć wydajność. Następujące ustawienia można skonfigurować dla poszczególnych zadań:
- Użyj liczby wystąpień , aby zastąpić liczbę wystąpień do żądania z klastra obliczeniowego. Na przykład w przypadku większej ilości danych wejściowych można użyć większej liczby wystąpień, aby przyspieszyć kompleksowe ocenianie wsadowe.
- Użyj rozmiaru minisadowego , aby zastąpić liczbę plików do uwzględnienia w każdej minisadowej partii. Liczba minisadów jest określana przez łączną liczbę plików wejściowych i mini_batch_size. Mniejsze mini_batch_size generuje więcej minisadów. Minisady mogą być uruchamiane równolegle, ale mogą istnieć dodatkowe obciążenia związane z planowaniem i wywołaniem.
- Inne ustawienia można zastąpić innymi ustawieniami, takimi jak maksymalne ponawianie prób, przekroczenie limitu czasu i próg błędu. Te ustawienia mogą mieć wpływ na końcowy czas oceniania wsadowego dla różnych obciążeń.
export OUTPUT_FILE_NAME=predictions_`echo $RANDOM`.csv
JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input https://azuremlexampledata.blob.core.windows.net/data/mnist/sample --input-type uri_folder --mini-batch-size 20 --instance-count 5 --query name -o tsv)
Monitorowanie postępu wykonywania zadania oceniania wsadowego
Zadania oceniania wsadowego zwykle zajmują trochę czasu, aby przetworzyć cały zestaw danych wejściowych.
Aby wyświetlić zadanie, możesz użyć interfejsu wiersza polecenia job show
. Uruchom następujący kod, aby sprawdzić stan zadania z poprzedniego wywołania punktu końcowego. Aby dowiedzieć się więcej na temat poleceń zadań, uruchom polecenie az ml job -h
.
STATUS=$(az ml job show -n $JOB_NAME --query status -o tsv)
echo $STATUS
if [[ $STATUS == "Completed" ]]
then
echo "Job completed"
elif [[ $STATUS == "Failed" ]]
then
echo "Job failed"
exit 1
else
echo "Job status not failed or completed"
exit 2
fi
Sprawdzanie wyników oceniania wsadowego
Wykonaj następujące kroki, aby wyświetlić wyniki oceniania w Eksplorator usługi Azure Storage po zakończeniu zadania:
Uruchom następujący kod, aby otworzyć zadanie oceniania wsadowego w Azure Machine Learning studio. Link do programu Job Studio jest również uwzględniony w odpowiedzi elementu
invoke
, jako wartośćinteractionEndpoints.Studio.endpoint
.az ml job show -n $JOB_NAME --web
Na wykresie zadania wybierz
batchscoring
krok.Wybierz kartę Dane wyjściowe i dzienniki , a następnie wybierz pozycję Pokaż dane wyjściowe.
W obszarze Dane wyjściowe wybierz ikonę, aby otworzyć Eksplorator usługi Storage.
Wyniki oceniania w Eksplorator usługi Storage są podobne do następującej przykładowej strony:
Dodawanie wdrożeń do punktu końcowego
Po utworzeniu punktu końcowego wsadowego z wdrożeniem możesz kontynuować udoskonalanie modelu i dodawanie nowych wdrożeń. Punkty końcowe usługi Batch będą nadal obsługiwać wdrożenie domyślne podczas opracowywania i wdrażania nowych modeli w ramach tego samego punktu końcowego. Wdrożenia nie mogą wpływać na siebie nawzajem.
W tym przykładzie dowiesz się, jak dodać drugie wdrożenie , które rozwiązuje ten sam problem MNIST, ale przy użyciu modelu utworzonego przy użyciu protokołu Keras i TensorFlow.
Dodawanie drugiego wdrożenia
Utwórz środowisko, w którym zostanie uruchomione wdrożenie wsadowe. Uwzględnij w środowisku dowolną zależność wymaganą przez kod do uruchomienia. Należy również dodać bibliotekę
azureml-core
, ponieważ jest ona wymagana do pracy wdrożeń wsadowych. Poniższa definicja środowiska zawiera wymagane biblioteki do uruchomienia modelu za pomocą bibliotek TensorFlow.Dla interfejsu wiersza polecenia usługi Azure Machine Learning nie jest wymagany dodatkowy krok. Definicja środowiska zostanie uwzględniona w pliku wdrożenia jako środowisko anonimowe.
Użyty plik conda wygląda następująco:
mnist-keras/environment/conda.yml
name: tensorflow-env channels: - conda-forge dependencies: - python=3.7 - pip - pip: - pandas - tensorflow - pillow - azureml-core - azureml-dataset-runtime[fuse]
Utwórz skrypt oceniania dla modelu:
mnist-keras/code/batch_driver.py
import os import numpy as np import pandas as pd import tensorflow as tf from os.path import basename from PIL import Image from tensorflow.keras.models import load_model def init(): global model # AZUREML_MODEL_DIR is an environment variable created during deployment model_path = os.path.join(os.environ["AZUREML_MODEL_DIR"], "model") # load the model model = load_model(model_path) def run(mini_batch): results = [] for image in mini_batch: data = Image.open(image) data = np.array(data) data_batch = tf.expand_dims(data, axis=0) # perform inference pred = model.predict(data_batch) # Compute probabilities, classes and labels pred_prob = tf.math.reduce_max(tf.math.softmax(pred, axis=-1)).numpy() pred_class = tf.math.argmax(pred, axis=-1).numpy() results.append([basename(image), pred_class[0], pred_prob]) return pd.DataFrame(results)
Tworzenie definicji wdrożenia
mnist-keras-deployment.yml
$schema: https://azuremlschemas.azureedge.net/latest/batchDeployment.schema.json name: mnist-keras-dpl description: A deployment using Keras with TensorFlow to solve the MNIST classification dataset. endpoint_name: mnist-batch model: path: ./mnist-keras/model/ code_configuration: code: ./mnist-keras/code/ scoring_script: batch_driver.py environment: conda_file: ./mnist-keras/environment/conda.yml image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest compute: azureml:batch-cluster resources: instance_count: 1 max_concurrency_per_instance: 2 mini_batch_size: 10 output_action: append_row output_file_name: predictions.csv
Utwórz wdrożenie:
Uruchom następujący kod, aby utworzyć wdrożenie wsadowe w punkcie końcowym wsadowym i ustawić go jako domyślne wdrożenie.
az ml batch-deployment create --file endpoints/batch/mnist-keras-deployment.yml --endpoint-name $ENDPOINT_NAME
Porada
Brak parametru
--set-default
w tym przypadku. Najlepszym rozwiązaniem dla scenariuszy produkcyjnych może być utworzenie nowego wdrożenia bez ustawienia domyślnego, zweryfikowanie go i zaktualizowanie domyślnego wdrożenia później.
Testowanie nie domyślnego wdrożenia wsadowego
Aby przetestować nowe wdrożenie inne niż domyślne, musisz znać nazwę wdrożenia, które chcesz uruchomić.
DEPLOYMENT_NAME="mnist-keras-dpl"
JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --deployment-name $DEPLOYMENT_NAME --input https://azuremlexampledata.blob.core.windows.net/data/mnist/sample --input-type uri_folder --query name -o tsv)
Powiadomienie --deployment-name
służy do określania wdrożenia, które chcemy wykonać. Ten parametr umożliwia invoke
wdrożenie inne niż domyślne i nie spowoduje zaktualizowania domyślnego wdrożenia punktu końcowego wsadowego.
Aktualizowanie domyślnego wdrożenia wsadowego
Chociaż można wywołać określone wdrożenie wewnątrz punktu końcowego, zazwyczaj należy wywołać sam punkt końcowy i pozwolić punktowi końcowemu zdecydować, które wdrożenie ma być używane. Takie wdrożenie nosi nazwę "domyślnego" wdrożenia. Daje to możliwość zmiany domyślnego wdrożenia, a tym samym zmiany modelu obsługującego wdrożenie bez zmiany umowy z użytkownikiem wywołującym punkt końcowy. Aby zaktualizować wdrożenie domyślne, użyj następującej instrukcji:
az ml batch-endpoint update --name $ENDPOINT_NAME --set defaults.deployment_name=$DEPLOYMENT_NAME
Usuwanie punktu końcowego wsadowego i wdrożenia
Jeśli nie zamierzasz używać starego wdrożenia wsadowego, usuń go, uruchamiając następujący kod. --yes
służy do potwierdzenia usunięcia.
az ml batch-deployment delete --name nonmlflowdp --endpoint-name $ENDPOINT_NAME --yes
Uruchom następujący kod, aby usunąć punkt końcowy wsadowy i wszystkie podstawowe wdrożenia. Zadania oceniania wsadowego nie zostaną usunięte.
az ml batch-endpoint delete --name $ENDPOINT_NAME --yes