Acompanhe as experiências de aprendizado de máquina do Azure Databricks com o MLflow e o Azure Machine Learning
MLflow é uma biblioteca de código aberto para gerenciar o ciclo de vida de seus experimentos de aprendizado de máquina. Você pode usar o MLflow para integrar o Azure Databricks ao Azure Machine Learning para garantir que você obtenha o melhor de ambos os produtos.
Neste artigo, vai aprender a:
- As bibliotecas necessárias para usar o MLflow com o Azure Databricks e o Azure Machine Learning.
- Como acompanhar execuções do Azure Databricks com MLflow no Azure Machine Learning.
- Como registrar modelos com MLflow para registrá-los no Azure Machine Learning.
- Como implantar e consumir modelos registrados no Azure Machine Learning.
Pré-requisitos
- O
azureml-mlflow
pacote, que lida com a conectividade com o Azure Machine Learning, incluindo autenticação. - Um espaço de trabalho e cluster do Azure Databricks.
- Um espaço de trabalho do Azure Machine Learning.
Veja quais permissões de acesso você precisa para executar suas operações MLflow com seu espaço de trabalho.
Blocos de notas de exemplo
Os modelos de treinamento no Azure Databricks e implantá-los no repositório do Azure Machine Learning demonstra como treinar modelos no Azure Databricks e implantá-los no Azure Machine Learning. Ele também descreve como controlar os experimentos e modelos com a instância MLflow no Azure Databricks. Ele descreve como usar o Aprendizado de Máquina do Azure para implantação.
Instalar bibliotecas
Para instalar bibliotecas no cluster:
Navegue até a guia Bibliotecas e selecione Instalar novo.
No campo Pacote, digite azureml-mlflow e selecione Instalar. Repita esta etapa conforme necessário para instalar outros pacotes no cluster para seu experimento.
Controlar as execuções do Azure Databricks com o MLflow
Você pode configurar o Azure Databricks para rastrear experimentos usando MLflow de duas maneiras:
- Rastrear no espaço de trabalho do Azure Databricks e no espaço de trabalho do Azure Machine Learning (rastreamento duplo)
- Acompanhe exclusivamente no Azure Machine Learning
Por padrão, quando você vincula seu espaço de trabalho do Azure Databricks, o rastreamento duplo é configurado para você.
Dual-track no Azure Databricks e Azure Machine Learning
Vincular seu espaço de trabalho do Azure Databricks ao seu espaço de trabalho do Azure Machine Learning permite que você acompanhe seus dados de experimento no espaço de trabalho do Azure Machine Learning e no espaço de trabalho do Azure Databricks ao mesmo tempo. Essa configuração é chamada de Dual-tracking.
O rastreamento duplo em um espaço de trabalho do Azure Machine Learning habilitado para link privado não é suportado no momento, independentemente da configuração de regras de saída ou se o Azure Databricks foi implantado em sua própria rede (injeção de VNet). Em vez disso, configure o acompanhamento exclusivo com seu espaço de trabalho do Azure Machine Learning. Observe que isso não implica que a injeção de VNet
Atualmente, o rastreamento duplo não é suportado no Microsoft Azure operado pela 21Vianet. Em vez disso, configure o acompanhamento exclusivo com seu espaço de trabalho do Azure Machine Learning.
Para vincular seu espaço de trabalho do Azure Databricks a um espaço de trabalho novo ou existente do Azure Machine Learning:
Inicie sessão no portal do Azure.
Navegue até a página Visão geral do espaço de trabalho do Azure Databricks.
Selecione Vincular espaço de trabalho do Azure Machine Learning.
Depois de vincular seu espaço de trabalho do Azure Databricks ao seu espaço de trabalho do Azure Machine Learning, o rastreamento de MLflow é rastreado automaticamente nos seguintes locais:
- O espaço de trabalho vinculado do Azure Machine Learning.
- Seu espaço de trabalho original do Azure Databricks.
Você pode usar o MLflow no Azure Databricks da mesma maneira que está acostumado. O exemplo a seguir define o nome do experimento como de costume no Azure Databricks e começa a registrar alguns parâmetros.
import mlflow
experimentName = "/Users/{user_name}/{experiment_folder}/{experiment_name}"
mlflow.set_experiment(experimentName)
with mlflow.start_run():
mlflow.log_param('epochs', 20)
pass
Nota
Ao contrário do rastreamento, os registros de modelo não oferecem suporte ao registro de modelos ao mesmo tempo no Azure Machine Learning e no Azure Databricks. Para obter mais informações, consulte Registrar modelos no registro com MLflow.
Acompanhe exclusivamente no espaço de trabalho do Azure Machine Learning
Se preferir gerenciar seus experimentos rastreados em um local centralizado, você pode definir o rastreamento de MLflow para rastrear apenas em seu espaço de trabalho do Azure Machine Learning. Essa configuração tem a vantagem de habilitar um caminho mais fácil para a implantação usando as opções de implantação do Azure Machine Learning.
Aviso
Para o espaço de trabalho do Azure Machine Learning habilitado para link privado, você precisa implantar o Azure Databricks em sua própria rede (injeção de VNet) para garantir a conectividade adequada.
Configure o URI de rastreamento MLflow para apontar exclusivamente para o Azure Machine Learning, conforme mostrado no exemplo a seguir:
Configurar URI de rastreamento
Obtenha o URI de acompanhamento para o seu espaço de trabalho.
APLICA-SE A: Azure CLI ml extension v2 (atual)
Entre e configure seu espaço de trabalho.
az account set --subscription <subscription> az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
Você pode obter o URI de rastreamento usando o
az ml workspace
comando.az ml workspace show --query mlflow_tracking_uri
Configure o URI de acompanhamento.
O método
set_tracking_uri()
aponta o URI de rastreamento MLflow para esse URI.import mlflow mlflow.set_tracking_uri(mlflow_tracking_uri)
Gorjeta
Ao trabalhar com ambientes compartilhados, como um cluster do Azure Databricks, cluster do Azure Synapse Analytics ou similar, você pode definir a variável MLFLOW_TRACKING_URI
de ambiente no nível do cluster. Essa abordagem permite configurar automaticamente o URI de rastreamento MLflow para apontar para o Aprendizado de Máquina do Azure para todas as sessões executadas no cluster, em vez de fazê-lo por sessão.
Depois de configurar a variável de ambiente, qualquer experiência em execução nesse cluster é rastreada no Aprendizado de Máquina do Azure.
Configurar a autenticação
Depois de configurar o acompanhamento, configure como autenticar no espaço de trabalho associado. Por padrão, o plug-in do Azure Machine Learning para MLflow abre um navegador para solicitar credenciais interativamente. Para obter outras maneiras de configurar a autenticação para MLflow em espaços de trabalho do Azure Machine Learning, consulte Configurar MLflow para Azure Machine Learning: Configurar autenticação.
Para trabalhos interativos em que há um usuário conectado à sessão, você pode confiar na autenticação interativa. Não são necessárias mais ações.
Aviso
A autenticação interativa do navegador bloqueia a execução de código quando solicita credenciais. Essa abordagem não é adequada para autenticação em ambientes autônomos, como trabalhos de treinamento. Recomendamos que você configure um modo de autenticação diferente nesses ambientes.
Para cenários que exigem execução autônoma, você precisa configurar uma entidade de serviço para se comunicar com o Azure Machine Learning. Para obter informações sobre como criar uma entidade de serviço, consulte Configurar uma entidade de serviço.
Use a ID do locatário, a ID do cliente e o segredo do cliente da entidade de serviço no código a seguir:
import os
os.environ["AZURE_TENANT_ID"] = "<Azure-tenant-ID>"
os.environ["AZURE_CLIENT_ID"] = "<Azure-client-ID>"
os.environ["AZURE_CLIENT_SECRET"] = "<Azure-client-secret>"
Gorjeta
Quando você trabalha em ambientes compartilhados, recomendamos que configure essas variáveis de ambiente no nível de computação. Como prática recomendada, gerencie-os como segredos em uma instância do Azure Key Vault.
Por exemplo, em uma configuração de cluster do Azure Databricks, você pode usar segredos em variáveis de ambiente da seguinte maneira: AZURE_CLIENT_SECRET={{secrets/<scope-name>/<secret-name>}}
. Para obter mais informações sobre como implementar essa abordagem no Azure Databricks, consulte Referenciar um segredo em uma variável de ambiente ou consulte a documentação da sua plataforma.
Experiência de nome no Azure Machine Learning
Quando você configura o MLflow para rastrear exclusivamente experimentos no espaço de trabalho do Azure Machine Learning, a convenção de nomenclatura do experimento deve seguir a usada pelo Azure Machine Learning. No Azure Databricks, os experimentos são nomeados com o caminho para onde o experimento é salvo, por exemplo /Users/alice@contoso.com/iris-classifier
. No entanto, no Azure Machine Learning, você fornece o nome do experimento diretamente. O mesmo experimento seria nomeado iris-classifier
diretamente.
mlflow.set_experiment(experiment_name="experiment-name")
Rastreie parâmetros, métricas e artefatos
Após essa configuração, você pode usar o MLflow no Azure Databricks da mesma maneira que está acostumado. Para obter mais informações, consulte Log & view metrics and log files.
Modelos de log com MLflow
Depois que seu modelo for treinado, você poderá registrá-lo no servidor de rastreamento com o mlflow.<model_flavor>.log_model()
método. <model_flavor>
refere-se à estrutura associada ao modelo. Saiba quais sabores de modelo são suportados.
No exemplo a seguir, um modelo criado com a biblioteca do Spark MLLib está sendo registrado.
mlflow.spark.log_model(model, artifact_path = "model")
O sabor spark
não corresponde ao fato de que você está treinando um modelo em um cluster Spark. Pelo contrário, decorre do quadro de formação utilizado. Você pode treinar um modelo usando o TensorFlow com o Spark. O sabor a usar seria tensorflow
.
Os modelos são registrados dentro da corrida que está sendo rastreada. Esse fato significa que os modelos estão disponíveis no Azure Databricks e no Azure Machine Learning (padrão) ou exclusivamente no Azure Machine Learning se você configurou o URI de rastreamento para apontar para ele.
Importante
O parâmetro registered_model_name
não foi especificado. Para obter mais informações sobre esse parâmetro e o Registro, consulte Registrando modelos no Registro com MLflow.
Registrar modelos no registro com MLflow
Ao contrário do acompanhamento, os registros de modelo não podem operar ao mesmo tempo no Azure Databricks e no Azure Machine Learning. Eles têm que usar um ou outro. Por padrão, os registros de modelo usam o espaço de trabalho do Azure Databricks. Se você optar por definir o controle de MLflow para rastrear somente em seu espaço de trabalho do Azure Machine Learning, o registro do modelo será o espaço de trabalho do Azure Machine Learning.
Se você usar a configuração padrão, o código a seguir registra um modelo dentro das execuções correspondentes do Azure Databricks e do Azure Machine Learning, mas o registra somente no Azure Databricks.
mlflow.spark.log_model(model, artifact_path = "model",
registered_model_name = 'model_name')
- Se um modelo registrado com o nome não existir, o método registrará um novo modelo, criará a versão 1 e retornará um
ModelVersion
objeto MLflow. - Se já existir um modelo registrado com o nome, o método criará uma nova versão do modelo e retornará o objeto version.
Usar o registro do Azure Machine Learning com MLflow
Se você quiser usar o Registro do Modelo do Azure Machine Learning em vez do Azure Databricks, recomendamos que você defina o acompanhamento do MLflow para rastrear somente em seu espaço de trabalho do Azure Machine Learning. Essa abordagem elimina a ambiguidade de onde os modelos estão sendo registrados e simplifica a configuração.
Se quiser continuar usando os recursos de rastreamento duplo, mas registrar modelos no Aprendizado de Máquina do Azure, você pode instruir o MLflow a usar o Aprendizado de Máquina do Azure para registros de modelo configurando o URI do Registro do Modelo MLflow. Esse URI tem o mesmo formato e valor que o MLflow que rastreia o URI.
mlflow.set_registry_uri(azureml_mlflow_uri)
Nota
O valor de foi obtido da mesma forma descrita em Definir rastreamento de MLflow para rastrear somente em seu espaço de azureml_mlflow_uri
trabalho do Azure Machine Learning.
Para obter um exemplo completo desse cenário, consulte Modelos de treinamento no Azure Databricks e implantá-los no Azure Machine Learning.
Implantar e consumir modelos registrados no Azure Machine Learning
Os modelos registrados no Serviço de Aprendizado de Máquina do Azure usando MLflow podem ser consumidos como:
- Um ponto de extremidade do Azure Machine Learning (em tempo real e em lote). Essa implantação permite que você use os recursos de implantação do Aprendizado de Máquina do Azure para inferência em tempo real e em lote em Instâncias de Contêiner do Azure, Kubernetes do Azure ou Pontos de Extremidade de Inferência Gerenciados.
- Objetos de modelo MLFlow ou funções definidas pelo usuário (UDFs) Pandas, que podem ser usadas em blocos de anotações do Azure Databricks em pipelines de streaming ou em lote.
Implantar modelos em pontos de extremidade do Azure Machine Learning
Você pode usar o azureml-mlflow
plug-in para implantar um modelo em seu espaço de trabalho do Azure Machine Learning. Para obter mais informações sobre como implantar modelos nos diferentes destinos Como implantar modelos MLflow.
Importante
Os modelos precisam ser registrados no registro do Azure Machine Learning para implantá-los. Se seus modelos estiverem registrados na instância MLflow dentro do Azure Databricks, registre-os novamente no Azure Machine Learning. Para obter mais informações, consulte Modelos de treinamento no Azure Databricks e implantá-los no Azure Machine Learning
Implantar modelos no Azure Databricks para pontuação em lote usando UDFs
Você pode escolher clusters do Azure Databricks para pontuação em lote. Usando o Mlflow, você pode resolver qualquer modelo do registro ao qual está conectado. Você geralmente usa um dos seguintes métodos:
- Se o seu modelo foi treinado e construído com bibliotecas do Spark como
MLLib
, usemlflow.pyfunc.spark_udf
para carregar um modelo e o usou como um UDF do Spark Pandas para pontuar novos dados. - Se o seu modelo não foi treinado ou criado com bibliotecas do Spark, use
mlflow.pyfunc.load_model
oumlflow.<flavor>.load_model
carregue o modelo no driver de cluster. Você precisa orquestrar qualquer paralelização ou distribuição de trabalho que você deseja que aconteça no cluster. O MLflow não instala nenhuma biblioteca que seu modelo precise para ser executado. Essas bibliotecas precisam ser instaladas no cluster antes de executá-lo.
O exemplo a seguir mostra como carregar um modelo do registro nomeado uci-heart-classifier
e usado como um Spark Pandas UDF para marcar novos dados.
from pyspark.sql.types import ArrayType, FloatType
model_name = "uci-heart-classifier"
model_uri = "models:/"+model_name+"/latest"
#Create a Spark UDF for the MLFlow model
pyfunc_udf = mlflow.pyfunc.spark_udf(spark, model_uri)
Para obter mais maneiras de referenciar modelos do Registro, consulte Carregando modelos do Registro.
Depois que o modelo for carregado, você poderá usar esse comando para pontuar novos dados.
#Load Scoring Data into Spark Dataframe
scoreDf = spark.table({table_name}).where({required_conditions})
#Make Prediction
preds = (scoreDf
.withColumn('target_column_name', pyfunc_udf('Input_column1', 'Input_column2', ' Input_column3', …))
)
display(preds)
Clean up resources (Limpar recursos)
Se você quiser manter seu espaço de trabalho do Azure Databricks, mas não precisar mais do espaço de trabalho do Azure Machine Learning, poderá excluir o espaço de trabalho do Azure Machine Learning. Esta ação resulta na desvinculação do espaço de trabalho do Azure Databricks e do espaço de trabalho do Azure Machine Learning.
Se você não planeja usar as métricas e artefatos registrados em seu espaço de trabalho, exclua o grupo de recursos que contém a conta de armazenamento e o espaço de trabalho.
- No portal do Azure, procure Grupo de recursos. Em serviços, selecione Grupos de recursos.
- Na lista Grupos de recursos, localize e selecione o grupo de recursos que você criou para abri-lo.
- Na página Visão geral, selecione Excluir grupo de recursos.
- Para verificar a exclusão, insira o nome do grupo de recursos.