Rejestrowanie, ładowanie, rejestrowanie i wdrażanie modeli MLflow

Model MLflow to standardowy format tworzenia pakietów modeli uczenia maszynowego, które mogą być używane w różnych narzędziach podrzędnych — na przykład wnioskowanie wsadowe na platformie Apache Spark lub obsługa w czasie rzeczywistym za pośrednictwem interfejsu API REST. Format definiuje konwencję umożliwiającą zapisywanie modelu w różnych wersjach (python-function, pytorch, sklearn itd.), które mogą być zrozumiałe dla różnych platform obsługujących i wnioskowania modelu.

Modele rejestrowania i ładowania

Podczas rejestrowania modelu narzędzie MLflow automatycznie rejestruje requirements.txt i conda.yaml pliki. Tych plików można użyć do ponownego utworzenia środowiska deweloperskiego modelu i ponownego zainstalowania zależności przy użyciu ( virtualenv zalecane) lub conda.

Ważne

Anaconda Inc. zaktualizowała swoje warunki świadczenia usług dla kanałów anaconda.org. Na podstawie nowych warunków świadczenia usług możesz wymagać licencji komercyjnej, jeśli korzystasz z opakowania i dystrybucji anaconda. Aby uzyskać więcej informacji, zobacz Często zadawane pytania dotyczące wersji komercyjnej Anaconda. Korzystanie z jakichkolwiek kanałów Anaconda podlega warunkom świadczenia usług.

Modele MLflow zarejestrowane przed wersją 1.18 (Databricks Runtime 8.3 ML lub starsze) były domyślnie rejestrowane przy użyciu kanału Conda defaults (https://repo.anaconda.com/pkgs/) jako zależności. Ze względu na tę zmianę licencji usługa Databricks zatrzymała korzystanie z kanału defaults dla modeli zarejestrowanych przy użyciu platformy MLflow w wersji 1.18 lub nowszej. Zarejestrowany kanał domyślny to teraz conda-forge, co wskazuje na zarządzaną https://conda-forge.org/przez społeczność.

Jeśli zarejestrowano model przed MLflow w wersji 1.18 bez wykluczania defaults kanału ze środowiska conda dla modelu, ten model może mieć zależność od kanału defaults , którego być może nie zamierzasz. Aby ręcznie potwierdzić, czy model ma tę zależność, możesz sprawdzić channel wartość w conda.yaml pliku spakowanym przy użyciu zarejestrowanego modelu. Na przykład model conda.yaml z zależnością kanału defaults może wyglądać następująco:

channels:
- defaults
dependencies:
- python=3.8.8
- pip
- pip:
    - mlflow
    - scikit-learn==0.23.2
    - cloudpickle==1.6.0
      name: mlflow-env

Ponieważ usługa Databricks nie może określić, czy korzystanie z repozytorium Anaconda do interakcji z modelami jest dozwolone w ramach relacji z platformą Anaconda, usługa Databricks nie zmusza swoich klientów do wprowadzania żadnych zmian. Jeśli korzystanie z repozytorium Anaconda.com za pośrednictwem korzystania z usługi Databricks jest dozwolone zgodnie z warunkami platformy Anaconda, nie musisz podejmować żadnych działań.

Jeśli chcesz zmienić kanał używany w środowisku modelu, możesz ponownie zarejestrować model w rejestrze modeli przy użyciu nowego conda.yamlelementu . Można to zrobić, określając kanał w parametrze conda_envlog_model().

Aby uzyskać więcej informacji na temat interfejsu log_model() API, zobacz dokumentację platformy MLflow dotyczącą odmiany modelu, z którą pracujesz, na przykład log_model dla biblioteki scikit-learn.

Aby uzyskać więcej informacji na conda.yaml temat plików, zobacz dokumentację platformy MLflow.

Polecenia interfejsu API

Aby zarejestrować model na serwerze śledzenia MLflow, użyj polecenia mlflow.<model-type>.log_model(model, ...).

Aby załadować wcześniej zarejestrowany model do wnioskowania lub dalszego programowania, użyj metody mlflow.<model-type>.load_model(modelpath), gdzie modelpath jest jednym z następujących elementów:

  • ścieżka względna przebiegu (na przykład runs:/{run_id}/{model-path})
  • ścieżka systemu plików DBFS
  • zarejestrowana ścieżka modelu (na przykład models:/{model_name}/{model_stage}).

Aby uzyskać pełną listę opcji ładowania modeli MLflow, zobacz Referencing Artifacts (Odwoływanie się do artefaktów) w dokumentacji platformy MLflow.

W przypadku modeli języka Python MLflow dodatkową opcją jest mlflow.pyfunc.load_model() załadowanie modelu jako ogólnej funkcji języka Python. Poniższy fragment kodu służy do ładowania modelu i oceniania punktów danych.

model = mlflow.pyfunc.load_model(model_path)
model.predict(model_input)

Alternatywnie możesz wyeksportować model jako funkcję UDF platformy Apache Spark do użycia do oceniania w klastrze Spark jako zadania wsadowego lub zadania przesyłania strumieniowego spark w czasie rzeczywistym.

# load input data table as a Spark DataFrame
input_data = spark.table(input_table_name)
model_udf = mlflow.pyfunc.spark_udf(spark, model_path)
df = input_data.withColumn("prediction", model_udf())

Zależności modelu dzienników

Aby dokładnie załadować model, upewnij się, że zależności modelu są ładowane z odpowiednimi wersjami do środowiska notesu. W środowisku Databricks Runtime 10.5 ML i nowszym platforma MLflow ostrzega, jeśli między bieżącym środowiskiem a zależnościami modelu zostanie wykryta niezgodność.

Dodatkowe funkcje upraszczające przywracanie zależności modelu są uwzględniane w środowisku Databricks Runtime 11.0 ML i nowszym. W środowisku Databricks Runtime 11.0 ML i nowszym w przypadku pyfunc modeli smakowych można wywołać metodę mlflow.pyfunc.get_model_dependencies pobierania i pobierania zależności modelu. Ta funkcja zwraca ścieżkę do pliku zależności, który można następnie zainstalować przy użyciu polecenia %pip install <file-path>. Podczas ładowania modelu jako funkcji zdefiniowanej przez użytkownika PySpark należy określić env_manager="virtualenv" w wywołaniu mlflow.pyfunc.spark_udf . Spowoduje to przywrócenie zależności modelu w kontekście funkcji zdefiniowanej przez użytkownika PySpark i nie ma wpływu na środowisko zewnętrzne.

Możesz również użyć tej funkcji w środowisku Databricks Runtime 10.5 lub nowszym, ręcznie instalując bibliotekę MLflow w wersji 1.25.0 lub nowszej:

%pip install "mlflow>=1.25.0"

Aby uzyskać dodatkowe informacje na temat rejestrowania zależności modelu (Python i innych niż Python) i artefaktów, zobacz Log model dependencies (Zależności modelu dzienników).

Dowiedz się, jak rejestrować zależności modelu i niestandardowe artefakty na potrzeby obsługi modelu:

Automatycznie wygenerowane fragmenty kodu w interfejsie użytkownika platformy MLflow

Podczas rejestrowania modelu w notesie usługi Azure Databricks usługa Azure Databricks automatycznie generuje fragmenty kodu, które można skopiować i użyć do załadowania i uruchomienia modelu. Aby wyświetlić te fragmenty kodu:

  1. Przejdź do ekranu Przebiegi przebiegu, który wygenerował model. (Zobacz Wyświetl eksperyment notesu, aby wyświetlić ekran Uruchomienia).
  2. Przewiń do sekcji Artifacts (Artefakty ).
  3. Kliknij nazwę zarejestrowanego modelu. Po prawej stronie zostanie otwarty panel przedstawiający kod, którego można użyć do załadowania zarejestrowanego modelu i przewidywania na ramkach danych platformy Spark lub biblioteki pandas.

Artifact panel code snippets

Przykłady

Przykłady modeli rejestrowania można znaleźć w temacie Śledzenie przykładów trenowania uczenia maszynowego. Przykład ładowania zarejestrowanego modelu do wnioskowania można znaleźć w przykładzie wnioskowania modelu.

Rejestrowanie modeli w rejestrze modeli

Modele można zarejestrować w rejestrze modeli MLflow, scentralizowanym magazynie modeli, który udostępnia interfejs użytkownika i zestaw interfejsów API do zarządzania pełnym cyklem życia modeli MLflow. Aby uzyskać instrukcje dotyczące sposobu używania rejestru modeli do zarządzania modelami w wykazie aparatu Unity usługi Databricks, zobacz Zarządzanie cyklem życia modelu w wykazie aparatu Unity. Aby użyć rejestru modeli obszaru roboczego, zobacz Zarządzanie cyklem życia modelu przy użyciu rejestru modeli obszaru roboczego.

Aby zarejestrować model przy użyciu interfejsu API, użyj polecenia mlflow.register_model("runs:/{run_id}/{model-path}", "{registered-model-name}").

Zapisywanie modeli w systemie plików DBFS

Aby zapisać model lokalnie, użyj polecenia mlflow.<model-type>.save_model(model, modelpath). modelpath musi być ścieżką systemu plików DBFS . Jeśli na przykład do przechowywania pracy projektu używasz lokalizacji dbfs:/my_project_models systemu plików DBFS, musisz użyć ścieżki /dbfs/my_project_modelsmodelu :

modelpath = "/dbfs/my_project_models/model-%f-%f" % (alpha, l1_ratio)
mlflow.sklearn.save_model(lr, modelpath)

W przypadku modeli MLlib użyj potoków uczenia maszynowego.

Pobieranie artefaktów modelu

Zarejestrowane artefakty modelu (takie jak pliki modelu, wykresy i metryki) można pobrać dla zarejestrowanego modelu z różnymi interfejsami API.

Przykład interfejsu API języka Python:

from mlflow.store.artifact.models_artifact_repo import ModelsArtifactRepository

model_uri = MlflowClient.get_model_version_download_uri(model_name, model_version)
ModelsArtifactRepository(model_uri).download_artifacts(artifact_path="")

Przykład interfejsu API języka Java:

MlflowClient mlflowClient = new MlflowClient();
// Get the model URI for a registered model version.
String modelURI = mlflowClient.getModelVersionDownloadUri(modelName, modelVersion);

// Or download the model artifacts directly.
File modelFile = mlflowClient.downloadModelVersion(modelName, modelVersion);

Przykład polecenia interfejsu wiersza polecenia :

mlflow artifacts download --artifact-uri models:/<name>/<version|stage>

Wdrażanie modeli na potrzeby obsługi online

Usługi modelowania można używać do hostowania modeli uczenia maszynowego z rejestru modeli jako punktów końcowych REST. Te punkty końcowe są aktualizowane automatycznie na podstawie dostępności wersji modelu i ich etapów.

Model można również wdrożyć w strukturach obsługujących inne firmy przy użyciu wbudowanych narzędzi wdrażania MLflow. Zobacz poniższy przykład.