Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
DOTYCZY:
Rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji 2 (current)
Zestaw PYTHON SDK azure-ai-ml v2 (bieżąca)
Punkty końcowe usługi Batch umożliwiają wdrażanie modeli, które uruchamiają wnioskowanie na dużych ilościach danych. Te punkty końcowe upraszczają hostowanie modeli oceniania wsadowego, dzięki czemu można skoncentrować się na uczeniu maszynowym zamiast infrastruktury.
Używanie punktów końcowych wsadowych do wdrażania modeli w przypadku:
- Używasz drogich modeli do wnioskowania, które zajmują więcej czasu.
- Wnioskowanie jest wykonywane na dużych ilościach danych dystrybuowanych w wielu plikach.
- Nie potrzebujesz małych opóźnień.
- Korzystasz z parallelizacji.
W tym artykule pokazano, jak za pomocą punktu końcowego wsadowego wdrożyć model uczenia maszynowego, który rozwiązuje klasyczny problem rozpoznawania cyfr MNIST (Zmodyfikowany Narodowy Instytut Standardów i Technologii). Wdrożony model wykonuje wnioskowanie wsadowe na dużych ilościach danych, takich jak pliki obrazów. Proces rozpoczyna się od przygotowania wsadowego wdrożenia modelu stworzonego za pomocą frameworku Torch. To wdrożenie staje się ustawieniem domyślnym w punkcie końcowym. Później utwórz drugie wdrożenie modelu skompilowane przy użyciu biblioteki TensorFlow (Keras), przetestuj drugie wdrożenie i ustaw je jako domyślne wdrożenie punktu końcowego.
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.
Obszar roboczy usługi Azure Machine Learning. Jeśli go nie masz, wykonaj kroki opisane w artykule How to manage workspaces (Jak zarządzać obszarami roboczymi ), aby je utworzyć.
Aby wykonać następujące zadania, upewnij się, że masz te uprawnienia w obszarze roboczym:
Aby utworzyć i zarządzać punktami końcowymi i wdrożeniami wsadowymi: użyj roli właściciela, roli współautora lub roli niestandardowej zezwalającej na
Microsoft.MachineLearningServices/workspaces/batchEndpoints/*usługę .Aby utworzyć wdrożenia usługi ARM w grupie zasobów obszaru roboczego: użyj roli właściciela, roli współautora lub roli niestandardowej zezwalającej
Microsoft.Resources/deployments/writew grupie zasobów, w której wdrożono obszar roboczy.
Aby pracować z usługą Azure Machine Learning, musisz zainstalować następujące oprogramowanie:
DOTYCZY:
Rozszerzenie interfejsu wiersza polecenia platformy Azure ml w wersji 2 (bieżąca)Interfejs wiersza polecenia
ml.az extension add -n ml
Klonowanie repozytorium przykładów
Przykład w tym artykule jest oparty 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, a następnie zmień katalogi na folder:
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli/endpoints/batch/deploy-models/mnist-classifier
Przygotowywanie systemu
Nawiązywanie połączenia z obszarem roboczym
Najpierw połącz się z obszarem roboczym usługi Azure Machine Learning, w którym pracujesz.
Jeśli nie ustawiono jeszcze ustawień domyślnych dla interfejsu wiersza polecenia platformy Azure, zapisz ustawienia domyślne. Aby uniknąć wielokrotnego wprowadzania wartości dla subskrypcji, obszaru roboczego, grupy zasobów i lokalizacji, uruchom następujący kod:
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 działają w klastrach obliczeniowych i obsługują klastry obliczeniowe usługi Azure Machine Learning (AmlCompute) i klastry Kubernetes. Klastry są zasobem udostępnionym, dlatego jeden klaster może hostować jedno lub wiele wdrożeń wsadowych (wraz z innymi obciążeniami, jeśli jest to konieczne).
Utwórz obliczenia o nazwie batch-cluster, jak pokazano w poniższym kodzie. Dostosuj je zgodnie z potrzebami i odwołaj się do zasobów obliczeniowych przy użyciu polecenia azureml:<your-compute-name>.
az ml compute create -n batch-cluster --type amlcompute --min-instances 0 --max-instances 5
Uwaga
W tym momencie nie są naliczane opłaty za zasoby obliczeniowe, ponieważ klaster pozostaje w 0 węzłach do momentu wywołania punktu końcowego wsadowego i przesłania zadania oceniania wsadowego. Aby uzyskać więcej informacji na temat kosztów obliczeń, zobacz Zarządzanie kosztami i optymalizowanie kosztów dla usługi AmlCompute.
Tworzenie punktu końcowego wsadowego
Punkt końcowy wsadowy to punkt końcowy HTTPS, który klienci wywołują w celu wyzwolenia zadania oceniania wsadowego. Zadanie oceniania wsadowego ocenia wiele danych wejściowych. Wdrożenie wsadowe to zestaw zasobów obliczeniowych hostujących model, który wykonuje ocenianie wsadowe (lub wnioskowanie wsadowe). Jeden punkt końcowy wsadowy może mieć wiele wdrożeń wsadowych. Aby uzyskać więcej informacji na temat punktów końcowych wsadowych, zobacz "Co to są punkty końcowe wsadowe?".
Napiwek
Jedno z wdrożeń wsadowych służy jako domyślne wdrożenie punktu końcowego. Po wywołaniu punktu końcowego domyślne wdrożenie wykonuje ocenianie wsadowe. Aby uzyskać więcej informacji na temat punktów końcowych i wdrożeń wsadowych, zobacz batch endpoints and batch deployment (Punkty końcowe wsadowe i wdrażanie wsadowe).
Nadaj punktowi końcowego nazwę. Nazwa punktu końcowego musi być unikatowa w regionie świadczenia usługi Azure, ponieważ nazwa jest uwzględniona w identyfikatorze URI punktu końcowego. Na przykład może istnieć tylko jeden punkt końcowy wsadowy o nazwie
mybatchendpointw plikuwestus2.Umieść nazwę punktu końcowego w zmiennej, aby odwoływać się do niej łatwo później.
ENDPOINT_NAME="mnist-batch"Konfigurowanie punktu końcowego wsadowego
Poniższy plik YAML definiuje punkt końcowy wsadowy. Użyj tego pliku z poleceniem interfejsu wiersza poleceń na potrzeby tworzenia wsadowego punktu końcowego.
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. tags: type: deep-learningW poniższej tabeli opisano kluczowe właściwości punktu końcowego. Aby uzyskać pełny schemat YAML punktu końcowego, zobacz Schemat YAML punktu końcowego wsadowego interfejsu wiersza polecenia (wersja 2).
Klawisz opis nameNazwa punktu końcowego partii. Musi być unikatowa na poziomie regionu świadczenia usługi Azure. descriptionOpis punktu końcowego wsadowego. Ta właściwość jest opcjonalna. tagsTagi do uwzględnienia w punkcie końcowym. Ta właściwość jest opcjonalna. Utwórz punkt końcowy:
Uruchom ten kod, aby utworzyć punkt końcowy wsadowy.
az ml batch-endpoint create --file endpoint.yml --name $ENDPOINT_NAME
Tworzenie wdrożenia wsadowego
Wdrożenie modelu to zestaw zasobów wymaganych do hostowania modelu, który wykonuje rzeczywiste wnioskowanie. Do utworzenia wdrożenia modelu wsadowego potrzebne są następujące elementy:
- Zarejestrowany model w obszarze roboczym
- Kod oceniania modelu
- Środowisko z zainstalowanymi zależnościami modelu
- Wstępnie utworzone ustawienia zasobów i zasobów
Zacznij od zarejestrowania modelu, który ma zostać wdrożony — modelu Torch dla popularnego problemu z rozpoznawaniem cyfr (MNIST). Wdrożenia usługi Batch mogą wdrażać tylko modele zarejestrowane w obszarze roboczym. Ten krok można pominąć, jeśli model, który chcesz wdrożyć, jest już zarejestrowany.
Napiwek
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 wersje modelu) w tym samym punkcie końcowym, o ile różne modele (lub wersje modelu) są wdrażane w różnych wdrożeniach.
MODEL_NAME='mnist-classifier-torch' az ml model create --name $MODEL_NAME --type "custom_model" --path "deployment-torch/model"Teraz nadszedł czas, aby utworzyć skrypt oceniania. 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 wdrożysz model, który odczytuje pliki obrazów reprezentujące cyfry i dane wyjściowe odpowiadającej mu cyfry. Skrypt oceniania wygląda następująco:
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 artykuł Using MLflow models in batch deployments (Używanie modeli MLflow we wdrożeniach wsadowych).
Ostrzeżenie
Jeśli wdrażasz model zautomatyzowanego uczenia maszynowego (AutoML) w punkcie końcowym wsadowym, pamiętaj, że skrypt oceniania zapewniany tylko dla punktów końcowych online i nie jest przeznaczony do wykonywania wsadowego. Aby uzyskać informacje na temat tworzenia skryptu oceniania dla wdrożenia wsadowego, zobacz Tworzenie skryptów oceniania dla wdrożeń wsadowych.
deployment-torch/code/batch_driver.py
import os import pandas as pd import torch import torchvision import glob from os.path import basename from mnist_classifier import MnistClassifier from typing import List def init(): global model global device # AZUREML_MODEL_DIR is an environment variable created during deployment # It is the path to the model folder model_path = os.environ["AZUREML_MODEL_DIR"] model_file = glob.glob(f"{model_path}/*/*.pt")[-1] model = MnistClassifier() model.load_state_dict(torch.load(model_file)) model.eval() device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") def run(mini_batch: List[str]) -> pd.DataFrame: print(f"Executing run method over batch of {len(mini_batch)} files.") results = [] with torch.no_grad(): for image_path in mini_batch: image_data = torchvision.io.read_image(image_path).float() batch_data = image_data.expand(1, -1, -1, -1) input = batch_data.to(device) # perform inference predict_logits = model(input) # Compute probabilities, classes and labels predictions = torch.nn.Softmax(dim=-1)(predict_logits) predicted_prob, predicted_class = torch.max(predictions, axis=-1) results.append( { "file": basename(image_path), "class": predicted_class.numpy()[0], "probability": predicted_prob.numpy()[0], } ) return pd.DataFrame(results)Utwórz środowisko, w którym jest uruchamiane wdrożenie wsadowe. Środowisko powinno zawierać pakiety
azureml-coreiazureml-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 wconda.yamlpliku:deployment-torch/environment/conda.yaml
name: mnist-env channels: - conda-forge dependencies: - python=3.8.5 - pip<22.0 - pip: - torch==1.13.0 - torchvision==0.14.0 - pytorch-lightning - pandas - azureml-core - azureml-dataset-runtime[fuse]Ważne
Pakiety
azureml-coreiazureml-dataset-runtime[fuse]są wymagane przez wdrożenia wsadowe i powinny być uwzględnione w zależnościach środowiska.Określ środowisko w następujący sposób:
Definicja środowiska jest uwzględniana w samej definicji wdrożenia jako środowisko anonimowe. W ramach wdrożenia są widoczne następujące wiersze:
environment: name: batch-torch-py38 image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest conda_file: environment/conda.yamlPrzejdź do karty Środowiska w menu bocznym.
Wybierz Środowiska niestandardowe>Utwórz.
Wprowadź nazwę środowiska, w tym przypadku
torch-batch-env.W obszarze Wybierz źródło środowiska wybierz pozycję Użyj istniejącego obrazu platformy Docker z opcjonalnym plikiem conda.
W polu Ścieżka obrazu rejestru kontenerów wprowadź wartość
mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04.Wybierz przycisk Dalej , aby przejść do sekcji "Dostosuj".
Skopiuj zawartość pliku deployment-torch/environment/conda.yaml z repozytorium GitHub do portalu.
Wybierz Dalej, dopóki nie osiągniesz strony "Review".
Wybierz pozycję Utwórz i poczekaj, aż środowisko będzie gotowe.
Ostrzeżenie
Wyselekcjonowane środowiska nie są obsługiwane we wdrożeniach wsadowych. Musisz określić własne środowisko. W celu uproszczenia procesu zawsze można użyć obrazu podstawowego środowiska wyselekcjonowanego.
Tworzenie definicji wdrożenia
torch/deployment.yml wdrożenia
$schema: https://azuremlschemas.azureedge.net/latest/modelBatchDeployment.schema.json name: mnist-torch-dpl description: A deployment using Torch to solve the MNIST classification dataset. endpoint_name: mnist-batch type: model model: name: mnist-classifier-torch path: model code_configuration: code: code scoring_script: batch_driver.py environment: name: batch-torch-py38 image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest conda_file: environment/conda.yaml compute: azureml:batch-cluster resources: instance_count: 1 settings: 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: infoW poniższej tabeli opisano kluczowe właściwości wdrożenia wsadowego. Aby zapoznać się ze schematem YAML pełnego wdrożenia wsadowego, zobacz Schemat YAML wdrożenia wsadowego (CLI, v2).
Klawisz opis nameNazwa wdrożenia. endpoint_nameNazwa punktu końcowego do utworzenia wdrożenia w obszarze. modelModel, który ma być używany do oceniania wsadowego. W przykładzie zdefiniowano wbudowany model przy użyciu polecenia path. Ta definicja umożliwia automatyczne przekazywanie i zarejestrowanie plików modelu przy użyciu automatycznie wygenerowanej nazwy i wersji. Aby uzyskać więcej opcji, zobacz schemat 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.codeKatalog lokalny zawierający cały kod źródłowy języka Python do oceny modelu. code_configuration.scoring_scriptPlik języka Python w code_configuration.codekatalogu . Ten plik musi miećinit()funkcję irun()funkcję.init()Użyj funkcji dla każdego kosztownego lub wspólnego przygotowania (na przykład do załadowania modelu w pamięci).init()element jest wywoływany tylko raz na początku procesu. Służyrun(mini_batch)do oceniania każdego wpisu; wartośćmini_batchjest 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 wbudowane środowisko przy użyciu elementów conda_fileiimage. Zależnościconda_filesą instalowane na podstawie .imageŚrodowisko jest automatycznie rejestrowane przy użyciu automatycznie wygenerowanej nazwy i wersji. Aby uzyskać więcej opcji, zobacz Schemat środowiska. Najlepszym rozwiązaniem dla scenariuszy produkcyjnych jest utworzenie środowiska oddzielnie i odwołanie do niego w tym miejscu. Aby odwołać się do istniejącego środowiska, użyjazureml:<environment-name>:<environment-version>składni .computeObliczenia do uruchamiania oceniania wsadowego. W przykładzie użyto utworzonego batch-clusterna początku elementu i odwołuje się do niego przy użyciuazureml:<compute-name>składni .resources.instance_countLiczba wystąpień, które mają być używane dla każdego zadania oceniania wsadowego. settings.max_concurrency_per_instanceMaksymalna liczba przebiegów równoległych scoring_scriptna wystąpienie.settings.mini_batch_sizeLiczba plików, które scoring_scriptmogą przetwarzać w jednymrun()wywołaniu.settings.output_actionSposób organizowania danych wyjściowych w pliku wyjściowym. append_rowscala wszystkierun()zwrócone wyniki wyjściowe do jednego pliku o nazwieoutput_file_name.summary_onlynie scali wyników wyjściowych i obliczy tylkoerror_thresholdwartość .settings.output_file_nameNazwa pliku wyjściowego oceniania wsadowego dla . append_rowoutput_actionsettings.retry_settings.max_retriesLiczba prób maksymalnej liczby nieudanych scoring_scriptrun()prób.settings.retry_settings.timeoutLimit czasu w sekundach dla oceny scoring_scriptrun()minisadowej.settings.error_thresholdLiczba błędów oceniania pliku wejściowego, które powinny być ignorowane. Jeśli liczba błędów dla całego danych wejściowych przekroczy tę wartość, zadanie oceniania wsadowego zostanie zakończone. W przykładzie użyto -1metody , która wskazuje, że dowolna liczba niepowodzeń jest dozwolona bez kończenia zadania oceniania wsadowego.settings.logging_levelCzasownik dziennika. Wartości zwiększające szczegółowość to: OSTRZEŻENIE, INFORMACJE i DEBUGOWANIE. settings.environment_variablesSłownik par nazwa-wartość zmiennej środowiskowej do ustawienia dla każdego zadania oceniania wsadowego. Przejdź do karty Punkty końcowe w menu bocznym.
Wybierz kartę Punkty końcowe>usługi Batch Utwórz.
Nadaj punktowi końcowemu nazwę, w tym przypadku
mnist-batch. Pozostałe pola można skonfigurować lub pozostawić je puste.Wybierz pozycję Dalej , aby przejść do sekcji "Model".
Wybierz model mnist-classifier-torch.
Wybierz przycisk Dalej , aby przejść do strony "Wdrożenie".
Nadaj wdrożeniu nazwę.
W przypadku akcji wyjściowej upewnij się, że wybrano Dodaj wiersz.
W polu Nazwa pliku wyjściowego upewnij się, że plik wyjściowy oceniania wsadowego jest potrzebny. Wartość domyślna to
predictions.csv.W przypadku rozmiaru minisadowego dostosuj rozmiar plików, które zostaną uwzględnione w każdej minisadowej partii. Ten rozmiar steruje ilością danych odbieranych przez skrypt oceniania na partię.
W przypadku limitu czasu oceniania (w sekundach) upewnij się, że dajesz wystarczająco dużo czasu, aby wdrożenie oceniało daną partię plików. Jeśli zwiększysz liczbę plików, zwykle trzeba zwiększyć wartość limitu czasu. Droższe modele (takie jak te oparte na uczeniu głębokim) mogą wymagać wysokich wartości w tym polu.
W przypadku opcji Maksymalna współbieżność na wystąpienie skonfiguruj liczbę funkcji wykonawczych, które mają być dla każdego wystąpienia obliczeniowego, które otrzymujesz we wdrożeniu. Większa liczba gwarantuje wyższy stopień równoległości, ale zwiększa również wykorzystanie pamięci w wystąpieniu obliczeniowym. Dostroj tę wartość w całości przy użyciu rozmiaru partii Mini.
Po zakończeniu wybierz przycisk Dalej , aby przejść do strony "Kod i środowisko".
W obszarze "Wybierz skrypt oceniania na potrzeby wnioskowania", przejdź do znajdowania i wybierania pliku skryptu oceniania deployment-torch/code/batch_driver.py.
W sekcji "Wybierz środowisko" wybierz utworzone wcześniej środowisko torch-batch-env.
Wybierz pozycję Dalej , aby przejść do strony "Obliczenia".
Wybierz klaster obliczeniowy utworzony w poprzednim kroku.
Ostrzeżenie
Klastry usługi Azure Kubernetes są obsługiwane we wdrożeniach wsadowych, ale tylko w przypadku tworzenia przy użyciu interfejsu wiersza polecenia usługi Azure Machine Learning lub zestawu SDK języka Python.
W polu Liczba wystąpień wprowadź liczbę wystąpień obliczeniowych, które mają być przeznaczone dla wdrożenia. W tym przypadku użyj wartości 2.
Wybierz Dalej.
Utwórz wdrożenie:
Uruchom następujący kod, aby utworzyć wdrożenie wsadowe w punkcie końcowym wsadowym i ustawić je jako domyślne wdrożenie.
az ml batch-deployment create --file deployment-torch/deployment.yml --endpoint-name $ENDPOINT_NAME --set-defaultNapiwek
Parametr
--set-defaultustawia 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 dla scenariuszy produkcyjnych może być utworzenie nowego wdrożenia bez ustawiania go jako domyślnego. Sprawdź, czy wdrożenie działa zgodnie z oczekiwaniami, a następnie zaktualizuj domyślne wdrożenie później. Aby uzyskać więcej informacji na temat implementowania tego procesu, zobacz sekcję Wdrażanie nowego modelu .Sprawdź szczegóły punktu końcowego i wdrożenia wsadowego.
Użyj polecenia
show, aby sprawdzić szczegóły punktu końcowego i wdrożenia. Aby sprawdzić wdrożenie wsadowe, uruchom następujący kod:DEPLOYMENT_NAME="mnist-torch-dpl" az ml batch-deployment show --name $DEPLOYMENT_NAME --endpoint-name $ENDPOINT_NAMEWybierz kartę Punkty końcowe Batch.
Wybierz punkt końcowy partii, który chcesz wyświetlić.
Strona Szczegóły punktu końcowego zawiera szczegóły punktu końcowego wraz ze wszystkimi wdrożeniami dostępnymi w punkcie końcowym.
Uruchamianie punktów końcowych wsadowych i uzyskiwanie dostępu do wyników
Informacje o przepływie danych
Zanim uruchomisz punkt końcowy wsadowy, zrozum, jak dane przepływają przez system.
Dane wejściowe: dane do przetworzenia (ocena). Obejmuje to:
- Pliki przechowywane w usłudze Azure Storage (magazyn obiektów blob, usługa Data Lake)
- Foldery z wieloma plikami
- Zarejestrowane zestawy danych w usłudze Azure Machine Learning
Przetwarzanie: wdrożony model przetwarza dane wejściowe w partiach (mini-batches) i generuje przewidywania.
Dane wyjściowe: wyniki z modelu przechowywane jako pliki w usłudze Azure Storage. Domyślnie dane wyjściowe są zapisywane w domyślnej pamięci masowej blob obszaru roboczego, ale można określić inną lokację.
Wywoływanie punktu końcowego wsadowego
Wywoływanie punktu końcowego wsadowego wyzwala zadanie oceniania wsadowego. Zadanie name jest zwracane w odpowiedzi na żądanie i śledzi postęp przetwarzania wsadowego. Określ ścieżkę danych wejściowych, aby punkty końcowe mogły zlokalizować dane do oceny. W poniższym przykładzie pokazano, jak uruchomić nowe zadanie względem przykładowych danych zestawu danych MNIST przechowywanego na koncie usługi Azure Storage.
Punkt końcowy usługi Batch można uruchamiać i wywoływać przy użyciu interfejsu wiersza polecenia platformy Azure, zestawu Azure Machine Learning SDK lub punktów końcowych REST. Aby uzyskać więcej informacji na temat tych opcji, zobacz Tworzenie zadań i danych wejściowych dla punktów końcowych wsadowych.
Uwaga
Jak działa równoległe przetwarzanie?
Wdrożenia wsadowe dystrybuują pracę na poziomie pliku. Na przykład folder z 100 plikami i minipakietami 10 plików generuje 10 partii po 10 plików każda. Dzieje się tak niezależnie od rozmiaru pliku. Jeśli pliki są zbyt duże do przetwarzania w minisadach, podziel je na mniejsze pliki, aby zwiększyć równoległość lub zmniejszyć liczbę plików na minisadę. Wdrożenia wsadowe obecnie nie uwzględniają odchyleń w rozkładzie rozmiaru plików.
JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input $SAMPLE_INPUT_URI --input-type uri_folder --query name -o tsv)
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 obsługiwanych typach i sposobach ich określania, zobacz Uzyskiwanie dostępu do danych z zadań punktów końcowych wsadowych.
Monitorowanie postępu wykonywania zadania wsadowego
Przetwarzanie wszystkich danych wejściowych w zadaniach oceniania wsadowego zajmuje trochę czasu.
Poniższy kod sprawdza stan zadania i generuje link do usługi Azure Machine Learning Studio, aby uzyskać więcej szczegółów.
az ml job show -n $JOB_NAME --web
Sprawdzanie wyników oceniania wsadowego
Dane wyjściowe zadania są przechowywane w magazynie w chmurze w domyślnym magazynie obiektów blob obszaru roboczego lub określonym magazynie. Aby dowiedzieć się, jak zmienić ustawienia domyślne, zobacz Konfigurowanie lokalizacji wyjściowej. Poniższe kroki umożliwiają wyświetlenie wyników oceniania w Eksplorator usługi Azure Storage po zakończeniu zadania:
Uruchom następujący kod, aby otworzyć zadanie oceniania wsadowego w usłudze 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 --webNa wykresie zadania wybierz
batchscoringkrok.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:
Konfigurowanie lokalizacji wyjściowej
Domyślnie wyniki oceniania wsadowego są przechowywane w domyślnym magazynie obiektów blob obszaru roboczego w folderze nazwanym na podstawie zadania (identyfikator GUID generowany przez system). Skonfiguruj lokalizację wyjściową 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 elementu --output-path jest taka sama jak --input w przypadku określania folderu , azureml://datastores/<datastore-name>/paths/<path-on-datastore>/czyli . Użyj --set output_file_name=<your-file-name> polecenia , aby skonfigurować nową nazwę pliku wyjściowego.
OUTPUT_FILE_NAME=predictions_`echo $RANDOM`.csv
OUTPUT_PATH="azureml://datastores/workspaceblobstore/paths/$ENDPOINT_NAME"
JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input $SAMPLE_INPUT_URI --output-path $OUTPUT_PATH --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 kończy się niepowodzeniem.
Ważne
W przeciwieństwie do danych wejściowych dane wyjściowe mogą być przechowywane tylko w magazynach danych usługi Azure Machine Learning uruchamianych na kontach usługi Blob Storage.
Zastępowanie konfiguracji wdrożenia dla każdego zadania
Podczas wywoływania punktu końcowego wsadowego można nadpisać niektóre ustawienia, aby maksymalnie wykorzystać zasoby mocy obliczeniowej i zwiększyć wydajność. Ta funkcja jest przydatna, gdy potrzebujesz różnych ustawień dla różnych zadań bez trwałej modyfikacji wdrożenia.
Które ustawienia można zastąpić?
Dla poszczególnych zadań można skonfigurować następujące ustawienia:
| Ustawienia | Kiedy należy używać | Przykładowy scenariusz |
|---|---|---|
| Liczba wystąpień | W przypadku różnych woluminów danych | Użyj większej liczby wystąpień dla większych zestawów danych (10 wystąpień dla 1 miliona plików a 2 wystąpień dla 100 000 plików). |
| Rozmiar mini-partii | Kiedy musisz równoważyć przepływność i użycie pamięci | Użyj mniejszych partii (10–50 plików) dla dużych obrazów i większych partii (100–500 plików) dla małych plików tekstowych. |
| Maksymalna liczba ponownych prób | Gdy jakość danych jest różna | Wyższe ponawianie prób (5–10) dla hałaśliwych danych; niższe ponawianie prób (1–3) dla czystych danych |
| Limit czasu | Czas przetwarzania różni się w zależności od typu danych | Dłuższy limit czasu (300s) dla złożonych modeli; krótszy limit czasu (30s) dla prostych modeli |
| Próg błędu | Gdy potrzebujesz różnych poziomów tolerancji awarii | Próg ścisły (-1) dla zadań krytycznych; Próg pobłażliwy (10%) dla zadań eksperymentalnych |
Jak zastąpić ustawienia
JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input https://azuremlexampledata.blob.core.windows.net/data/mnist/sample --mini-batch-size 20 --instance-count 5 --query name -o tsv)
Dodawanie wdrożeń do punktu końcowego
Po utworzeniu punktu końcowego wsadowego z wdrożeniem możesz nadal uściślić model i dodawać nowe wdrożenia. Punkty końcowe usługi Batch będą nadal obsługiwać wdrożenie domyślne podczas tworzenia i wdrażania nowych modeli w ramach tego samego punktu końcowego. Wdrożenia nie mają wpływu na siebie.
W tym przykładzie dodasz drugie wdrożenie korzystające z modelu utworzonego za pomocą interfejsu Keras i TensorFlow w celu rozwiązania tego samego problemu MNIST.
Dodawanie drugiego wdrożenia
Utwórz środowisko dla wdrożenia wsadowego. Uwzględnij wszystkie zależności, które należy uruchomić w kodzie. Dodaj bibliotekę
azureml-core, ponieważ jest wymagana dla wdrożeń wsadowych. Poniższa definicja środowiska zawiera wymagane biblioteki do uruchomienia modelu za pomocą bibliotek TensorFlow.Definicja środowiska jest uwzględniana w samej definicji wdrożenia jako środowisko anonimowe.
environment: name: batch-tensorflow-py38 image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest conda_file: environment/conda.yamlSkopiuj zawartość pliku deployment-keras/environment/conda.yaml z repozytorium GitHub do portalu.
Wybierz przycisk Dalej , dopóki nie zostanie wyświetlona strona "Przeglądanie".
Wybierz pozycję Utwórz i poczekaj, aż środowisko będzie gotowe do użycia.
Użyty plik conda wygląda następująco:
deployment-keras/environment/conda.yaml
name: tensorflow-env channels: - conda-forge dependencies: - python=3.8.5 - pip - pip: - pandas - tensorflow - pillow - azureml-core - azureml-dataset-runtime[fuse]Utwórz skrypt oceniania dla modelu:
deployment-keras/code/batch_driver.py
import os import numpy as np import pandas as pd import tensorflow as tf from typing import List 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: List[str]) -> pd.DataFrame: print(f"Executing run method over batch of {len(mini_batch)} files.") results = [] for image_path in mini_batch: data = Image.open(image_path) 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( { "file": basename(image_path), "class": pred_class[0], "probability": pred_prob, } ) return pd.DataFrame(results)Tworzenie definicji wdrożenia
deployment-keras/deployment.yml
$schema: https://azuremlschemas.azureedge.net/latest/modelBatchDeployment.schema.json name: mnist-keras-dpl description: A deployment using Keras with TensorFlow to solve the MNIST classification dataset. endpoint_name: mnist-batch type: model model: name: mnist-classifier-keras path: model code_configuration: code: code scoring_script: batch_driver.py environment: name: batch-tensorflow-py38 image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest conda_file: environment/conda.yaml compute: azureml:batch-cluster resources: instance_count: 1 settings: max_concurrency_per_instance: 2 mini_batch_size: 10 output_action: append_row output_file_name: predictions.csvWybierz przycisk Dalej , aby przejść do strony "Kod i środowisko".
W obszarze Wybierz skrypt oceniania na potrzeby wnioskowania przejdź do pliku skryptu oceniania deployment-keras/code/batch_driver.py.
W obszarze Wybierz środowisko wybierz środowisko utworzone w poprzednim kroku.
Wybierz Dalej.
Na stronie Obliczenia wybierz klaster obliczeniowy utworzony w poprzednim kroku.
W polu Liczba wystąpień wprowadź liczbę wystąpień obliczeniowych, które mają być przeznaczone dla wdrożenia. W tym przypadku użyj wartości 2.
Wybierz Dalej.
Utwórz wdrożenie:
Uruchom następujący kod, aby utworzyć wdrożenie wsadowe w punkcie końcowym wsadowym i ustawić je jako domyślne wdrożenie.
az ml batch-deployment create --file deployment-keras/deployment.yml --endpoint-name $ENDPOINT_NAMENapiwek
Brak parametru
--set-defaultw tym przypadku. Najlepszym rozwiązaniem dla scenariuszy produkcyjnych jest utworzenie nowego wdrożenia bez ustawiania go jako domyślnego. Następnie zweryfikuj je i zaktualizuj wdrożenie domyślne później.
Testowanie wdrożenia wsadowego innego niż domyślne
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 $SAMPLE_INPUT_URI --input-type uri_folder --query name -o tsv)
Powiadomienie --deployment-name służy do określania wdrożenia do wykonania. Ten parametr umożliwia invoke wdrożenie inne niż domyślne bez aktualizowania 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órego wdrożenia użyć — domyślne wdrożenie. Możesz zmienić domyślne wdrożenie (a w związku z tym zmienić model obsługujący wdrożenie) bez zmiany umowy z użytkownikiem wywołującym punkt końcowy. Użyj następującego kodu, aby zaktualizować wdrożenie domyślne:
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 potrzebujesz starego wdrożenia wsadowego, usuń je, uruchamiając następujący kod. Flaga --yes potwierdza usunięcie.
az ml batch-deployment delete --name mnist-torch-dpl --endpoint-name $ENDPOINT_NAME --yes
Uruchom następujący kod, aby usunąć punkt końcowy wsadowy i jego podstawowe wdrożenia. Zadania oceniania wsadowego nie są usuwane.
az ml batch-endpoint delete --name $ENDPOINT_NAME --yes