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:

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

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

    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"
    
  2. 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.
  3. 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.
  1. 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)
    
  2. Utwórz środowisko, w którym zostanie uruchomione wdrożenie wsadowe. Takie środowisko musi 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 elemencie conda.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 i azureml-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.

  3. 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żyj azureml:<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ę i run() 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ż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 środowisko wbudowane przy użyciu elementów conda_file i image. Zależności conda_file zostaną zainstalowane na platformie image. Ś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ż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.
    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 jednym run() wywołaniu.
    output_action [Opcjonalnie] Sposób organizowania danych wyjściowych w pliku wyjściowym. append_row Spowoduje scalenie wszystkich run() zwróconych wyników wyjściowych do jednego pliku o nazwie output_file_name. summary_only Nie scala wyników wyjściowych i oblicza error_thresholdtylko wartość .
    output_file_name [Opcjonalnie] Nazwa pliku wyjściowego oceniania wsadowego dla .append_rowoutput_action
    retry_settings.max_retries [Opcjonalnie] Liczba prób maksymalnej liczby nieudanych scoring_scriptrun()prób.
    retry_settings.timeout [Opcjonalnie] Limit czasu w sekundach dla oceniania scoring_scriptrun() 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 -1elementu , 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.
  4. 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.

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

  1. 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
    
  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ę wyświetlania danych wyjściowych.

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

    Zrzut ekranu przedstawiający dane wyjściowe oceniania.

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

  1. 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]
    
  2. 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)
    
  3. 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
    
  4. 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

Następne kroki