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.yaml
elementu . Można to zrobić, określając kanał w parametrze conda_env
log_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:
Używanie niestandardowych bibliotek języka Python z obsługą modelu
Tworzenie pakietów artefaktów niestandardowych 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:
- Przejdź do ekranu Przebiegi przebiegu, który wygenerował model. (Zobacz Wyświetl eksperyment notesu, aby wyświetlić ekran Uruchomienia).
- Przewiń do sekcji Artifacts (Artefakty ).
- 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.
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_models
modelu :
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.