Udostępnij za pośrednictwem


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.

Aby dowiedzieć się, jak rejestrować i oceniać model przesyłania strumieniowego, zobacz Jak zapisać i załadować model przesyłania strumieniowego.

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 MLflowmlflow.<model-type>.log_model(model, ...)

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

  • ścieżka względna przebiegu (na przykład runs:/{run_id}/{model-path})
  • ścieżka Catalogvolumes w Unity (na przykład dbfs:/Volumes/catalog_name/schema_name/volume_name/{path_to_artifact_root}/{model_path})
  • ścieżka magazynu artefaktów zarządzanych przez platformę MLflow rozpoczynająca się od dbfs:/databricks/mlflow-tracking/
  • 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łania 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.

Fragmenty kodu panelu artefaktów

Przykłady

Przykłady modeli rejestrowania można znaleźć w temacie Śledzenie przykładów trenowania uczenia maszynowego.

Rejestrowanie modeli w rejestrze modeli

Modele można zarejestrować w rejestrze modeli MLflow, scentralizowanym repozytorium modeli, które udostępnia interfejs użytkownika oprogramowania i set interfejsów API w celu zarządzania pełnym cyklem życia modeli MLflow. Aby uzyskać instrukcje dotyczące sposobu używania rejestru modeli do zarządzania modelami w usłudze Databricks Unity Catalog, zobacz Zarządzanie cyklem życia modelu w środowisku Unity Catalog. Aby użyć rejestru modeli obszaru roboczego, zobacz Zarządzanie cyklem życia modelu przy użyciu rejestru modeli obszaru roboczego (starsza wersja).

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

Zapisywanie modeli do Unity Catalogvolumes

Aby zapisać model lokalnie, użyj polecenia mlflow.<model-type>.save_model(model, modelpath). modelpath musi być ścieżką Unity Catalogvolumes. Jeśli na przykład używasz lokalizacji Catalogvolumes w Unity dbfs:/Volumes/catalog_name/schema_name/volume_name/my_project_models do przechowywania swojej pracy nad projektem, musisz użyć ścieżki modelu /dbfs/Volumes/catalog_name/schema_name/volume_name/my_project_models:

modelpath = "/dbfs/Volumes/catalog_name/schema_name/volume_name/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

Użyj Mosaic AI Model Serving do hostowania modeli uczenia maszynowego zarejestrowanych w rejestrze modeli Unity Catalog jako punkty końcowe REST. Te punkty końcowe są aktualizowane automatycznie na podstawie dostępności wersji modelu.