Pular para o conteúdo principal

log, carga e registro MLflow models

Um MLflow modelo é um formato padrão para empacotar modelos de aprendizado de máquina que podem ser usados em várias ferramentas downstream - por exemplo, inferência de lotes em Apache Spark ou tempo real servindo por meio de um REST API. O formato define uma convenção que permite que o senhor salve um modelo em diferentes sabores (Python-function, PyTorch, sklearn, e assim por diante), que podem ser compreendidos por diferentes plataformas de inferência e de fornecimento de modelos.

Para saber como log e pontuar um modelo de transmissão, consulte Como salvar e carregar um modelo de transmissão.

modelos de registro e carga

Quando o senhor acessa log um modelo, MLflow automaticamente logs requirements.txt e conda.yaml arquivos. Você pode usar esses arquivos para recriar o ambiente de desenvolvimento do modelo e reinstalar dependências usando virtualenv (recomendado) ou conda.

important

A Anaconda Inc. atualizou seus termos de serviço para o canal anaconda.org. Com base nos novos termos de serviço, o senhor pode precisar de uma licença comercial se depender do empacotamento e da distribuição do Anaconda. Para obter mais informações, consulte as Perguntas frequentes sobre o Anaconda Commercial Edition. Seu uso de qualquer canal do Anaconda é regido pelos termos de serviço.

MLflow Os registros de modelos anteriores à v1.18 (Databricks Runtime 8.3 ML ou anterior) eram por registros default com o canal conda defaults (https://repo.anaconda.com/pkgs/) como uma dependência. Devido a essa alteração de licença, o site Databricks interrompeu o uso do canal defaults para registros de modelos que usam MLflow v1.18 e acima. Os registros do canal default agora são conda-forge, que apontam para a comunidade gerenciar https://conda-forge.org/.

Se o senhor fizer o logon de um modelo antes de MLflow v1.18 sem excluir o canal defaults do ambiente conda para o modelo, esse modelo poderá ter uma dependência do canal defaults que o senhor talvez não tenha pretendido. Para confirmar manualmente se um modelo tem essa dependência, o senhor pode examinar o valor channel no arquivo conda.yaml que é empacotado com os modelos registrados. Por exemplo, o site conda.yaml de um modelo com uma dependência de canal defaults pode ter a seguinte aparência:

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

Como a Databricks não pode determinar se o uso do repositório do Anaconda para interagir com seus modelos é permitido de acordo com seu relacionamento com o Anaconda, a Databricks não está forçando seus clientes a fazer nenhuma alteração. Se o seu uso do repositório Anaconda.com por meio do uso do Databricks for permitido de acordo com os termos do Anaconda, o senhor não precisará tomar nenhuma medida.

Se quiser alterar o canal usado no ambiente de um modelo, o senhor pode registrar novamente o modelo no registro de modelo com um novo conda.yaml. O senhor pode fazer isso especificando o canal no parâmetro conda_env de log_model().

Para obter mais informações sobre log_model() API, consulte a documentação MLflow da variante de modelo com a qual o senhor está trabalhando, por exemplo, os logs de scikit-learn.

Para obter mais informações sobre arquivos conda.yaml, consulte a documentaçãoMLflow.

API comando

Para log um modelo para o MLflow servidor de acompanhamento,mlflow.<model-type>.log_model(model, ...) use.

Para carregar um modelo registrado anteriormente para inferência ou desenvolvimento adicional, use mlflow.<model-type>.load_model(modelpath), em que modelpath é um dos seguintes:

  • um caminho relativo à execução (como runs:/{run_id}/{model-path})
  • um caminho de volumes do Unity Catalog (como dbfs:/Volumes/catalog_name/schema_name/volume_name/{path_to_artifact_root}/{model_path})
  • um caminho de armazenamento de artefatos do MLflow-gerenciar que começa com dbfs:/databricks/mlflow-tracking/
  • um caminho de modelo registrado (como models:/{model_name}/{model_stage}).

Para obter uma lista completa das opções de carregamento de modelos do MLflow, consulte Referência a artefatos na documentação do MLflow.

Para modelos Python MLflow, uma opção adicional é usar mlflow.pyfunc.load_model() para carregar o modelo como uma função Python genérica.

O senhor pode usar o seguinte trecho de código para carregar o modelo e pontuar os pontos de dados.

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

Como alternativa, o senhor pode exportar o modelo como um Apache Spark UDF para usar na pontuação de um clustering Spark, seja como um trabalho em lote ou como um trabalho de streamingSpark de tempo real.

Python
# 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())

modelos de dependências registradas

Para carregar um modelo com precisão, certifique-se de que as dependências do modelo sejam carregadas com as versões corretas no ambiente Notebook . No Databricks Runtime 10,5 MLe acima, o MLflow avisa se uma incompatibilidade for detectada entre o ambiente atual e as dependências do modelo.

A funcionalidade adicional para simplificar a restauração de dependências de modelo está incluída no Databricks Runtime 11,0 MLe acima. No Databricks Runtime 11.0 MLe acima, para modelos de tipo pyfunc, você pode chamar mlflow.pyfunc.get_model_dependencies para recuperar e downloads as dependências do modelo. Esta função retorna um caminho para o arquivo de dependências que você pode instalar usando %pip install <file-path>. Ao carregar um modelo como um PySpark UDF, especifique env_manager="virtualenv" na chamada mlflow.pyfunc.spark_udf . Isso restaura as dependências do modelo no contexto do PySpark UDF e não afeta o ambiente externo.

Você também pode usar essa funcionalidade no Databricks Runtime 10.5 ou abaixo instalando manualmente o MLflow versão 1.25.0 ouacima:

Python
%pip install "mlflow>=1.25.0"

Para obter informações adicionais sobre como modelar dependências registradas em log(Python e nãoPython) e artefatos, consulte modelos de dependências registradas.

Saiba como criar modelos logcom dependências e artefatos personalizados para o modelo servindo:

Trechos de código gerados automaticamente na interface do usuário do MLflow

Quando o senhor log um modelo em um Databricks Notebook, o Databricks gera automaticamente trechos de código que podem ser copiados e usados para carregar e executar o modelo. Para view esses trechos de código:

  1. Navegue até a tela de execução da execução que gerou o modelo. (Consulte a experiência de visualização do Notebook para saber como exibir a tela de execução).
  2. Role até a seção Artefatos .
  3. Clique no nome dos modelos registrados. Um painel é aberto à direita mostrando o código que o senhor pode usar para carregar os modelos registrados e fazer previsões em Spark ou Pandas DataFrames.

Trechos de código do painel de artefatos

Exemplos

Para obter exemplos de modelos de registro, consulte os exemplos em Track machine learning treinamento execution examples.

modelos de registro no Model Registry

O senhor pode registrar modelos no MLflow Model Registry, um armazenamento de modelos centralizado que fornece uma interface de usuário e um conjunto de APIs para gerenciar todo o ciclo de vida dos modelos MLflow. Para obter instruções sobre como usar o site Model Registry para gerenciar modelos em Databricks Unity Catalog, consulte gerenciar o ciclo de vida do modelo em Unity Catalog. Para usar o Workspace Model Registry, consulte gerenciar o ciclo de vida do modelo usando o Workspace Model Registry (legado).

Para registrar um modelo usando o API, use mlflow.register_model("runs:/{run_id}/{model-path}", "{registered-model-name}").

Salvar modelos em volumes do Unity Catalog

Para salvar um modelo localmente, use mlflow.<model-type>.save_model(model, modelpath). modelpath deve ser um caminho de volumes do Unity Catalog. Por exemplo, se o senhor usar um local de volumes do Unity Catalog dbfs:/Volumes/catalog_name/schema_name/volume_name/my_project_models para armazenar o trabalho do projeto, deverá usar o caminho do modelo /dbfs/Volumes/catalog_name/schema_name/volume_name/my_project_models:

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

Para modelos MLlib, use o pipelineML.

download de modelos de artefatos

O senhor pode download os artefatos de modelos registrados (como arquivos de modelo, gráficos e métricas) para um modelo registrado com vários APIs.

Exemplo de API Python:

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="")

Exemplo de API Java:

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);

Exemplo de comando da CLI:

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

modelos implantados para atendimento on-line

nota

Antes de implantar seu modelo, é bom verificar se o modelo pode ser servido. Consulte a documentação do MLflow para saber como o senhor pode usar mlflow.models.predict para validar modelos antes da implementação.

Use Mosaic AI Model Serving para hospedar o modelo de aprendizado de máquina registrado em Unity Catalog registro de modelo como endpoint REST. Esses pontos de extremidade são atualizados automaticamente com base na disponibilidade de versões de modelos.