Share via


Registre, carregue, registre e implante modelos MLflow

Um modelo MLflow é um formato padrão para empacotar modelos de aprendizado de máquina que podem ser usados em uma variedade de ferramentas downstream — por exemplo, inferência em lote 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 sabores (python-function, pytorch, sklearn, e assim por diante), que pode ser entendido por diferentes plataformas de serviço de modelo e inferência.

Registrar e carregar modelos

Quando você registra um modelo, o MLflow registra requirements.txtconda.yaml e arquiva automaticamente. Você pode usar esses arquivos para recriar o ambiente de desenvolvimento do modelo e reinstalar dependências usando virtualenv (recomendado) ou conda.

Importante

atualizou seus termos de serviço para anaconda.org canais. Com base nos novos termos de serviço, você pode precisar de uma licença comercial se depender da embalagem e distribuição da Anaconda. Consulte Anaconda Commercial Edition FAQ para obter mais informações. Seu uso de qualquer canal Anaconda é regido por seus termos de serviço.

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

Se você registrou um modelo antes do MLflow v1.18 sem excluir o defaults canal do ambiente conda para o modelo, esse modelo pode ter uma dependência do defaults canal que você pode não ter pretendido. Para confirmar manualmente se um modelo tem essa dependência, você pode examinar channel o valor no arquivo que é empacotado conda.yaml com o modelo registrado. Por exemplo, um modelo com uma dependência de conda.yaml canal pode ter esta defaults 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 a Databricks não pode determinar se seu uso do repositório Anaconda para interagir com seus modelos é permitido sob seu relacionamento com a Anaconda, a Databricks não está forçando seus clientes a fazer alterações. Se o seu uso do repositório de Anaconda.com através do uso do Databricks for permitido sob os termos da Anaconda, você não precisará tomar nenhuma ação.

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

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

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

Comandos da API

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

Para carregar um modelo registrado anteriormente para inferência ou desenvolvimento posterior, use mlflow.<model-type>.load_model(modelpath), onde modelpath é uma das seguintes opções:

  • um caminho relativo à execução (como runs:/{run_id}/{model-path})
  • um caminho DBFS
  • um caminho de modelo registrado (como models:/{model_name}/{model_stage}).

Para obter uma lista completa de opções para carregar modelos 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 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 um cluster do Spark, seja como um trabalho em lote ou como um trabalho de Spark Streaming em tempo real.

# 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 do modelo de log

Para carregar um modelo com precisão, você deve certificar-se de que as dependências do modelo sejam carregadas com as versões corretas no ambiente do bloco de anotações. No Databricks Runtime 10.5 ML e superior, o MLflow avisa se for detetada uma incompatibilidade entre o ambiente atual e as dependências do modelo.

A funcionalidade adicional para simplificar a restauração das dependências do modelo está incluída no Databricks Runtime 11.0 ML e superior. No Databricks Runtime 11.0 ML e superior, para pyfunc modelos de sabor, você pode ligar mlflow.pyfunc.get_model_dependencies para recuperar e baixar 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>. Quando você carrega um modelo como um UDF PySpark, especifique env_manager="virtualenv" na mlflow.pyfunc.spark_udf chamada. Isso restaura as dependências do modelo no contexto do UDF do PySpark e não afeta o ambiente externo.

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

%pip install "mlflow>=1.25.0"

Para obter informações adicionais sobre como registrar dependências de modelo (Python e não-Python) e artefatos, consulte Log model dependencies.

Saiba como registrar dependências de modelo e artefatos personalizados para servir o modelo:

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

Quando você registra um modelo em um bloco de anotações do Azure Databricks, o Azure Databricks gera automaticamente trechos de código que você pode copiar e usar para carregar e executar o modelo. Para exibir esses trechos de código:

  1. Navegue até a tela Execuções da execução que gerou o modelo. (Ver Veja a experiência do bloco de notas para saber como apresentar o ecrã Execuções.)
  2. Desloque-se para a secção Artefactos .
  3. Clique no nome do modelo registrado. Um painel é aberto à direita mostrando o código que você pode usar para carregar o modelo registrado e fazer previsões no Spark ou pandas DataFrames.

Trechos de código do painel de artefatos

Exemplos

Para obter exemplos de modelos de registro, consulte os exemplos em Rastrear exemplos de execuções de treinamento de aprendizado de máquina. Para obter um exemplo de carregamento de um modelo registrado para inferência, consulte o Exemplo de inferência de modelo.

Registar modelos no Registo Modelo

Você pode registrar modelos no MLflow Model Registry, um repositório de modelos centralizado que fornece uma interface do usuário e um conjunto de APIs para gerenciar o ciclo de vida completo dos modelos MLflow. Para obter instruções sobre como usar o Registro de Modelo para gerenciar modelos no Databricks Unity Catalog, consulte Gerenciar o ciclo de vida do modelo no Unity Catalog. Para usar o Registro do Modelo de Espaço de Trabalho, consulte Gerenciar o ciclo de vida do modelo usando o Registro do Modelo de Espaço de Trabalho (legado).

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

Salvar modelos no DBFS

Para salvar um modelo localmente, use mlflow.<model-type>.save_model(model, modelpath). modelpath deve ser um caminho DBFS . Por exemplo, se você usar um local dbfs:/my_project_models DBFS para armazenar o trabalho do projeto, deverá usar o caminho /dbfs/my_project_modelsdo modelo:

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

Para modelos do MLlib, utilize Pipelines de ML.

Baixar artefatos de modelo

Você pode baixar os artefatos de modelo registrados (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 da CLI:

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

Implantar modelos para atendimento online

Você pode usar o Model Serving para hospedar modelos de aprendizado de máquina do Registro Modelo como pontos de extremidade REST. Esses pontos de extremidade são atualizados automaticamente com base na disponibilidade das versões do modelo e seus estágios.

Você também pode implantar um modelo em estruturas de serviço de terceiros usando as ferramentas de implantação internas do MLflow. Veja o seguinte exemplo.