Tworzenie zadań i danych wejściowych dla punktów końcowych wsadowych

Punkty końcowe usługi Batch mogą służyć do wykonywania długich operacji wsadowych na dużych ilościach danych. Takie dane można umieścić w różnych miejscach. Niektóre typy punktów końcowych wsadowych mogą również odbierać parametry literału jako dane wejściowe. W tym samouczku omówimy sposób określania tych danych wejściowych oraz obsługiwanych typów lub lokalizacji.

Przed wywołaniem punktu końcowego

Aby pomyślnie wywołać punkt końcowy wsadowy i utworzyć zadania, upewnij się, że masz następujące elementy:

  • Masz uprawnienia do uruchamiania wdrożenia punktu końcowego wsadowego. Role usługi AzureML badacze dancyh, Współautor i Właściciel mogą służyć do uruchamiania wdrożenia. W przypadku definicji ról niestandardowych przeczytaj autoryzację w punktach końcowych wsadowych , aby poznać wymagane określone uprawnienia.

  • Masz prawidłowy token identyfikatora Entra firmy Microsoft reprezentujący podmiot zabezpieczeń do wywołania punktu końcowego. Ten podmiot zabezpieczeń może być jednostką użytkownika lub jednostką usługi. W każdym razie po wywołaniu punktu końcowego zadanie wdrożenia wsadowego jest tworzone w ramach tożsamości skojarzonej z tokenem. Na potrzeby testowania możesz użyć własnych poświadczeń do wywołania, jak wspomniano poniżej.

    Użyj interfejsu wiersza polecenia platformy Azure, aby zalogować się przy użyciu uwierzytelniania kodu interakcyjnego lub urządzenia:

    az login
    

    Aby dowiedzieć się więcej na temat uwierzytelniania przy użyciu wielu typów poświadczeń, przeczytaj Autoryzacja w punktach końcowych wsadowych.

  • Klaster obliczeniowy, w którym wdrożony punkt końcowy ma dostęp do odczytywania danych wejściowych.

    Napiwek

    Jeśli używasz magazynu danych bez poświadczeń lub zewnętrznego konta usługi Azure Storage jako danych wejściowych, upewnij się, że skonfigurowaliśmy klastry obliczeniowe na potrzeby dostępu do danych. Tożsamość zarządzana klastra obliczeniowego jest używana do instalowania konta magazynu. Tożsamość zadania (invoker) jest nadal używana do odczytywania danych bazowych, co pozwala uzyskać szczegółową kontrolę dostępu.

Podstawy tworzenia zadań

Aby utworzyć zadanie na podstawie punktu końcowego wsadowego, musisz go wywołać. Wywołanie można wykonać przy użyciu interfejsu wiersza polecenia platformy Azure, zestawu AZURE Machine Edukacja SDK dla języka Python lub wywołania interfejsu API REST. W poniższych przykładach przedstawiono podstawy wywołania punktu końcowego wsadowego, który odbiera pojedynczy folder danych wejściowych na potrzeby przetwarzania. Zobacz Opis danych wejściowych i wyjściowych , aby zapoznać się z przykładami z różnymi danymi wejściowymi i wyjściowymi.

invoke Użyj operacji w obszarze punktów końcowych wsadowych:

az ml batch-endpoint invoke --name $ENDPOINT_NAME \
                            --input https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data

Wywoływanie określonego wdrożenia

Punkty końcowe usługi Batch mogą hostować wiele wdrożeń w ramach tego samego punktu końcowego. Domyślny punkt końcowy jest używany, chyba że użytkownik określi inaczej. Wdrożenie, które jest używane, można zmienić w następujący sposób:

Użyj argumentu --deployment-name lub -d określ nazwę wdrożenia:

az ml batch-endpoint invoke --name $ENDPOINT_NAME \
                            --deployment-name $DEPLOYMENT_NAME \
                            --input https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data

Konfigurowanie właściwości zadania

Niektóre właściwości utworzonego zadania można skonfigurować w czasie wywołania.

Uwaga

Konfigurowanie właściwości zadania jest dostępne tylko w punktach końcowych wsadowych z wdrożeniami składników potoku do chwili.

Konfigurowanie nazwy eksperymentu

Użyj argumentu --experiment-name , aby określić nazwę eksperymentu:

az ml batch-endpoint invoke --name $ENDPOINT_NAME \
                            --experiment-name "my-batch-job-experiment" \
                            --input https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data

Informacje o danych wejściowych i wyjściowych

Punkty końcowe usługi Batch zapewniają trwały interfejs API, którego użytkownicy mogą używać do tworzenia zadań wsadowych. Ten sam interfejs może służyć do określania danych wejściowych i danych wyjściowych, których oczekuje wdrożenie. Użyj danych wejściowych, aby przekazać wszelkie informacje potrzebne do wykonania zadania przez punkt końcowy.

Diagram przedstawiający sposób użycia danych wejściowych i wyjściowych w punktach końcowych wsadowych.

Punkty końcowe usługi Batch obsługują dwa typy danych wejściowych:

Liczba i typ danych wejściowych i wyjściowych zależą od typu wdrożenia wsadowego. Wdrożenia modelu zawsze wymagają jednego danych wejściowych i generują jedno dane wyjściowe. Dane wejściowe literału nie są obsługiwane. Jednak wdrożenia składników potoku zapewniają bardziej ogólną konstrukcję do tworzenia punktów końcowych i umożliwiają określenie dowolnej liczby danych wejściowych (danych i literałów) i danych wyjściowych.

Poniższa tabela zawiera podsumowanie danych wejściowych i wyjściowych dla wdrożeń wsadowych:

Typ wdrożenia Liczba danych wejściowych Obsługiwane typy danych wejściowych Liczba danych wyjściowych Obsługiwane typy danych wyjściowych
Wdrażanie modelu 1 Dane wejściowe danych 1 Dane wyjściowe
Wdrożenie składnika potoku [0..N] Dane wejściowe i dane wejściowe literału [0..N] Dane wyjściowe

Napiwek

Dane wejściowe i wyjściowe są zawsze nazwane. Te nazwy służą jako klucze, aby je zidentyfikować i przekazać rzeczywistą wartość podczas wywołania. W przypadku wdrożeń modelu, ponieważ zawsze wymagają jednego danych wejściowych i wyjściowych, nazwa jest ignorowana podczas wywołania. Możesz przypisać nazwę, która najlepiej opisuje przypadek użycia, na przykład "sales_estimation".

Dane wejściowe danych

Dane wejściowe odnoszą się do danych wejściowych, które wskazują lokalizację, w której są umieszczane dane. Ponieważ punkty końcowe wsadowe zwykle zużywają duże ilości danych, nie można przekazać danych wejściowych w ramach żądania wywołania. Zamiast tego należy określić lokalizację, w której powinien znajdować się punkt końcowy wsadowy, aby wyszukać dane. Dane wejściowe są instalowane i przesyłane strumieniowo na docelowym obiekcie obliczeniowym w celu zwiększenia wydajności.

Punkty końcowe usługi Batch obsługują odczytywanie plików znajdujących się w następujących opcjach magazynu:

  • Usługa Azure Machine Edukacja zasoby danych, w tym folder (uri_folder) i plik (uri_file).
  • Magazyny danych usługi Azure Machine Edukacja, w tym usługi Azure Blob Storage, Azure Data Lake Storage Gen1 i Azure Data Lake Storage Gen2.
  • Konta usługi Azure Storage, w tym usługi Azure Data Lake Storage Gen1, Azure Data Lake Storage Gen2 i Azure Blob Storage.
  • Lokalne foldery danych/pliki (interfejs wiersza polecenia usługi Azure Machine Edukacja lub zestaw SDK usługi Azure Machine Edukacja dla języka Python). Jednak ta operacja powoduje przekazanie danych lokalnych do domyślnego magazynu danych usługi Azure Machine Edukacja magazynu danych obszaru roboczego, 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 partii utworzone za pomocą interfejsu API REST ogólnie dostępnej wersji CLIv2 (2.4.0 i nowszej) lub interfejsu API REST ga (2022-05-01 i nowsze) nie będą obsługiwać zestawu danych w wersji 1.

Dane wejściowe literału

Dane wejściowe literałów odnoszą się do danych wejściowych, które mogą być reprezentowane i rozwiązywane w czasie wywołania, takie jak ciągi, liczby i wartości logiczne. Zazwyczaj dane wejściowe literału są używane do przekazywania parametrów do punktu końcowego w ramach wdrożenia składnika potoku. Punkty końcowe usługi Batch obsługują następujące typy literałów:

  • string
  • boolean
  • float
  • integer

Dane wejściowe literału są obsługiwane tylko we wdrożeniach składników potoku. Zobacz Tworzenie zadań z danymi wejściowymi literału, aby dowiedzieć się, jak je określić.

Dane wyjściowe

Dane wyjściowe odnoszą się do lokalizacji, w której powinny zostać umieszczone wyniki zadania wsadowego. Dane wyjściowe są identyfikowane według nazwy, a usługa Azure Machine Edukacja automatycznie przypisuje unikatową ścieżkę do każdego nazwanego danych wyjściowych. Można jednak określić inną ścieżkę, jeśli jest to wymagane.

Ważne

Punkty końcowe usługi Batch obsługują tylko zapisywanie danych wyjściowych w magazynach danych usługi Azure Blob Storage. Jeśli musisz zapisać na koncie magazynu z włączonymi hierarchicznymi przestrzeniami nazw (znanymi również jako Azure Datalake Gen2 lub ADLS Gen2), zwróć uwagę, że taką usługę magazynu można zarejestrować jako magazyn danych usługi Azure Blob Storage, ponieważ usługi są w pełni zgodne. W ten sposób można zapisywać dane wyjściowe z punktów końcowych wsadowych do usługi ADLS Gen2.

Tworzenie zadań przy użyciu danych wejściowych

W poniższych przykładach pokazano, jak tworzyć zadania, pobierać dane wejściowe z zasobów danych, magazynów danych i kont usługi Azure Storage.

Dane wejściowe z zasobu danych

Zasoby danych usługi Azure Machine Edukacja (wcześniej znane jako zestawy danych) są obsługiwane jako dane wejściowe dla zadań. Wykonaj następujące kroki, aby uruchomić zadanie punktu końcowego wsadowego przy użyciu danych przechowywanych w zarejestrowanym zasobie danych w usłudze Azure Machine Edukacja:

Ostrzeżenie

Zasoby danych typu Tabela (MLTable) nie są obecnie obsługiwane.

  1. Najpierw utwórz zasób danych. Ten zasób danych składa się z folderu z wieloma plikami CSV, które będą przetwarzane równolegle przy użyciu punktów końcowych wsadowych. Ten krok można pominąć, jeśli dane są już zarejestrowane jako zasób danych.

    Utwórz definicję zasobu danych w pliku YAML:

    heart-dataset-unlabeled.yml

    $schema: https://azuremlschemas.azureedge.net/latest/data.schema.json
    name: heart-dataset-unlabeled
    description: An unlabeled dataset for heart classification.
    type: uri_folder
    path: heart-classifier-mlflow/data
    

    Następnie utwórz zasób danych:

    az ml data create -f heart-dataset-unlabeled.yml
    
  2. Utwórz dane wejściowe lub żądanie:

    DATASET_ID=$(az ml data show -n heart-dataset-unlabeled --label latest | jq -r .id)
    

    Uwaga

    Identyfikator zasobów danych wygląda następująco: /subscriptions/<subscription>/resourcegroups/<resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<workspace>/data/<data-asset>/versions/<version>. Można również użyć azureml:/<datasset_name>@latest jako sposobu określania danych wejściowych.

  3. Uruchom punkt końcowy:

    Użyj argumentu , --set aby określić dane wejściowe:

    az ml batch-endpoint invoke --name $ENDPOINT_NAME \
        --set inputs.heart_dataset.type="uri_folder" inputs.heart_dataset.path=$DATASET_ID
    

    W przypadku punktu końcowego obsługującego wdrożenie modelu można użyć argumentu --input w celu określenia danych wejściowych, ponieważ wdrożenie modelu zawsze wymaga tylko jednego danych wejściowych.

    az ml batch-endpoint invoke --name $ENDPOINT_NAME --input $DATASET_ID
    

    Argument --set ma tendencję do tworzenia długich poleceń, gdy określono wiele danych wejściowych. W takich przypadkach umieść dane wejściowe w YAML pliku i użyj polecenia --file , aby określić dane wejściowe potrzebne do wywołania punktu końcowego.

    inputs.yml

    inputs:
      heart_dataset: azureml:/<datasset_name>@latest
    
    az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml
    

Dane wejściowe z magazynów danych

Dane z usługi Azure Machine Edukacja zarejestrowanych magazynów danych można bezpośrednio odwoływać się do zadań wdrożeń wsadowych. W tym przykładzie najpierw przekażesz dane do domyślnego magazynu danych w obszarze roboczym usługi Azure Machine Edukacja, a następnie uruchomisz wdrożenie wsadowe. Wykonaj następujące kroki, aby uruchomić zadanie punktu końcowego wsadowego przy użyciu danych przechowywanych w magazynie danych.

  1. Uzyskaj dostęp do domyślnego magazynu danych w obszarze roboczym usługi Azure Machine Edukacja. Jeśli dane są w innym magazynie, możesz zamiast tego użyć tego magazynu. Nie musisz używać domyślnego magazynu danych.

    DATASTORE_ID=$(az ml datastore show -n workspaceblobstore | jq -r '.id')
    

    Uwaga

    Identyfikator magazynów danych będzie wyglądać następująco: /subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<workspace>/datastores/<data-store>.

    Napiwek

    Domyślny magazyn danych obiektów blob w obszarze roboczym nosi nazwę workspaceblobstore. Ten krok można pominąć, jeśli znasz już identyfikator zasobu domyślnego magazynu danych w obszarze roboczym.

  2. Musisz przekazać przykładowe dane do magazynu danych. W tym przykładzie przyjęto założenie, że przykładowe dane zawarte w repozytorium zostały już przekazane w folderze w folderze sdk/python/endpoints/batch/deploy-models/heart-classifier-mlflow/dataheart-disease-uci-unlabeled na koncie magazynu obiektów blob. Przed przejściem do przodu upewnij się, że zostało to zrobione.

  3. Utwórz dane wejściowe lub żądanie:

    Umieść ścieżkę pliku w następującej zmiennej:

    DATA_PATH="heart-disease-uci-unlabeled"
    INPUT_PATH="$DATASTORE_ID/paths/$DATA_PATH"
    

    Uwaga

    Zobacz, jak ścieżka paths jest dołączana do identyfikatora zasobu magazynu danych, aby wskazać, że poniżej znajduje się ścieżka w nim.

    Napiwek

    Można również użyć azureml://datastores/<data-store>/paths/<data-path> jako sposobu określania danych wejściowych.

  4. Uruchom punkt końcowy:

    Użyj argumentu , --set aby określić dane wejściowe:

    az ml batch-endpoint invoke --name $ENDPOINT_NAME \
        --set inputs.heart_dataset.type="uri_folder" inputs.heart_dataset.path=$INPUT_PATH
    

    W przypadku punktu końcowego obsługującego wdrożenie modelu można użyć argumentu --input w celu określenia danych wejściowych, ponieważ wdrożenie modelu zawsze wymaga tylko jednego danych wejściowych.

    az ml batch-endpoint invoke --name $ENDPOINT_NAME --input $INPUT_PATH --input-type uri_folder
    

    Argument --set ma tendencję do tworzenia długich poleceń, gdy określono wiele danych wejściowych. W takich przypadkach umieść dane wejściowe w YAML pliku i użyj polecenia --file , aby określić dane wejściowe potrzebne do wywołania punktu końcowego.

    inputs.yml

    inputs:
      heart_dataset:
        type: uri_folder
        path: azureml://datastores/<data-store>/paths/<data-path>
    
    az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml
    

    Jeśli dane są plikiem, użyj go uri_file jako typu.

Dane wejściowe z kont usługi Azure Storage

Punkty końcowe usługi Azure Machine Edukacja batch mogą odczytywać dane z lokalizacji w chmurze na kontach usługi Azure Storage, zarówno publicznych, jak i prywatnych. Wykonaj następujące kroki, aby uruchomić zadanie punktu końcowego wsadowego przy użyciu danych przechowywanych na koncie magazynu:

Uwaga

Zapoznaj się z sekcją Konfigurowanie klastrów obliczeniowych na potrzeby dostępu do danych, aby dowiedzieć się więcej o dodatkowej konfiguracji wymaganej do pomyślnego odczytu danych z magazynu accoutns.

  1. Utwórz dane wejściowe lub żądanie:

    INPUT_DATA = "https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data"
    

    Jeśli dane są plikiem:

    INPUT_DATA = "https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data/heart.csv"
    
  2. Uruchom punkt końcowy:

    Użyj argumentu , --set aby określić dane wejściowe:

    az ml batch-endpoint invoke --name $ENDPOINT_NAME \
        --set inputs.heart_dataset.type="uri_folder" inputs.heart_dataset.path=$INPUT_DATA
    

    W przypadku punktu końcowego obsługującego wdrożenie modelu można użyć argumentu --input w celu określenia danych wejściowych, ponieważ wdrożenie modelu zawsze wymaga tylko jednego danych wejściowych.

    az ml batch-endpoint invoke --name $ENDPOINT_NAME --input $INPUT_DATA --input-type uri_folder
    

    Argument --set ma tendencję do tworzenia długich poleceń, gdy określono wiele danych wejściowych. W takich przypadkach umieść dane wejściowe w YAML pliku i użyj polecenia --file , aby określić dane wejściowe potrzebne do wywołania punktu końcowego.

    inputs.yml

    inputs:
      heart_dataset:
        type: uri_folder
        path: https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data
    
    az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml
    

    Jeśli dane są plikiem, użyj go uri_file jako typu.

Tworzenie zadań z danymi wejściowymi literału

Wdrożenia składników potoku mogą przyjmować dane wejściowe literału. W poniższym przykładzie pokazano, jak określić dane wejściowe o nazwie score_mode, typu string, z wartością append:

Umieść dane wejściowe w YAML pliku i użyj polecenia --file , aby określić wymagane dane wejściowe dla wywołania punktu końcowego.

inputs.yml

inputs:
  score_mode:
    type: string
    default: append
az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml

Możesz również użyć argumentu --set , aby określić wartość. Jednak zwykle generuje długie polecenia, gdy określono wiele danych wejściowych:

az ml batch-endpoint invoke --name $ENDPOINT_NAME \
    --set inputs.score_mode.type="string" inputs.score_mode.default="append"

Tworzenie zadań przy użyciu danych wyjściowych

W poniższym przykładzie pokazano, jak zmienić lokalizację, w której znajduje się dane wyjściowe o nazwie score . Na potrzeby kompletności te przykłady umożliwiają również skonfigurowanie danych wejściowych o nazwie heart_dataset.

  1. Użyj domyślnego magazynu danych w obszarze roboczym usługi Azure Machine Edukacja, aby zapisać dane wyjściowe. Możesz użyć dowolnego innego magazynu danych w obszarze roboczym, o ile jest to konto magazynu obiektów blob.

    DATASTORE_ID=$(az ml datastore show -n workspaceblobstore | jq -r '.id')
    

    Uwaga

    Identyfikator magazynów danych będzie wyglądać następująco: /subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<workspace>/datastores/<data-store>.

  2. Tworzenie danych wyjściowych:

    DATA_PATH="batch-jobs/my-unique-path"
    OUTPUT_PATH="$DATASTORE_ID/paths/$DATA_PATH"
    

    Aby uzyskać pełne informacje, utwórz również dane wejściowe:

    INPUT_PATH="https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data"
    

    Uwaga

    Zobacz, jak ścieżka paths jest dołączana do identyfikatora zasobu magazynu danych, aby wskazać, że poniżej znajduje się ścieżka w nim.

  3. Uruchom wdrożenie:

    Użyj argumentu --set , aby określić dane wejściowe:

    az ml batch-endpoint invoke --name $ENDPOINT_NAME \
        --set inputs.heart_dataset.path=$INPUT_PATH \
        --set outputs.score.path=$OUTPUT_PATH
    

Następne kroki