Udostępnij za pomocą


Wdrażanie modeli oceniania w punktach końcowych wsadowych

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:

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).

  1. 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 mybatchendpoint w pliku westus2.

    Umieść nazwę punktu końcowego w zmiennej, aby odwoływać się do niej łatwo później.

    ENDPOINT_NAME="mnist-batch"
    
  2. 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-learning
    

    W 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
    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.
    tags Tagi do uwzględnienia w punkcie końcowym. Ta właściwość jest opcjonalna.
  3. 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
  1. 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"
    
  2. 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)
    
  3. Utwórz środowisko, w którym jest uruchamiane wdrożenie wsadowe. Środowisko powinno zawierać pakiety azureml-core i azureml-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 conda.yaml pliku:

    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-core i azureml-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.yaml
    
  4. Przejdź do karty Środowiska w menu bocznym.

  5. Wybierz Środowiska niestandardowe>Utwórz.

    1. Wprowadź nazwę środowiska, w tym przypadku torch-batch-env.

    2. W obszarze Wybierz źródło środowiska wybierz pozycję Użyj istniejącego obrazu platformy Docker z opcjonalnym plikiem conda.

    3. W polu Ścieżka obrazu rejestru kontenerów wprowadź wartość mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04.

    4. Wybierz przycisk Dalej , aby przejść do sekcji "Dostosuj".

    5. Skopiuj zawartość pliku deployment-torch/environment/conda.yaml z repozytorium GitHub do portalu.

  6. Wybierz Dalej, dopóki nie osiągniesz strony "Review".

  7. 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.

  8. 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: info
    

    W 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
    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. 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żyj azureml:<model-name>:<model-version> składni .
    code_configuration.code Katalog lokalny zawierający cały kod źródłowy języka Python do oceny modelu.
    code_configuration.scoring_script Plik języka Python w code_configuration.code katalogu . Ten plik musi mieć init() funkcję i run() 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ży run(mini_batch) do oceniania każdego wpisu; wartość mini_batch jest listą ścieżek plików. Funkcja run() powinna zwrócić ramkę danych biblioteki pandas lub tablicę. Każdy zwrócony element wskazuje jeden pomyślny przebieg elementu wejściowego w elemecie mini_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_file i image. Zależności conda_file są 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żyj azureml:<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życiu azureml:<compute-name> składni .
    resources.instance_count Liczba wystąpień, które mają być używane dla każdego zadania oceniania wsadowego.
    settings.max_concurrency_per_instance Maksymalna liczba przebiegów równoległych scoring_script na wystąpienie.
    settings.mini_batch_size Liczba plików, które scoring_script mogą przetwarzać w jednym run() wywołaniu.
    settings.output_action Sposób organizowania danych wyjściowych w pliku wyjściowym. append_row scala wszystkie run() zwrócone wyniki wyjściowe do jednego pliku o nazwie output_file_name. summary_only nie scali wyników wyjściowych i obliczy tylko error_thresholdwartość .
    settings.output_file_name Nazwa pliku wyjściowego oceniania wsadowego dla .append_rowoutput_action
    settings.retry_settings.max_retries Liczba prób maksymalnej liczby nieudanych scoring_scriptrun()prób.
    settings.retry_settings.timeout Limit czasu w sekundach dla oceny scoring_scriptrun() minisadowej.
    settings.error_threshold Liczba 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_level Czasownik dziennika. Wartości zwiększające szczegółowość to: OSTRZEŻENIE, INFORMACJE i DEBUGOWANIE.
    settings.environment_variables Słownik par nazwa-wartość zmiennej środowiskowej do ustawienia dla każdego zadania oceniania wsadowego.
  9. Przejdź do karty Punkty końcowe w menu bocznym.

    1. Wybierz kartę Punkty końcowe>usługi Batch Utwórz.

    2. Nadaj punktowi końcowemu nazwę, w tym przypadku mnist-batch. Pozostałe pola można skonfigurować lub pozostawić je puste.

    3. Wybierz pozycję Dalej , aby przejść do sekcji "Model".

    4. Wybierz model mnist-classifier-torch.

    5. Wybierz przycisk Dalej , aby przejść do strony "Wdrożenie".

    6. Nadaj wdrożeniu nazwę.

  10. W przypadku akcji wyjściowej upewnij się, że wybrano Dodaj wiersz.

    1. W polu Nazwa pliku wyjściowego upewnij się, że plik wyjściowy oceniania wsadowego jest potrzebny. Wartość domyślna to predictions.csv.

    2. 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ę.

    3. 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.

    4. 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.

    5. Po zakończeniu wybierz przycisk Dalej , aby przejść do strony "Kod i środowisko".

    6. W obszarze "Wybierz skrypt oceniania na potrzeby wnioskowania", przejdź do znajdowania i wybierania pliku skryptu oceniania deployment-torch/code/batch_driver.py.

    7. W sekcji "Wybierz środowisko" wybierz utworzone wcześniej środowisko torch-batch-env.

    8. Wybierz pozycję Dalej , aby przejść do strony "Obliczenia".

    9. 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.

    10. 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.

    11. Wybierz Dalej.

  11. 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-default
    

    Napiwek

    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 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 .

  12. 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_NAME
    
  13. Wybierz kartę Punkty końcowe Batch.

    1. Wybierz punkt końcowy partii, który chcesz wyświetlić.

    2. Strona Szczegóły punktu końcowego zawiera szczegóły punktu końcowego wraz ze wszystkimi wdrożeniami dostępnymi w punkcie końcowym.

      Zrzut ekranu przedstawiający szczegóły sprawdzania punktów końcowych i wdrożenia wsadowego.

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:

  1. 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 --web
    
  2. Na wykresie zadania wybierz batchscoring krok.

  3. Wybierz kartę Dane wyjściowe i dzienniki , a następnie wybierz pozycję Pokaż dane wyjściowe.

  4. W obszarze Dane wyjściowe wybierz ikonę, aby otworzyć Eksplorator usługi Storage.

    Zrzut ekranu programu Studio przedstawiający lokalizację danych wyjściowych widoku.

    Wyniki oceniania w Eksplorator usługi Storage są podobne do następującej przykładowej strony:

    Zrzut ekranu przedstawiający dane wyjściowe oceniania.

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

  1. 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.yaml
    
  2. Skopiuj zawartość pliku deployment-keras/environment/conda.yaml z repozytorium GitHub do portalu.

    1. Wybierz przycisk Dalej , dopóki nie zostanie wyświetlona strona "Przeglądanie".

    2. 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]
    
  3. 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)
    
  4. 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.csv
    
  5. Wybierz przycisk Dalej , aby przejść do strony "Kod i środowisko".

    1. W obszarze Wybierz skrypt oceniania na potrzeby wnioskowania przejdź do pliku skryptu oceniania deployment-keras/code/batch_driver.py.

    2. W obszarze Wybierz środowisko wybierz środowisko utworzone w poprzednim kroku.

    3. Wybierz Dalej.

    4. Na stronie Obliczenia wybierz klaster obliczeniowy utworzony w poprzednim kroku.

    5. 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.

    6. Wybierz Dalej.

  6. 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_NAME
    

    Napiwek

    Brak parametru --set-default w 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