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.
Para saber como registrar e pontuar um modelo de streaming, consulte Como salvar e carregar um modelo de streaming.
Registrar e carregar modelos
Quando você registra um modelo, o MLflow registra requirements.txt
conda.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.yaml
arquivo . 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 de volumes do Catálogo Unity (como
dbfs:/Volumes/catalog_name/schema_name/volume_name/{path_to_artifact_root}/{model_path}
) - um caminho de armazenamento de artefato gerenciado por MLflow começando 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 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:
- 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.)
- Desloque-se para a secção Artefactos .
- 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.
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 em volumes do Catálogo Unity
Para salvar um modelo localmente, use mlflow.<model-type>.save_model(model, modelpath)
. modelpath
deve ser um caminho de volumes do Catálogo Unity. Por exemplo, se você usar um local dbfs:/Volumes/catalog_name/schema_name/volume_name/my_project_models
de volumes do Catálogo Unity para armazenar o trabalho do projeto, deverá usar o caminho /dbfs/Volumes/catalog_name/schema_name/volume_name/my_project_models
do modelo:
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 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 Mosaic AI Model Serving para hospedar modelos de aprendizado de máquina registrados no registro de modelo do Unity Catalog 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.