Udostępnij za pośrednictwem


Wdrażanie modeli MLflow we wdrożeniach wsadowych w usłudze Azure Machine Learning

DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji 2 (current)Zestaw PYTHON SDK azure-ai-ml v2 (bieżąca)

W tym artykule opisano sposób wdrażania modeli MLflow w usłudze Azure Machine Learning na potrzeby wnioskowania wsadowego przy użyciu punktów końcowych wsadowych. Podczas wdrażania modeli MLflow w punktach końcowych wsadowych usługa Azure Machine Learning wykonuje następujące zadania:

  • Udostępnia obraz podstawowy MLflow lub wyselekcjonowane środowisko zawierające wymagane zależności do uruchomienia zadania wsadowego usługi Machine Learning.
  • Tworzy potok zadania wsadowego ze skryptem oceniania, który może służyć do przetwarzania danych przy użyciu przetwarzania równoległego.

Aby uzyskać więcej informacji na temat obsługiwanych typów plików wejściowych i szczegółów dotyczących działania modelu MLflow, zobacz Zagadnienia dotyczące wdrażania w wnioskowaniu wsadowym.

Wymagania wstępne

  • Subskrypcja platformy Azure. Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.

  • Obszar roboczy usługi Azure Machine Learning. Aby utworzyć obszar roboczy, zobacz Zarządzanie obszarami roboczymi usługi Azure Machine Learning.

  • Następujące uprawnienia w obszarze roboczym usługi Azure Machine Learning:

    • Do tworzenia punktów końcowych i wdrożeń wsadowych lub zarządzania nimi: użyj roli właściciela, współautora lub niestandardowej, która została przypisana Microsoft.MachineLearningServices/workspaces/batchEndpoints/* do uprawnień.
    • Aby utworzyć wdrożenia usługi Azure Resource Manager w grupie zasobów obszaru roboczego: użyj roli właściciel, współautor lub niestandardowa, która została przypisana Microsoft.Resources/deployments/write do uprawnienia w grupie zasobów, w której wdrożono obszar roboczy.
  • Interfejs wiersza polecenia usługi Azure Machine Learning lub zestaw AZURE Machine Learning SDK dla języka Python:

    Uruchom następujące polecenie, aby zainstalować interfejs wiersza polecenia platformy Azure i ml rozszerzenie usługi Azure Machine Learning:

    az extension add -n ml
    

    Wdrożenia składników potoku dla punktów końcowych wsadowych są wprowadzane w wersji 2.7 ml rozszerzenia dla interfejsu wiersza polecenia platformy Azure. Użyj polecenia , az extension update --name ml aby pobrać najnowszą wersję.


Nawiązywanie połączenia z obszarem roboczym

Obszar roboczy to zasób najwyższego poziomu dla usługi Azure Machine Learning. Zapewnia scentralizowane miejsce do pracy ze wszystkimi artefaktami tworzonymi podczas korzystania z usługi Azure Machine Learning. W tej sekcji nawiąż połączenie z obszarem roboczym, w którym wykonujesz zadania wdrażania.

W poniższym poleceniu wprowadź identyfikator subskrypcji, nazwę obszaru roboczego, nazwę grupy zasobów i lokalizację:

az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>

Eksplorowanie przykładu

W przykładzie w tym artykule pokazano, jak wdrożyć model MLflow w punkcie końcowym wsadowym w celu wykonania przewidywań wsadowych. Model MLflow jest oparty na zestawie danych choroby serca UCI. Baza danych zawiera 76 atrybutów, ale w przykładzie użyto tylko podzestawu 14. Model próbuje przewidzieć obecność choroby serca u pacjenta z wartością całkowitą z zakresu od 0 (brak obecności) do 1 (obecność).

Model jest trenowany przy użyciu XGBBoost klasyfikatora. Wszystkie wymagane wstępne przetwarzanie jest pakowane jako potok, co sprawia, że model jest całościowym scikit-learn potokiem, który przechodzi od nieprzetworzonych danych do przewidywań.

Przykład w tym artykule jest oparty na przykładach kodu zawartych w repozytorium azureml-examples . Aby uruchomić polecenia lokalnie bez konieczności kopiowania lub wklejania kodu YAML i innych plików, użyj następujących poleceń, aby sklonować repozytorium i przejść do folderu dla języka kodowania:

git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli

Pliki tego przykładu znajdują się w następującym folderze:

cd endpoints/batch/deploy-models/heart-classifier-mlflow

Postępuj zgodnie z instrukcjami w notesach Jupyter Notebook

Możesz skorzystać z tego przykładu, korzystając z publicznego notesu Jupyter Notebook. W sklonowanym repozytorium otwórz notes mlflow-for-batch-tabular.ipynb .

Wdrażanie modelu MLflow

W tej sekcji wdrożysz model MLflow w punkcie końcowym wsadowym, aby można było uruchamiać wnioskowanie wsadowe na nowych danych. Przed przejściem do przodu przy użyciu wdrożenia należy upewnić się, że model jest zarejestrowany i istnieje dostępny klaster obliczeniowy w obszarze roboczym.

Rejestrowanie modelu

Punkty końcowe usługi Batch mogą wdrażać tylko zarejestrowane modele. W tym artykule użyjesz lokalnej kopii modelu w repozytorium. W związku z tym wystarczy opublikować model w rejestrze w obszarze roboczym.

Uwaga

Jeśli wdrażany model jest już zarejestrowany, możesz przejść do sekcji Tworzenie klastra obliczeniowego.

Zarejestruj model, uruchamiając następujące polecenie:

MODEL_NAME='heart-classifier-mlflow'
az ml model create --name $MODEL_NAME --type "mlflow_model" --path "model"

Tworzenie klastra obliczeniowego

Należy upewnić się, że wdrożenia wsadowe mogą być uruchamiane w niektórych dostępnych infrastrukturach (obliczeniowych). Wdrożenia wsadowe mogą być uruchamiane w dowolnym środowisku obliczeniowym usługi Machine Learning, który już istnieje w obszarze roboczym. Wiele wdrożeń wsadowych może współużytkować tę samą infrastrukturę obliczeniową.

W tym artykule pracujesz w klastrze obliczeniowym usługi Machine Learning o nazwie cpu-cluster. Poniższy przykład sprawdza, czy środowisko obliczeniowe istnieje w obszarze roboczym lub tworzy nowe środowisko obliczeniowe.

Tworzenie klastra obliczeniowego:

az ml compute create -n batch-cluster --type amlcompute --min-instances 0 --max-instances 5

Tworzenie punktu końcowego wsadowego

Aby utworzyć punkt końcowy, potrzebujesz nazwy i opisu. Nazwa punktu końcowego jest wyświetlana w identyfikatorze URI skojarzonym z punktem końcowym, dlatego musi być unikatowa w regionie świadczenia usługi Azure. Na przykład może istnieć tylko jeden punkt końcowy partii o nazwie mybatchendpoint w regionie WestUS2.

  1. Umieść nazwę punktu końcowego w zmiennej, aby ułatwić późniejsze odwołanie:

    Uruchom następujące polecenie:

    ENDPOINT_NAME="heart-classifier"
    
  2. Utwórz punkt końcowy:

    1. Aby utworzyć nowy punkt końcowy, utwórz konfigurację podobną YAML do następującego kodu:

      endpoint.yml

      $schema: https://azuremlschemas.azureedge.net/latest/batchEndpoint.schema.json
      name: heart-classifier-batch
      description: A heart condition classifier for batch inference
      auth_mode: aad_token
      
    2. Utwórz punkt końcowy za pomocą następującego polecenia:

      az ml batch-endpoint create -n $ENDPOINT_NAME -f endpoint.yml
      

Tworzenie wdrożenia wsadowego

Modele MLflow nie wymagają wskazania środowiska ani skryptu oceniania podczas tworzenia wdrożenia. Środowisko lub skrypt oceniania jest tworzony automatycznie. Można jednak określić środowisko lub skrypt oceniania, jeśli chcesz dostosować sposób wnioskowania wdrożenia.

  1. Aby utworzyć nowe wdrożenie w ramach utworzonego punktu końcowego, utwórz konfigurację YAML , jak pokazano w poniższym kodzie. Możesz sprawdzić pełny schemat YAML punktu końcowego wsadowego pod kątem dodatkowych właściwości.

    wdrażanie proste/deployment.yml

    $schema: https://azuremlschemas.azureedge.net/latest/modelBatchDeployment.schema.json
    endpoint_name: heart-classifier-batch
    name: classifier-xgboost-mlflow
    description: A heart condition classifier based on XGBoost
    type: model
    model: azureml:heart-classifier-mlflow@latest
    compute: azureml:batch-cluster
    resources:
      instance_count: 2
    settings:
      max_concurrency_per_instance: 2
      mini_batch_size: 2
      output_action: append_row
      output_file_name: predictions.csv
      retry_settings:
        max_retries: 3
        timeout: 300
      error_threshold: -1
      logging_level: info
    
  2. Utwórz wdrożenie za pomocą następującego polecenia:

    az ml batch-deployment create --file deployment-simple/deployment.yml --endpoint-name $ENDPOINT_NAME --set-default
    

Ważne

Skonfiguruj wartość we wdrożeniu timeout na podstawie tego, jak długo trwa wnioskowanie modelu w jednej partii. Większy rozmiar partii, tym dłużej jest wartość timeout . Należy pamiętać, że mini_batch_size wartość wskazuje liczbę plików w partii, a nie liczbę próbek. Podczas pracy z danymi tabelarycznymi każdy plik może zawierać wiele wierszy, co zwiększa czas potrzebny na przetworzenie każdego pliku przez punkt końcowy partii. W takich przypadkach użyj wartości wysokich timeout , aby uniknąć błędów przekroczenia limitu czasu.

Wywoływanie punktu końcowego

Chociaż można wywołać określone wdrożenie wewnątrz punktu końcowego, często należy wywołać sam punkt końcowy i pozwolić punktowi końcowemu zdecydować, które wdrożenie ma być używane. Ten typ wdrożenia nosi nazwę "domyślnego" wdrożenia. Takie podejście umożliwia zmianę domyślnego wdrożenia, co umożliwia zmianę 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:

DEPLOYMENT_NAME="classifier-xgboost-mlflow"
az ml batch-endpoint update --name $ENDPOINT_NAME --set defaults.deployment_name=$DEPLOYMENT_NAME

Punkt końcowy wsadowy jest teraz gotowy do użycia.

Testowanie wdrożenia

Aby przetestować punkt końcowy, należy użyć próbki danych bez etykiet znajdujących się w tym repozytorium, które mogą być używane z modelem. Punkty końcowe usługi Batch mogą przetwarzać tylko dane znajdujące się w chmurze i dostępne z poziomu obszaru roboczego usługi Machine Learning. W tym przykładzie przekażesz przykład do magazynu danych usługi Machine Learning. Utworzysz zasób danych, który może służyć do wywoływania punktu końcowego na potrzeby oceniania. Należy pamiętać, że punkty końcowe wsadowe akceptują dane, które można umieścić w różnych lokalizacjach.

  1. Najpierw utwórz zasób danych. Zasób danych składa się z folderu z wieloma plikami CSV, które chcemy przetwarzać równolegle przy użyciu punktów końcowych wsadowych. Możesz pominąć ten krok, ponieważ dane są już zarejestrowane jako zasób danych lub chcesz użyć innego typu danych wejściowych.

    1. Utwórz definicję zasobu danych w języku 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: data
      
    2. Utwórz zasób danych:

      az ml data create -f heart-dataset-unlabeled.yml
      
  2. Po przekazaniu danych wywołaj punkt końcowy.

    Napiwek

    W poniższych poleceniach zwróć uwagę, że nazwa wdrożenia nie jest wskazana invoke w operacji. Punkt końcowy automatycznie kieruje zadanie do wdrożenia domyślnego, ponieważ punkt końcowy ma tylko jedno wdrożenie. Można określić określone wdrożenie, wskazując argument/parametr deployment_name.

    Uruchom następujące polecenie:

    JOB_NAME = $(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input azureml:heart-dataset-unlabeled@latest --query name -o tsv)
    

    Uwaga

    jq Narzędzie może nie być zainstalowane w każdej instalacji. Aby uzyskać instrukcje dotyczące instalacji, zobacz Pobieranie pliku jq.

  3. Zadanie wsadowe jest uruchamiane natychmiast po powrocie polecenia. Stan zadania można monitorować do momentu jego zakończenia:

    Uruchom następujące polecenie:

    az ml job show -n $JOB_NAME --web
    

Analizowanie danych wyjściowych

Przewidywania wyjściowe są generowane w pliku predictions.csv , jak wskazano w konfiguracji wdrożenia. Zadanie generuje dane wyjściowe o nazwie score, gdzie ten plik jest umieszczany. Tylko jeden plik jest generowany na zadanie wsadowe.

Plik jest ustrukturyzowany w następujący sposób:

  • Jeden wiersz na każdy punkt danych wysyłany do modelu. W przypadku danych tabelarycznych plik predictions.csv zawiera jeden wiersz dla każdego wiersza znajdującego się w każdym przetworzonym pliku. W przypadku innych typów danych (obrazów, dźwięku, tekstu) istnieje jeden wiersz dla każdego przetworzonego pliku.

  • W pliku znajdują się następujące kolumny (w określonej kolejności):

    • row (opcjonalnie): odpowiedni indeks wiersza w pliku danych wejściowych. Ta kolumna ma zastosowanie tylko wtedy, gdy dane wejściowe są tabelaryczne. Przewidywania są zwracane w tej samej kolejności, w której są wyświetlane w pliku wejściowym. Możesz opierać się na numerze wiersza, aby dopasować odpowiednie przewidywanie.

    • prediction: przewidywanie skojarzone z danymi wejściowymi. Ta wartość jest zwracana jako "as-is", ponieważ została dostarczona predict(). przez funkcję modelu.

    • file_name: nazwa pliku, w którym są odczytywane dane. W danych tabelarycznych użyj tego pola, aby określić, które przewidywanie należy do poszczególnych danych wejściowych.

Wyniki zadania można pobrać przy użyciu nazwy zadania.

Aby pobrać przewidywania, użyj następującego polecenia:

az ml job download --name $JOB_NAME --output-name score --download-path ./

Po pobraniu pliku możesz otworzyć plik za pomocą preferowanego narzędzia do edycji. Poniższy przykład ładuje przewidywania przy użyciu Pandas ramki danych.

import pandas as pd

score = pd.read_csv(
    "named-outputs/score/predictions.csv", names=["row", "prediction", "file"]
)

Dane wyjściowe zawierają tabelę:

Wiersz Przewidywanie Plik
0 0 heart-unlabeled-0.csv
1 1 heart-unlabeled-0.csv
2 0 heart-unlabeled-0.csv
... ... ...
307 0 heart-unlabeled-3.csv

Napiwek

Zwróć uwagę, że w tym przykładzie dane wejściowe zawierają dane tabelaryczne w formacie CSV. Istnieją cztery różne pliki wejściowe: heart-unlabeled-0.csv, heart-unlabeled-1.csv, heart-unlabeled-2.csv i heart-unlabeled-3.csv.

Zapoznaj się z zagadnieniami dotyczącymi wnioskowania wsadowego

Usługa Machine Learning obsługuje wdrażanie modeli MLflow do punktów końcowych wsadowych bez wskazywania skryptu oceniania. Takie podejście jest wygodnym sposobem wdrażania modeli wymagających przetwarzania dużych ilości danych podobnych do przetwarzania wsadowego. Usługa Machine Learning używa informacji w specyfikacji modelu MLflow do organizowania procesu wnioskowania.

Eksplorowanie dystrybucji pracy nad procesami roboczymi

Punkty końcowe usługi Batch dystrybuują pracę na poziomie pliku zarówno dla danych ze strukturą, jak i bez struktury. W związku z tym dla tej funkcji są obsługiwane tylko foldery plików i identyfikatorów URI identyfikatorów URI. Każdy proces roboczy przetwarza partie Mini batch size plików naraz. W przypadku danych tabelarycznych punkty końcowe wsadowe nie uwzględniają liczby wierszy wewnątrz każdego pliku podczas dystrybucji pracy.

Ostrzeżenie

Zagnieżdżone struktury folderów nie są eksplorowane podczas wnioskowania. Jeśli partycjonujesz dane przy użyciu folderów, przed kontynuowaniem pamiętaj o spłaszczeniu struktury.

Wdrożenia wsadowe wywołają predict funkcję modelu MLflow raz na plik. W przypadku plików CSV z wieloma wierszami ta akcja może narzucić wykorzystanie pamięci w bazowym środowisku obliczeniowym. Zachowanie może zwiększyć czas potrzebny na ocenę pojedynczego pliku przez model, szczególnie w przypadku kosztownych modeli, takich jak duże modele językowe. Jeśli wystąpi kilka wyjątków poza pamięcią lub wpisów limitu czasu w dziennikach, rozważ podzielenie danych w mniejszych plikach z mniejszymi wierszami lub zaimplementowanie dzielenia na partie na poziomie wiersza wewnątrz skryptu oceniania modelu.

Przegląd obsługi typów plików

Następujące typy danych są obsługiwane w przypadku wnioskowania wsadowego podczas wdrażania modeli MLflow bez środowiska lub skryptu oceniania. Aby przetworzyć inny typ pliku lub wykonać wnioskowanie inaczej, możesz utworzyć wdrożenie, dostosowując wdrożenie modelu MLflow za pomocą skryptu oceniania.

Rozszerzenie pliku Typ zwracany jako dane wejściowe modelu Wymaganie dotyczące podpisu
.csv, , .parquet.pqt pd.DataFrame ColSpec. Jeśli nie zostanie podana, wpisywanie kolumn nie jest wymuszane.
.png, , .jpg, .jpeg, .tiff, , .bmp.gif np.ndarray TensorSpec. Dane wejściowe są zmieniane tak, aby pasował do kształtu tensorów, jeśli jest dostępny. Jeśli podpis nie jest dostępny, wnioskowane są tensory typu np.uint8 . Aby uzyskać więcej informacji, zobacz Zagadnienia dotyczące modeli MLflow przetwarzania obrazów.

Ostrzeżenie

Każdy nieobsługiwany plik, który może znajdować się w danych wejściowych, powoduje niepowodzenie zadania. W takich przypadkach zostanie wyświetlony błąd podobny do ERROR:azureml:Error processing input file: "/mnt/batch/tasks/.../a-given-file.avro". Typ pliku "avro" nie jest obsługiwany.

Omówienie wymuszania podpisów dla modeli MLflow

Zadania wdrażania wsadowego wymuszają typy danych wejściowych podczas odczytywania danych przy użyciu dostępnego podpisu modelu MLflow. W związku z tym dane wejściowe danych są zgodne z typami wskazanymi w podpisie modelu. Jeśli nie można przeanalizować danych zgodnie z oczekiwaniami, zadanie kończy się niepowodzeniem z powodu błędu podobnego do ERROR:azureml:Error processing input file: '/mnt/batch/tasks/.../a-given-file.csv' (Błąd podczas przetwarzania danych wejściowych: '/mnt/batch/tasks/.../a-given-file.csv'. Wyjątek: nieprawidłowy literał dla int() z wartością podstawową 10: "wartość".

Napiwek

Podpisy w modelach MLflow są opcjonalne, ale są bardzo zachęcane. Zapewniają one wygodny sposób wczesnego wykrywania problemów ze zgodnością danych. Aby uzyskać więcej informacji na temat rejestrowania modeli przy użyciu podpisów, zobacz Rejestrowanie modeli z podpisem niestandardowym, środowiskiem lub przykładami.

Sygnaturę modelu można sprawdzić, otwierając MLmodel plik skojarzony z modelem MLflow. Aby uzyskać więcej informacji na temat sposobu działania podpisów w usłudze MLflow, zobacz Podpisy w usłudze MLflow.

Sprawdzanie obsługi smaków

Wdrożenia wsadowe obsługują wdrażanie modeli MLflow tylko z odmianą pyfunc . Aby wdrożyć inny wariant, zobacz Dostosowywanie wdrożenia modelu za pomocą skryptu oceniania.

Dostosowywanie wdrożenia modelu za pomocą skryptu oceniania

Modele MLflow można wdrożyć w punktach końcowych wsadowych bez wskazania skryptu oceniania w definicji wdrożenia. Można jednak wyrazić zgodę na wskazanie tego pliku (powszechnie określanego jako sterownik wsadowy), aby dostosować wykonywanie wnioskowania.

Zazwyczaj wybierasz ten przepływ pracy dla następujących scenariuszy:

  • Typy plików przetwarzania nie są obsługiwane przez wdrożenia wsadowe wdrożeń platformy MLflow.
  • Dostosuj sposób uruchamiania modelu, na przykład przy użyciu określonego smaku, aby załadować go z funkcją mlflow.<flavor>.load() .
  • Ukończ przetwarzanie wstępne lub końcowe w procedurze oceniania, gdy nie zostanie ukończone przez sam model.
  • Dostosuj prezentację modelu, który nie prezentuje się dobrze przy użyciu danych tabelarycznych, takich jak wykres tensor reprezentujący obraz.
  • Zezwalaj modelowi na odczytywanie danych we fragmentach, ponieważ nie może przetworzyć każdego pliku jednocześnie z powodu ograniczeń pamięci.

Ważne

Aby wskazać skrypt oceniania wdrożenia modelu MLflow, należy określić środowisko, w którym jest uruchamiane wdrożenie.

Korzystanie ze skryptu oceniania

Wykonaj następujące kroki, aby wdrożyć model MLflow z niestandardowym skryptem oceniania:

  1. Zidentyfikuj folder, w którym znajduje się model MLflow.

    1. W portalu usługi Azure Machine Learning przejdź do sekcji Modele.

    2. Wybierz model do wdrożenia, a następnie wybierz kartę Artefakty .

    3. Zanotuj wyświetlony folder. Ten folder został wskazany podczas rejestrowania modelu.

      Zrzut ekranu przedstawiający folder, w którym znajdują się artefakty modelu.

  2. Utwórz skrypt oceniania. Zwróć uwagę, że poprzednia nazwa model folderu jest uwzględniona w init() funkcji.

    deployment-custom/code/batch_driver.py

    # Copyright (c) Microsoft. All rights reserved.
    # Licensed under the MIT license.
    
    import os
    import glob
    import mlflow
    import pandas as pd
    import logging
    
    
    def init():
        global model
        global model_input_types
        global model_output_names
    
        # AZUREML_MODEL_DIR is an environment variable created during deployment
        # It is the path to the model folder
        # Please provide your model's folder name if there's one
        model_path = glob.glob(os.environ["AZUREML_MODEL_DIR"] + "/*/")[0]
    
        # Load the model, it's input types and output names
        model = mlflow.pyfunc.load(model_path)
        if model.metadata and model.metadata.signature:
            if model.metadata.signature.inputs:
                model_input_types = dict(
                    zip(
                        model.metadata.signature.inputs.input_names(),
                        model.metadata.signature.inputs.pandas_types(),
                    )
                )
            if model.metadata.signature.outputs:
                if model.metadata.signature.outputs.has_input_names():
                    model_output_names = model.metadata.signature.outputs.input_names()
                elif len(model.metadata.signature.outputs.input_names()) == 1:
                    model_output_names = ["prediction"]
        else:
            logging.warning(
                "Model doesn't contain a signature. Input data types won't be enforced."
            )
    
    
    def run(mini_batch):
        print(f"run method start: {__file__}, run({len(mini_batch)} files)")
    
        data = pd.concat(
            map(
                lambda fp: pd.read_csv(fp).assign(filename=os.path.basename(fp)), mini_batch
            )
        )
    
        if model_input_types:
            data = data.astype(model_input_types)
    
        # Predict over the input data, minus the column filename which is not part of the model.
        pred = model.predict(data.drop("filename", axis=1))
    
        if pred is not pd.DataFrame:
            if not model_output_names:
                model_output_names = ["pred_col" + str(i) for i in range(pred.shape[1])]
            pred = pd.DataFrame(pred, columns=model_output_names)
    
        return pd.concat([data, pred], axis=1)
    
  3. Utwórz środowisko, w którym można wykonać skrypt oceniania. Ponieważ model w tym przykładzie to MLflow, wymagania conda są również określone w pakiecie modelu. Aby uzyskać więcej informacji na temat modeli MLflow i dołączonych plików, zobacz Format MLmodel.

    W tym kroku utworzysz środowisko przy użyciu zależności conda z pliku. Należy również uwzględnić azureml-core pakiet, który jest wymagany w przypadku wdrożeń usługi Batch.

    Napiwek

    Jeśli model jest już zarejestrowany w rejestrze modeli, możesz pobrać i skopiować conda.yml plik skojarzony z modelem. Plik jest dostępny w usłudze Azure Machine Learning Studio w obszarze Modele>Wybierz model z listy>Artefakty. W folderze głównym wybierz conda.yml plik, a następnie wybierz pozycję Pobierz lub skopiuj jego zawartość.

    Ważne

    W tym przykładzie użyto środowiska conda określonego w lokalizacji /heart-classifier-mlflow/environment/conda.yaml. Ten plik został utworzony przez połączenie oryginalnego pliku zależności MLflow conda i dodanie azureml-core pakietu. Nie można użyć conda.yml pliku bezpośrednio z modelu.

    Definicja środowiska jest uwzględniana w samej definicji wdrożenia jako środowisko anonimowe. We wdrożeniu są widoczne następujące wiersze:

    environment:
      name: batch-mlflow-xgboost
      image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
      conda_file: environment/conda.yaml
    
  4. Konfigurowanie wdrożenia:

    Aby utworzyć nowe wdrożenie w ramach utworzonego punktu końcowego, utwórz konfigurację YAML , jak pokazano w poniższym fragmencie kodu. Możesz sprawdzić pełny schemat YAML punktu końcowego wsadowego pod kątem dodatkowych właściwości.

    wdrożenie niestandardowe/deployment.yml

    $schema: https://azuremlschemas.azureedge.net/latest/modelBatchDeployment.schema.json
    endpoint_name: heart-classifier-batch
    name: classifier-xgboost-custom
    description: A heart condition classifier based on XGBoost
    type: model
    model: azureml:heart-classifier-mlflow@latest
    environment:
      name: batch-mlflow-xgboost
      image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
      conda_file: environment/conda.yaml
    code_configuration:
      code: code
      scoring_script: batch_driver.py
    compute: azureml:batch-cluster
    resources:
      instance_count: 2
    settings:
      max_concurrency_per_instance: 2
      mini_batch_size: 2
      output_action: append_row
      output_file_name: predictions.csv
      retry_settings:
        max_retries: 3
        timeout: 300
      error_threshold: -1
      logging_level: info
    
  5. Utwórz wdrożenie:

    Uruchom następujący kod:

    az ml batch-deployment create --file deployment-custom/deployment.yml --endpoint-name $ENDPOINT_NAME
    

Punkt końcowy wsadowy jest teraz gotowy do użycia.

Czyszczenie zasobów

Po zakończeniu ćwiczenia usuń zasoby, które nie są już wymagane.

Uruchom następujący kod, aby usunąć punkt końcowy wsadowy i wszystkie podstawowe wdrożenia:

az ml batch-endpoint delete --name $ENDPOINT_NAME --yes

To polecenie nie usuwa zadań oceniania wsadowego.