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:
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.)
Role até a seção Artefatos .
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.
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
Use Mosaic AI Model Serving para hospedar o modelo do machine learning registrado em Unity Catalog registro de modelo como endpoint do REST. Esses pontos de extremidade são atualizados automaticamente com base na disponibilidade de versões de modelos.