logs, load, registro e modelos MLflow aprimorados

Um modelo MLflow é um formato padrão para empacotar a versão do machine learning que pode ser usado em uma variedade de ferramentas downstream, por exemplo, inferência de lotes no Apache Spark ou serviço em tempo real por meio de uma API REST. O formato define uma convenção que permite salvar um modelo em diferentes tipos (Python-function, PyTorch, sklearn e assim por diante), que podem ser compreendidos por diferentes plataformas de serviço e inferência de modelo .

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

logs e modelos de carga

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

Importante

Anaconda Inc. atualizou seus termos de serviço para o canal anaconda.org. Com base nos novos termos de serviço, você pode exigir uma licença comercial se confiar no empacotamento e distribuição do Anaconda. Consulte as Perguntas Frequentes do Anaconda Commercial Edition para obter mais informações. Seu uso de qualquer canal Anaconda é regido por seus termos de serviço.

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

Se você logs um modelo antes do MLflow v1.18 sem excluir o canal defaults do ambiente conda para o modelo, esse modelo pode ter uma dependência no canal defaults que você pode não ter pretendido. Para confirmar manualmente se um modelo tem essa dependência, você pode examinar o valor channel no arquivo conda.yaml que acompanha os logs de modelos . Por exemplo, conda.yaml de um modelo com uma dependência de canal defaults pode ter esta aparência:

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

Como o Databricks não pode determinar se o uso do repositório Anaconda para interagir com seus modelos é permitido em seu relacionamento com o Anaconda, o Databricks não está forçando seus clientes a fazer alterações. Se o seu uso do repositório Anaconda.com por meio do Databricks for permitido pelos termos do Anaconda, você não precisará realizar nenhuma ação.

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

Para obter mais informações sobre a API log_model(), consulte a documentação do MLflow para o tipo de modelo com o qual você está trabalhando, por exemplo, logs para Scikit-Learn.

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

comandos da API

Para logs um modelo no servidor de acompanhamento MLflow, use mlflow.<model-type>.log_model(model, ...).

Para carregar logs de modelos anteriores 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 de opções para carregar modelos do MLflow, consulte Referenciando 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. Você pode usar o trecho de código a seguir para carregar o modelo e pontuar os pontos de dados.

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

Como alternativa, você pode exportar o modelo como um Apache Spark UDF para usar para pontuar em clusters Spark, como um Job de lotes ou como um Job transmitido em tempo real do Spark .

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

dependências registradas de modelos

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:

%pip install "mlflow>=1.25.0"

Para obter informações adicionais sobre como modelar logsde dependências ged (Python e não-Python) e artefatos, consulte modelos logsged dependencies.

Aprenda como modelar logsde dependências ged e artefatos customizados para serviço de modelo:

Trechos de código gerados automaticamente na IU do MLflow

Quando você logs um modelo em um Databricks Notebook, o Databricks gera automaticamente trechos de código que você pode copiar e usar para carregar e executar o modelo. Para view esses trechos de código:

  1. Navegue até a tela de execução para a execução que gerou o modelo. (Consulte o experimento View Notebook para saber como exibir a tela de execução.)

  2. Role até a seção Artefatos .

  3. Clique no nome dos logs dos modelos. Um painel é aberto à direita, mostrando o código que você pode usar para carregar os logs dos modelos e fazer previsões no Spark ou nos Pandas DataFrames.

Trechos de código do painel de artefato

Exemplos

Para obter exemplos de modelos de registro em log, consulte os exemplos em Rastrear exemplos de execução de treinamento machine learning . Para obter um exemplo de carregamento de modelos registrados para inferência, consulte Exemplo de inferência de modelo.

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 a 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 dbfs:/Volumes/catalog_name/schema_name/volume_name/my_project_models de volumes do Unity Catalog para armazenar o trabalho do projeto, deverá usar o caminho do modelo /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)

Para modelos MLlib, use ML pipelines.

downloads de artefatos de modelo

Você pode downloads os artefatos logs de modelos (como arquivos de modelo, gráficos e métricas) para um modelo registrado com várias APIs.

Exemplo de API 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 :

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 CLI :

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

aprimorar modelos para atendimento online

O senhor pode usar o Mosaic AI Model Serving para hospedar o modelo do machine learning 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 e seus estágios.

Você também pode aprimorar um modelo para estruturas de serviço de terceiros usando as ferramentas de aprimoramento integradas do MLflow.

Veja os exemplos a seguir: