Udostępnij za pośrednictwem


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

W przypadku korzystania z punktów końcowych wsadowych w usłudze Azure Machine Learning można wykonywać długie operacje wsadowe na dużych ilościach danych wejściowych. Dane mogą znajdować się w różnych miejscach, takich jak w różnych regionach. Niektóre typy punktów końcowych wsadowych mogą również odbierać parametry literału jako dane wejściowe.

W tym artykule opisano sposób określania danych wejściowych parametrów dla punktów końcowych wsadowych i tworzenia zadań wdrażania. Proces obsługuje pracę z danymi z różnych źródeł, takich jak zasoby danych, magazyny danych, konta magazynu i pliki lokalne.

Wymagania wstępne

  • Punkt końcowy i wdrożenie wsadowe. Aby utworzyć te zasoby, zobacz Wdrażanie modeli MLflow we wdrożeniach wsadowych w usłudze Azure Machine Learning.

  • Uprawnienia do uruchamiania wdrożenia punktu końcowego wsadowego. Aby uruchomić wdrożenie, możesz użyć ról usługi AzureML badacze dancyh, Współautor i Właściciel. Aby zapoznać się z określonymi uprawnieniami wymaganymi dla niestandardowych definicji ról, zobacz Autoryzacja w punktach końcowych wsadowych.

  • Poświadczenia do wywoływania punktu końcowego. Aby uzyskać więcej informacji, zobacz Ustanawianie uwierzytelniania.

  • Odczyt dostępu do danych wejściowych z klastra obliczeniowego, w którym wdrożono punkt końcowy.

    Napiwek

    Niektóre sytuacje wymagają użycia magazynu danych bez poświadczeń lub zewnętrznego konta usługi Azure Storage jako danych wejściowych. W tych scenariuszach upewnij się, że skonfigurowaliśmy klastry obliczeniowe na potrzeby dostępu do danych, ponieważ tożsamość zarządzana klastra obliczeniowego jest używana do instalowania konta magazynu. Nadal masz szczegółową kontrolę dostępu, ponieważ tożsamość zadania (invoker) jest używana do odczytywania danych bazowych.

Ustanawianie uwierzytelniania

Aby wywołać punkt końcowy, potrzebny jest prawidłowy token firmy Microsoft Entra. Po wywołaniu punktu końcowego usługa Azure Machine Learning tworzy zadanie wdrożenia wsadowego w ramach tożsamości skojarzonej z tokenem.

  • Jeśli używasz interfejsu wiersza polecenia usługi Azure Machine Learning (wersja 2) lub zestawu AZURE Machine Learning SDK dla języka Python (wersja 2) do wywoływania punktów końcowych, nie musisz ręcznie pobierać tokenu entra firmy Microsoft. Podczas logowania system uwierzytelnia tożsamość użytkownika. Pobiera również token i przekazuje go za Ciebie.
  • Jeśli używasz interfejsu API REST do wywoływania punktów końcowych, musisz ręcznie pobrać token.

Możesz użyć własnych poświadczeń do wywołania, zgodnie z opisem w poniższych procedurach.

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

az login

Aby uzyskać więcej informacji na temat różnych typów poświadczeń, zobacz Jak uruchamiać zadania przy użyciu różnych typów poświadczeń.

Tworzenie podstawowych zadań

Aby utworzyć zadanie na podstawie punktu końcowego wsadowego, należy wywołać punkt końcowy. Wywołanie można wykonać przy użyciu interfejsu wiersza polecenia usługi Azure Machine Learning, zestawu AZURE Machine Learning SDK dla języka Python lub wywołania interfejsu API REST.

W poniższych przykładach przedstawiono podstawy wywołania dla punktu końcowego wsadowego, który odbiera pojedynczy folder danych wejściowych do przetwarzania. Przykłady obejmujące różne dane wejściowe i wyjściowe, zobacz Omówienie danych wejściowych i wyjściowych.

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. Aby zmienić używane wdrożenie, możesz użyć poniższych procedur.

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 zadania można skonfigurować w czasie wywołania.

Uwaga

Obecnie właściwości zadania można skonfigurować tylko w punktach końcowych wsadowych przy użyciu wdrożeń składników potoku.

Konfigurowanie nazwy eksperymentu

Aby skonfigurować nazwę eksperymentu, użyj poniższych procedur.

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

  • Dane wejściowe lub wskaźniki do określonej lokalizacji magazynu lub zasobu usługi Azure Machine Learning
  • Dane wejściowe literału lub wartości literału, takie jak liczby lub ciągi, które chcesz przekazać do zadania

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 we wdrożeniach modelu. Z kolei wdrożenia składników potoku zapewniają bardziej ogólną konstrukcję do tworzenia punktów końcowych. We wdrożeniu składnika potoku można określić dowolną liczbę danych wejściowych, danych wejściowych literału 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. Każda nazwa służy jako klucz do identyfikowania danych i przekazywania wartości podczas wywołania. Ponieważ wdrożenia modelu zawsze wymagają jednego danych wejściowych i wyjściowych, nazwy są ignorowane podczas wywołania we wdrożeniach modelu. Możesz przypisać nazwę, która najlepiej opisuje przypadek użycia, na przykład sales_estimation.

Eksplorowanie danych wejściowych

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 w docelowym wystąpieniu obliczeniowym w celu zwiększenia wydajności.

Punkty końcowe usługi Batch mogą odczytywać pliki znajdujące się w następujących typach magazynu:

  • Zasoby danych usługi Azure Machine Learning, w tym typy folderów (uri_folder) i plików (uri_file).
  • Magazyny danych usługi Azure Machine Learning, 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 blob Storage, Data Lake Storage Gen1 i Data Lake Storage Gen2.
  • Lokalne foldery danych i pliki, gdy używasz interfejsu wiersza polecenia usługi Azure Machine Learning lub zestawu AZURE Machine Learning SDK dla języka Python do wywoływania punktów końcowych. Jednak dane lokalne są przekazywane do domyślnego magazynu danych obszaru roboczego usługi Azure Machine Learning.

Ważne

Powiadomienie o wycofaniu: Zasoby 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ć. Nie ma jednak obsługi zestawów danych w wersji 1 w punktach końcowych wsadowych, które są tworzone za pomocą:

  • Wersje interfejsu wiersza polecenia usługi Azure Machine Learning w wersji 2, które są ogólnie dostępne (2.4.0 i nowsze).
  • Wersje interfejsu API REST, które są ogólnie dostępne (2022-05-01 i nowsze).

Eksplorowanie danych wejściowych 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. Aby zobaczyć, jak określić punkty końcowe literału, zobacz Tworzenie zadań z danymi wejściowymi literału.

Eksplorowanie danych wyjściowych

Dane wyjściowe danych odnoszą się do lokalizacji, w której są umieszczane wyniki zadania wsadowego. Każde dane wyjściowe mają rozpoznawalną nazwę, a usługa Azure Machine Learning automatycznie przypisuje unikatową ścieżkę do poszczególnych nazwanych danych wyjściowych. Jeśli chcesz, możesz określić inną ścieżkę.

Ważne

Punkty końcowe usługi Batch obsługują tylko zapisywanie danych wyjściowych w magazynach danych usługi Blob Storage. Jeśli musisz zapisać na koncie magazynu z włączonymi hierarchicznymi przestrzeniami nazw, takimi jak Data Lake Storage Gen2, możesz zarejestrować usługę magazynu jako magazyn danych usługi 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 Data Lake Storage Gen2.

Tworzenie zadań przy użyciu danych wejściowych

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

Używanie danych wejściowych z zasobu danych

Zasoby danych usługi Azure Machine Learning (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, które używa danych wejściowych przechowywanych w zarejestrowanym zasobie danych w usłudze Azure Machine Learning.

Ostrzeżenie

Zasoby danych tabeli typów (MLTable) nie są obecnie obsługiwane.

  1. Utwórz zasób danych. W tym przykładzie składa się z folderu zawierającego wiele plików CSV. Punkty końcowe wsadowe służą do równoległego przetwarzania plików. Ten krok można pominąć, jeśli dane są już zarejestrowane jako zasób danych.

    1. Utwórz definicję zasobu danych w pliku YAML o nazwie heart-data.yml:

      $schema: https://azuremlschemas.azureedge.net/latest/data.schema.json
      name: heart-data
      description: An unlabeled data asset for heart classification.
      type: uri_folder
      path: data
      
    2. Utwórz zasób danych:

      az ml data create -f heart-data.yml
      
  2. Skonfiguruj dane wejściowe:

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

    Identyfikator zasobu danych ma format /subscriptions/<subscription-ID>/resourceGroups/<resource-group-name>/providers/Microsoft.MachineLearningServices/workspaces/<workspace-name>/data/<data-asset-name>/versions/<data-asset-version>.

  3. Uruchom punkt końcowy:

    Użyj argumentu , --set aby określić dane wejściowe. Najpierw zastąp wszystkie łączniki w nazwie zasobu danych znakami podkreślenia. Klucze mogą zawierać tylko znaki alfanumeryczne i znaki podkreślenia.

    az ml batch-endpoint invoke --name $ENDPOINT_NAME \
        --set inputs.heart_data.type="uri_folder" inputs.heart_data.path=$DATA_ASSET_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 $DATA_ASSET_ID
    

    Argument --set ma tendencję do tworzenia długich poleceń podczas określania wielu danych wejściowych. W takich przypadkach można wyświetlić listę danych wejściowych w pliku, a następnie odwołać się do pliku podczas wywoływania punktu końcowego. Można na przykład utworzyć plik YAML o nazwie inputs.yml zawierający następujące wiersze:

    inputs:
      heart_data:
        type: uri_folder
        path: /subscriptions/<subscription-ID>/resourceGroups/<resource-group-name>/providers/Microsoft.MachineLearningServices/workspaces/<workspace-name>/data/heart-data/versions/1
    

    Następnie możesz uruchomić następujące polecenie, które używa argumentu --file do określenia danych wejściowych:

    az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml
    

Używanie danych wejściowych z magazynu danych

Zadania wdrażania wsadowego mogą bezpośrednio odwoływać się do danych przechowywanych w zarejestrowanych magazynach danych usługi Azure Machine Learning. W tym przykładzie najpierw przekażesz dane do magazynu danych w obszarze roboczym usługi Azure Machine Learning. Następnie uruchomisz wdrożenie wsadowe na tych danych.

W tym przykładzie użyto domyślnego magazynu danych, ale możesz użyć innego magazynu danych. W dowolnym obszarze roboczym usługi Azure Machine Learning nazwa domyślnego magazynu danych obiektów blob to workspaceblobstore. Jeśli chcesz użyć innego magazynu danych w poniższych krokach, zastąp workspaceblobstore ciąg nazwą preferowanego magazynu danych.

  1. Przekaż przykładowe dane do magazynu danych. Przykładowe dane są dostępne w repozytorium azureml-examples . Dane można znaleźć w folderze sdk/python/endpoints/batch/deploy-models/heart-classifier-mlflow/data tego repozytorium.

    1. W usłudze Azure Machine Learning Studio otwórz stronę zasobów danych dla domyślnego magazynu danych obiektów blob, a następnie wyszukaj nazwę kontenera obiektów blob.
    2. Użyj narzędzia, takiego jak Eksplorator usługi Azure Storage lub AzCopy, aby przekazać przykładowe dane do folderu o nazwie heart-disease-uci-unlabeled w tym kontenerze.
  2. Skonfiguruj informacje wejściowe:

    Umieść ścieżkę pliku w zmiennej INPUT_PATH :

    DATA_PATH="heart-disease-uci-unlabeled"
    INPUT_PATH="azureml://datastores/workspaceblobstore/paths/$DATA_PATH"
    

    Zwróć uwagę, paths że folder jest częścią ścieżki wejściowej. Ten format wskazuje, że następująca wartość jest ścieżką.

  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_data.type="uri_folder" inputs.heart_data.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ń podczas określania wielu danych wejściowych. W takich przypadkach można wyświetlić listę danych wejściowych w pliku, a następnie odwołać się do pliku podczas wywoływania punktu końcowego. Można na przykład utworzyć plik YAML o nazwie inputs.yml zawierający następujące wiersze:

    inputs:
      heart_data:
        type: uri_folder
        path: azureml://datastores/workspaceblobstore/paths/<data-path>
    

    Jeśli dane są w pliku, zamiast tego użyj uri_file typu danych wejściowych.

    Następnie możesz uruchomić następujące polecenie, które używa argumentu --file do określenia danych wejściowych:

    az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml
    

Używanie danych wejściowych z konta usługi Azure Storage

Punkty końcowe usługi Azure Machine Learning wsadowe mogą odczytywać dane z lokalizacji w chmurze na kontach usługi Azure Storage, zarówno publicznych, jak i prywatnych. Wykonaj poniższe kroki, aby uruchomić zadanie punktu końcowego wsadowego z danymi na koncie magazynu.

Aby uzyskać więcej informacji na temat dodatkowych wymaganych konfiguracji do odczytywania danych z kont magazynu, zobacz Konfigurowanie klastrów obliczeniowych na potrzeby dostępu do danych.

  1. Skonfiguruj dane wejściowe:

    Ustaw zmienną INPUT_DATA :

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

    Jeśli dane są w pliku, użyj formatu podobnego do poniższego, aby zdefiniować ścieżkę wejściową:

    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_data.type="uri_folder" inputs.heart_data.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ń podczas określania wielu danych wejściowych. W takich przypadkach można wyświetlić listę danych wejściowych w pliku, a następnie odwołać się do pliku podczas wywoływania punktu końcowego. Można na przykład utworzyć plik YAML o nazwie inputs.yml zawierający następujące wiersze:

    inputs:
      heart_data:
        type: uri_folder
        path: https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data
    

    Następnie możesz uruchomić następujące polecenie, które używa argumentu --file do określenia danych wejściowych:

    az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml
    

    Jeśli dane są w pliku, użyj uri_file typu w pliku inputs.yml danych wejściowych.

Tworzenie zadań z danymi wejściowymi literału

Wdrożenia składników potoku mogą przyjmować dane wejściowe literału. Aby zapoznać się z przykładem wdrożenia wsadowego zawierającego podstawowy potok, zobacz How to deploy pipelines with batch endpoints (Jak wdrażać potoki z punktami końcowymi wsadowymi).

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 pliku YAML, takim jak jeden o nazwie inputs.yml:

inputs:
  score_mode:
    type: string
    default: append

Uruchom następujące polecenie, które używa argumentu --file do określenia danych wejściowych.

az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml

Możesz również użyć argumentu --set , aby określić typ i wartość domyślną. Jednak takie podejście ma tendencję do tworzenia długich poleceń podczas określania wielu 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ę danych wyjściowych o nazwie score. W przypadku kompletności przykład konfiguruje również dane wejściowe o nazwie heart_data.

W tym przykładzie użyto domyślnego magazynu danych workspaceblobstore. Możesz jednak użyć dowolnego innego magazynu danych w obszarze roboczym, o ile jest to konto usługi Blob Storage. Jeśli chcesz użyć innego magazynu danych, zastąp w workspaceblobstore poniższych krokach nazwą preferowanego magazynu danych.

  1. Pobierz identyfikator magazynu danych.

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

    Identyfikator magazynu danych ma format /subscriptions/<subscription-ID>/resourceGroups/<resource-group-name>/providers/Microsoft.MachineLearningServices/workspaces/<workspace-name>/datastores/workspaceblobstore.

  2. Tworzenie danych wyjściowych:

    Zdefiniuj wartości wejściowe i wyjściowe w pliku o nazwie inputs-and-outputs.yml. Użyj identyfikatora magazynu danych w ścieżce wyjściowej. Aby uzyskać kompletność, zdefiniuj również dane wejściowe.

    inputs:
      heart_data:
        type: uri_folder
        path: https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data
    outputs:
      score:
        type: uri_file
        path: <data-store-ID>/paths/batch-jobs/my-unique-path
    

    Uwaga

    Zwróć uwagę, paths że folder jest częścią ścieżki wyjściowej. Ten format wskazuje, że następująca wartość jest ścieżką.

  3. Uruchom wdrożenie:

    Użyj argumentu , --file aby określić wartości wejściowe i wyjściowe:

    az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs-and-outputs.yml