Wdrażanie modeli MLflow we wdrożeniach wsadowych

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

W tym artykule dowiesz się, jak wdrożyć modele MLflow na maszynie azure Edukacja dla obu wnioskowania wsadowego przy użyciu punktów końcowych partii. Podczas wdrażania modeli MLflow w punktach końcowych wsadowych usługa Azure Machine Edukacja:

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

Uwaga

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

Informacje o tym przykładzie

W tym przykładzie pokazano, jak wdrożyć model MLflow w punkcie końcowym wsadowym w celu wykonywania przewidywań wsadowych. W tym przykładzie użyto modelu MLflow opartego na zestawie danych choroby serca UCI. Baza danych zawiera 76 atrybutów, ale używamy podzestawu 14 z nich. Model próbuje przewidzieć obecność choroby serca u pacjenta. Jest to liczba całkowita z zakresu od 0 (brak obecności) do 1 (obecność).

Model został wytrenowany przy użyciu XGBBoost klasyfikatora, a wszystkie wymagane wstępne przetwarzanie zostały spakowane jako potok, dzięki czemu ten model będzie gotowym potokiem scikit-learn , 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/wklejania kodu YAML i innych plików, najpierw sklonuj repozytorium, a następnie zmień katalogi na folder:

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

Pliki dla tego przykładu znajdują się w następujących elementach:

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

Postępuj zgodnie z instrukcjami w notesach Jupyter Notebook

Możesz wykonać czynności opisane w tym przykładzie w poniższych notesach. W sklonowanym repozytorium otwórz notes mlflow-for-batch-tabular.ipynb.

Wymagania wstępne

Przed wykonaniem kroków opisanych w tym artykule upewnij się, że masz następujące wymagania wstępne:

  • Subskrypcja platformy Azure. Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto. Wypróbuj bezpłatną lub płatną wersję usługi Azure Machine Edukacja.

  • Obszar roboczy usługi Azure Machine Learning. Jeśli go nie masz, wykonaj kroki opisane w artykule Manage Azure Machine Edukacja workspaces (Zarządzanie obszarami roboczymi usługi Azure Machine Edukacja), aby je utworzyć.

  • Upewnij się, że masz następujące uprawnienia w obszarze roboczym:

    • Tworzenie punktów końcowych i wdrożeń wsadowych lub zarządzanie nimi: użyj roli właściciela, współautora lub niestandardowej, która zezwala na Microsoft.MachineLearningServices/workspaces/batchEndpoints/*usługę .

    • Tworzenie wdrożeń usługi ARM w grupie zasobów obszaru roboczego: użyj roli Właściciel, Współautor lub Niestandardowy, która umożliwia Microsoft.Resources/deployments/write korzystanie z grupy zasobów, w której wdrożono obszar roboczy.

  • Aby pracować z usługą Azure Machine Edukacja, należy zainstalować następujące oprogramowanie:

    Interfejs wiersza polecenia platformy mlAzure i rozszerzenie usługi Azure Machine Edukacja.

    az extension add -n ml
    

    Uwaga

    Wdrożenia składników potoku dla punktów końcowych usługi Batch zostały wprowadzone w wersji 2.7 rozszerzenia dla interfejsu ml wiersza polecenia platformy Azure. Użyj az extension update --name ml polecenia , aby pobrać ostatnią wersję.

Nawiązywanie połączenia z obszarem roboczym

Obszar roboczy jest zasobem najwyższego poziomu dla usługi Azure Machine Learning, który udostępnia scentralizowane miejsce do pracy z wszystkimi tworzonymi podczas korzystania usługi Azure Machine Learning artefaktami. W tej sekcji połączymy się z obszarem roboczym, w którym wykonasz zadania wdrażania.

Przekaż wartości identyfikatora subskrypcji, obszaru roboczego, lokalizacji i grupy zasobów w następującym kodzie:

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

Kroki

Wykonaj następujące kroki, aby wdrożyć model MLflow w punkcie końcowym wsadowym na potrzeby uruchamiania wnioskowania wsadowego na nowych danych:

  1. Punkt końcowy usługi Batch może wdrażać tylko zarejestrowane modele. W tym przypadku mamy już lokalną kopię modelu w repozytorium, więc musimy opublikować model tylko w rejestrze w obszarze roboczym. Ten krok można pominąć, jeśli model, który próbujesz wdrożyć, jest już zarejestrowany.

    MODEL_NAME='heart-classifier-mlflow'
    az ml model create --name $MODEL_NAME --type "mlflow_model" --path "model"
    
  2. Przed przejściem do przodu musimy upewnić się, że wdrożenia wsadowe, które zamierzamy utworzyć, mogą być uruchamiane w ramach infrastruktury (obliczeń). Wdrożenia wsadowe mogą być uruchamiane na dowolnej maszynie azure Edukacja obliczeniowych, które już istnieją w obszarze roboczym. Oznacza to, że wiele wdrożeń wsadowych może współużytkować tę samą infrastrukturę obliczeniową. W tym przykładzie będziemy pracować nad klastrem obliczeniowym usługi Azure Machine Edukacja o nazwie cpu-cluster. Sprawdźmy, czy obliczenia istnieją w obszarze roboczym lub utwórzmy je w inny sposób.

    Utwórz klaster obliczeniowy w następujący sposób:

    az ml compute create -n batch-cluster --type amlcompute --min-instances 0 --max-instances 5
    
  3. Teraz nadszedł czas na utworzenie punktu końcowego i wdrożenia wsadowego. Zacznijmy od punktu końcowego. Punkty końcowe wymagają tylko nazwy i opisu do utworzenia. Nazwa punktu końcowego zostanie zakończona identyfikatorem URI skojarzonym z punktem końcowym. W związku z tym nazwy punktów końcowych partii 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śmy mogli ją łatwo odwołać później.

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

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

    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
    

    Następnie utwórz punkt końcowy za pomocą następującego polecenia:

    az ml batch-endpoint create -n $ENDPOINT_NAME -f endpoint.yml
    
  5. Teraz utwórz wdrożenie. Modele platformy MLflow nie wymagają wskazania środowiska ani skryptu oceniania podczas tworzenia wdrożeń podczas jego tworzenia. Można je jednak określić, jeśli chcesz dostosować sposób wnioskowania wdrożenia.

    Aby utworzyć nowe wdrożenie w ramach utworzonego punktu końcowego, utwórz konfigurację podobną YAML do poniższej. 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
    

    Następnie 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 timeout we wdrożeniu na podstawie tego, jak długo trwa wnioskowanie modelu w jednej partii. Im większy rozmiar partii, tym dłużej ta wartość musi być. Przemień, który mini_batch_size 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ększy czas potrzebny na przetworzenie każdego pliku przez punkt końcowy partii. Użyj wysokich wartości w tych przypadkach, aby uniknąć błędów przekroczenia limitu czasu.

  6. 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 wdrożenia domyślnego, 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:

    DEPLOYMENT_NAME="classifier-xgboost-mlflow"
    az ml batch-endpoint update --name $ENDPOINT_NAME --set defaults.deployment_name=$DEPLOYMENT_NAME
    
  7. W tym momencie nasz punkt końcowy wsadowy jest gotowy do użycia.

Testowanie wdrożenia

Na potrzeby testowania punktu końcowego użyjemy próbki danych bez etykiet znajdujących się w tym repozytorium i 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 Azure Machine Edukacja. W tym przykładzie przekażemy go do magazynu danych usługi Azure Machine Edukacja. W szczególności utworzymy zasób danych, który może służyć do wywoływania punktu końcowego na potrzeby oceniania. Należy jednak zauważyć, że punkty końcowe wsadowe akceptują dane, które można umieścić w różnych lokalizacjach.

  1. Najpierw utwórzmy zasób danych. Ten 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.

    a. 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: data
    

    b. Utwórz zasób danych:

    az ml data create -f heart-dataset-unlabeled.yml
    
  2. Teraz, gdy dane są przekazywane i gotowe do użycia, wywołajmy punkt końcowy:

    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. Instrukcje instalacji można uzyskać w tym linku.

    Napiwek

    Zwróć uwagę, że nie wskazujemy nazwy wdrożenia w operacji wywołania. Dzieje się tak, ponieważ punkt końcowy automatycznie kieruje zadanie do wdrożenia domyślnego. Ponieważ nasz punkt końcowy ma tylko jedno wdrożenie, jest to domyślne. Konkretne wdrożenie można określić, wskazując argument/parametr deployment_name.

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

    az ml job show -n $JOB_NAME --web
    

Analizowanie danych wyjściowych

Przewidywania wyjściowe są generowane w predictions.csv pliku, jak wskazano w konfiguracji wdrożenia. Zadanie generuje nazwane dane wyjściowe o nazwie o nazwie score , w której znajduje się ten plik. Tylko jeden plik jest generowany na zadanie wsadowe.

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

  • Istnieje jeden wiersz dla każdego punktu danych, który został wysłany do modelu. W przypadku danych tabelarycznych oznacza to, że plik (predictions.csv) zawiera jeden wiersz dla każdego wiersza znajdującego się w każdym przetworzonym pliku. W przypadku innych typów danych (np. obrazów, dźwięku, tekstu) istnieje jeden wiersz dla każdego przetworzonego pliku.

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

    • row (opcjonalnie) odpowiedni indeks wiersza w pliku danych wejściowych. Ma to 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, dzięki czemu można polegać na numerze wiersza w celu dopasowania odpowiedniego przewidywania.
    • prediction, przewidywanie skojarzone z danymi wejściowymi. Ta wartość jest zwracana "as-is", która została dostarczona predict(). przez funkcję modelu.
    • file_name, nazwa pliku, z którego odczytywano dane. W danych tabelarycznych użyj tego pola, aby dowiedzieć się, które przewidywanie należy do 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żna go otworzyć przy użyciu ulubionego narzędzia. 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 wyglądają następująco:

wiersz Przewidywania 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 były danymi tabelarycznymi w CSV formacie i istniały 4 różne pliki wejściowe (heart-unlabeled-0.csv, heart-unlabeled-1.csv, heart-unlabeled-2.csv i heart-unlabeled-3.csv).

Zagadnienia dotyczące wdrażania w wnioskowaniu wsadowym

Usługa Azure Machine Edukacja obsługuje wdrażanie modeli MLflow w punktach końcowych wsadowych bez wskazywania skryptu oceniania. Reprezentuje to wygodny sposób wdrażania modeli, które wymagają przetwarzania dużych ilości danych w sposób wsadowy. Usługa Azure Machine Edukacja używa informacji w specyfikacji modelu MLflow do organizowania procesu wnioskowania.

Jak praca jest dystrybuowana dla procesów roboczych

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, pamiętaj o spłaszczeniu struktury wcześniej.

Wdrożenia wsadowe będą wywoływać predict funkcję modelu MLflow raz na plik. W przypadku plików CSV zawierających wiele wierszy może to narzucić wykorzystanie pamięci w bazowym środowisku obliczeniowym i może zwiększyć czas potrzebny modelowi na ocenę pojedynczego pliku (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 modelu/oceniania.

Obsługa typów plików

Następujące typy danych są obsługiwane w przypadku wnioskowania wsadowego podczas wdrażania modeli MLflow bez środowiska i skryptu oceniania. Jeśli chcesz przetworzyć inny typ pliku lub wykonać wnioskowanie w inny sposób, w jaki punkty końcowe wsadowe domyślnie można utworzyć wdrożenie za pomocą skryptu oceniania, jak wyjaśniono w artykule Używanie modeli MLflow ze skryptem 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 dopasować kształt tensorów, jeśli jest dostępny. Jeśli podpis nie jest dostępny, wnioskowane są tensory typu np.uint8 . Aby uzyskać dodatkowe wskazówki, zapoznaj się z tematem Zagadnienia dotyczące przetwarzania obrazów modeli MLflow.

Ostrzeżenie

Należy pamiętać, że każdy nieobsługiwany plik, który może znajdować się w danych wejściowych, spowoduje niepowodzenie zadania. Zostanie wyświetlony wpis błędu w następujący sposób: "ERROR:azureml:Error processing input file: '/mnt/batch/tasks/.../a-given-file.avro". Typ pliku "avro" nie jest obsługiwany."

Wymuszanie podpisu dla modeli MLflow

Typy danych wejściowych są wymuszane przez zadania wdrażania wsadowego podczas odczytywania danych przy użyciu dostępnego podpisu modelu MLflow. Oznacza to, że dane wejściowe powinny być zgodne z typami wskazanymi w podpisie modelu. Jeśli nie można przeanalizować danych zgodnie z oczekiwaniami, zadanie zakończy się niepowodzeniem z komunikatem o błędzie podobnym do następującego: "ERROR:azureml:Error processing input file: '/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, ponieważ zapewniają wygodny sposób wczesnego wykrywania problemów ze zgodnością danych. Aby uzyskać więcej informacji na temat rejestrowania modeli z podpisami, przeczytaj Logging models with a custom signature, environment or samples (Modele rejestrowania przy użyciu niestandardowego podpisu, środowiska lub przykładów).

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 rozwiązaniu MLflow.

Obsługa smaków

Wdrożenia wsadowe obsługują tylko wdrażanie modeli MLflow o pyfunc smaku. Jeśli chcesz wdrożyć inny wariant, zobacz Używanie modeli MLflow ze skryptem oceniania.

Dostosowywanie wdrożeń modeli MLflow 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 (zwykle określanego jako sterownik wsadowy), aby dostosować sposób wykonywania wnioskowania.

Zazwyczaj wybierasz ten przepływ pracy, gdy:

  • Musisz przetworzyć typ pliku, który nie jest obsługiwany przez wdrożenia wsadowe MLflow.
  • Musisz dostosować sposób uruchamiania modelu, na przykład użyć konkretnej odmiany, aby załadować go za pomocą polecenia mlflow.<flavor>.load().
  • Należy wykonać przetwarzanie wstępne/pos w procedurze oceniania, gdy nie jest wykonywane przez sam model.
  • Dane wyjściowe modelu nie mogą być ładnie reprezentowane w danych tabelarycznych. Na przykład jest to tensor reprezentujący obraz.
  • Model nie może przetworzyć każdego pliku jednocześnie z powodu ograniczeń pamięci i musi go odczytać we fragmentach.

Ważne

Jeśli zdecydujesz się wskazać skrypt oceniania dla wdrożenia modelu MLflow, musisz również określić środowisko, w którym zostanie uruchomione wdrożenie.

Kroki

Wykonaj poniższe kroki, aby wdrożyć model MLflow z niestandardowym skryptem oceniania.

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

    a. Przejdź do witryny Azure Machine Edukacja Portal.

    b. Przejdź do sekcji Modele.

    c. Wybierz model, który próbujesz wdrożyć, i kliknij kartę Artefakty.

    d. Zanotuj wyświetlany 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ę, jak nazwa model folderu zidentyfikowana wcześniej została 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órzmy środowisko, w którym można wykonać skrypt oceniania. Ponieważ nasz model to MLflow, wymagania conda są również określone w pakiecie modelu (aby uzyskać więcej informacji na temat modeli MLflow i zawartych w nim plików, zobacz Format MLmodel). Następnie skompilujemy środowisko przy użyciu zależności conda z pliku. Musimy jednak również uwzględnić pakietazureml-core, który jest wymagany dla wdrożeń usługi Batch.

    Napiwek

    Jeśli model jest już zarejestrowany w rejestrze modeli, możesz pobrać/skopiować conda.yml plik skojarzony z modelem, przechodząc do pozycji Azure Machine Edukacja studio> Models > Select your model (Wybieranie modelu) z listy > Artifacts (Artefakty). Otwórz folder główny w obszarze nawigacji i wybierz conda.yml plik na liście. Kliknij 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 pakietu azureml-core. Nie można bezpośrednio użyć conda.yml pliku z modelu.

    Definicja środowiska zostanie uwzględniona w definicji wdrożenia jako środowisko anonimowe. W ramach wdrożenia zobaczysz 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ę podobną YAML do poniższej. 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órzmy teraz wdrożenie:

    az ml batch-deployment create --file deployment-custom/deployment.yml --endpoint-name $ENDPOINT_NAME
    
  6. W tym momencie nasz punkt końcowy wsadowy jest gotowy do użycia.

Czyszczenie zasobów

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