Acompanhar os experimentos de ML do Azure Databricks com MLflow e Azure Machine Learning
O MLflow é uma biblioteca de open-source para gerenciar o ciclo de vida dos 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 dos dois produtos.
Neste artigo, você aprenderá:
- As bibliotecas exigidas necessárias para usar o MLflow com o Azure Databricks e o Azure Machine Learning.
- Como acompanhar execuções do Azure Databricks com o MLflow no Azure Machine Learning.
- Como registrar modelos com o MLflow para registrá-los no Azure Machine Learning.
- Como implantar e consumir modelos registrados no Azure Machine Learning.
Pré-requisitos
- Instale o pacote
azureml-mlflow
, que lida com a conectividade com o Azure Machine Learning, incluindo a autenticação. - Um cluster e workspace do Azure Databricks.
- Criar um Workspace do Azure Machine Learning.
Blocos de anotações de exemplo
O exemplo Treinamento de modelos no Azure Databricks e implantação no Azure Machine Learning demonstra como treinar modelos no Azure Databricks e implantá-los no Azure Machine Learning. Também inclui como lidar com casos em que você também deseja acompanhar os experimentos e os modelos com a instância do MLflow no Azure Databricks e aproveitar o Azure Machine Learning para implantação.
Instalar bibliotecas
Para instalar as bibliotecas no cluster, navegue até a guia Bibliotecas e clique em Instalar novoa
No campo Pacote, digite azureml-mlflow e selecione instalar. Repita essa etapa conforme necessário para instalar outros pacotes no cluster do experimento.
Acompanhar as execuções do Azure Databricks com o MLflow
O Azure Databricks pode ser configurado para rastrear experimentos usando o MLflow de duas maneiras:
- Rastrear nos workspaces do Azure Databricks e do Azure Machine Learning (rastreamento duplo)
- Rastrear exclusivamente no Azure Machine Learning
Por padrão, o acompanhamento duplo é configurado para você quando você vincula seu workspace do Azure Databricks.
Acompanhamento duplo no Azure Databricks e no Azure Machine Learning
Vincular seu workspace do ADB ao workspace do Azure Machine Learning permite que você acompanhe os dados do experimento no workspace do Azure Machine Learning e no workspace do Azure Databricks ao mesmo tempo. Isso é chamado de rastreamento duplo.
Aviso
No momento, não há suporte para o rastreamento duplo em um workspace do Azure Machine Learning habilitado para o link privado. Configure o rastreamento exclusivo com seu workspace do Azure Machine Learning.
Aviso
O acompanhamento duplo não tem suporte no Microsoft Azure operado pela 21Vianet até o momento. Configure o rastreamento exclusivo com seu workspace do Azure Machine Learning.
Para vincular o workspace do ADB a um workspace novou ou existente do Azure Machine Learning,
- Entre no Portal do Azure.
- Navegue até a página Visão geral do workspace do ADB.
- Selecione o botão Vincular workspace do Azure Machine Learning no canto inferior direito.
Depois de vincular seu workspace do Azure Databricks ao workspace do Azure Machine Learning, o MLflow Tracking será automaticamente definido para ser rastreado em todos os seguintes locais:
- O workspace vinculado do Azure Machine Learning.
- Seu workspace do ADB original.
Você pode usar o MLflow no Azure Databricks da mesma maneira que você está acostumado. O seguinte exemplo define o nome do experimento, pois isso geralmente é feito no Azure Databricks, e inicia o registro em log de 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
Observação
Como oposto ao acompanhamento, os registros de modelo não dão suporte ao registro de modelos ao mesmo tempo no Azure Machine Learning e no Azure Databricks. Um ou outro tem que ser usado. Leia a seção Registrando modelos no registro com o MLflow para obter mais detalhes.
Acompanhamento exclusivo no workspace do Azure Machine Learning
Se preferir gerenciar seus experimentos acompanhados em um local centralizado, você poderá definir o acompanhamento de MLflow para acompanhar somente em seu workspace do Azure Machine Learning. Essa configuração tem a vantagem de habilitar o caminho mais fácil para a implantação usando Azure Machine Learning opções de implantação.
Aviso
Para o workspace do Azure Machine Learning habilitado para o link privado, você precisa implantar o Azure Databricks em sua rede (injeção de VNet) para garantir a conectividade adequada.
Você precisa configurar o URI de acompanhamento do MLflow para apontar exclusivamente para Azure Machine Learning, como é demonstrado no exemplo a seguir:
Configurar o URI de acompanhamento
Obtenha o URI de acompanhamento para seu workspace:
APLICA-SE A:Extensão do ML da CLI do Azure v2 (atual)
Faça logon e configure o seu workspace:
az account set --subscription <subscription> az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
Você pode obter o URI de acompanhamento usando o comando
az ml workspace
:az ml workspace show --query mlflow_tracking_uri
Ao configurar o URI de acompanhamento:
Em seguida, o método
set_tracking_uri()
aponta o URI de acompanhamento de MLflow para esse URI.import mlflow mlflow.set_tracking_uri(mlflow_tracking_uri)
Dica
Ao trabalhar em ambientes compartilhados, como um cluster do Azure Databricks, um cluster do Azure Synapse Analytics ou semelhante, é útil definir a variável de ambiente
MLFLOW_TRACKING_URI
no nível do cluster para configurar automaticamente o URI de acompanhamento do MLflow para apontar para o Azure Machine Learning para todas as sessões em execução no cluster, em vez de fazê-lo por sessão.Quando a variável de ambiente for configurada, qualquer experimento em execução nesse cluster será rastreado no Azure Machine Learning.
Configurar autenticação
Após configurar o acompanhamento, você também precisará configurar como a autenticação precisa acontecer com o workspace associado. Por padrão, o plug-in do Azure Machine Learning para MLflow executará a autenticação interativa abrindo o navegador padrão para solicitar credenciais. Consulte Configurar o MLflow para o Azure Machine Learning: configurar a autenticação para conhecer outras maneiras de configurar a autenticação para o MLflow em workspaces do Azure Machine Learning.
Para trabalhos interativos em que há um usuário conectado à sessão, você pode contar com a Autenticação Interativa e, portanto, nenhuma ação adicional é necessária.
Aviso
A autenticação interativa do navegador bloqueará a execução de código ao solicitar credenciais. Ela não é uma opção adequada para autenticação em ambientes não supervisionados, como trabalhos de treinamento. Recomendamos configurar outro modo de autenticação.
Para cenários em que a execução não supervisionada é necessária, você precisará configurar uma entidade de serviço para se comunicar com o Azure Machine Learning.
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>"
Dica
Ao trabalhar em ambientes compartilhados, é aconselhável configurar essas variáveis de ambiente na computação. Como melhor prática, gerencie-as como segredos em uma instância do Azure Key Vault sempre que possível. Por exemplo, no Azure Databricks, você pode usar segredos em variáveis de ambiente da seguinte maneira na configuração do cluster: AZURE_CLIENT_SECRET={{secrets/<scope-name>/<secret-name>}}
. Consulte Referenciar um segredo em uma variável de ambiente para saber como fazer isso no Azure Databricks ou consulte uma documentação semelhante em sua plataforma.
Nomes do experimento no Azure Machine Learning
Quando o MLflow é configurado para acompanhar exclusivamente experimentos no workspace 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 como /Users/alice@contoso.com/iris-classifier
. No entanto, em Azure Machine Learning, você precisa fornecer o nome do experimento diretamente. Como no exemplo anterior, o mesmo experimento seria nomeado como iris-classifier
diretamente:
mlflow.set_experiment(experiment_name="experiment-name")
Acompanhamento de parâmetros, métricas e artefatos
Você pode usar o MLflow no Azure Databricks da mesma maneira que você está acostumado. Para obter detalhes, consulte Log e exibir métricas e arquivos de log.
Registrar modelos com o MLflow.
Depois que o modelo é treinado, você pode registrá-lo no servidor de acompanhamento de back-end com o método mlflow.<model_flavor>.log_model()
. <model_flavor>
, refere-se à estrutura associada ao modelo. Saiba quais são os tipos de modelo com suporte. No exemplo a seguir, um modelo criado com a biblioteca Spark MLLib está sendo registrado:
mlflow.spark.log_model(model, artifact_path = "model")
Vale a pena mencionar que a variante spark
não corresponde ao fato de estarmos treinando um modelo em um cluster Spark, mas devido à estrutura de treinamento que foi usada (você pode treinar perfeitamente um modelo usando TensorFlow com Spark e, portanto, a variante a ser usada seria tensorflow
).
Os modelos são registrados dentro da execução que está sendo controlada. Isso significa que os modelos estão disponíveis no Azure Databricks e Azure Machine Learning (padrão) ou exclusivamente em Azure Machine Learning se você configurou o URI de rastreamento para apontá-lo.
Importante
Observe que aqui o parâmetro registered_model_name
não foi especificado. Leia a seção Registrando modelos no registro com o MLflow para obter mais detalhes sobre as implicações desse parâmetro e como o registro funciona.
Registrando modelos no registro com MLflow
Como oposto ao acompanhamento, os registros de modelo não podem operar ao mesmo tempo no Azure Databricks e Azure Machine Learning. Um ou outro tem que ser usado. Por padrão, o workspace do Azure Databricks é usado para registros de modelo; a menos que você opte por definir o Acompanhamento do MLflow para rastrear apenas em seu workspace do Azure Machine Learning, o registro do modelo é o workspace do Azure Machine Learning.
Em seguida, considerando que você está usando a configuração padrão, a linha a seguir registrará um modelo dentro das execuções correspondentes do Azure Databricks e Azure Machine Learning, mas ele o registrará apenas 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 objeto ModelVersion do MLflow.
Se um modelo registrado com o nome já existir, o método criará uma versão do modelo e retornará o objeto de versão.
Usar o Registro do Azure Machine Learning com o MLflow
Se você quiser usar o Registro de Modelo do Azure Machine Learning, em vez do Azure Databricks, recomendamos definir o MLflow Tracking para acompanhar apenas o workspace do Azure Machine Learning. Isso removerá a ambiguidade qual ao local em que os modelos estão sendo registrados e reduz a complexidade.
Porém, se você quiser continuar usando os recursos de acompanhamento duplo, mas registrar os modelos no Azure Machine Learning, instrua o MLflow a usar o Azure Machine Learning para os registros de modelo configurando o URI do Registro de Modelo do MLflow. Esse URI tem exatamente o mesmo formato e valor que o URI de acompanhamento do MLflow.
mlflow.set_registry_uri(azureml_mlflow_uri)
Observação
O valor de azureml_mlflow_uri
foi obtido da mesma forma que foi demonstrado em Definir Acompanhamento do MLflow para rastrear apenas em seu workspace do Azure Machine Learning
Para ver um exemplo completo sobre esse cenário, confira o exemplo Treinamento de modelos no Azure Databricks e implantação no Azure Machine Learning.
Implantando e consumindo modelos registrados em Azure Machine Learning
Os modelos registrados no serviço do Azure Machine Learning usando o MLflow podem ser consumidos como:
Um ponto de extremidade Azure Machine Learning (em tempo real e lote): essa implantação permite que você aproveite Azure Machine Learning recursos de implantação para inferência em tempo real e em lote no ACI (Instâncias de Contêiner do Azure) Azure Kubernetes (AKS) ou em nossos pontos de extremidade de Inferência Gerenciada.
Objetos de modelo MLFlow ou UDFs Pandas, que podem ser usados em blocos de anotações do Azure Databricks em pipelines de streaming ou em lote.
Implantar modelos para ponto de extremidade do Azure Machine Learning
Você pode aproveitar o plugin azureml-mlflow
para implantar um modelo em seu workspace do Azure Machine Learning. Confira Como implantar a página de modelos do MLflow para obter detalhes completos sobre como implantar modelos nos diferentes destinos.
Importante
Os modelos precisam ser registrados no registro Azure Machine Learning para implantá-los. Se os modelos forem registrados na instância do MLflow dentro do Azure Databricks, você precisará registrá-los novamente no Azure Machine Learning. Se esse for o seu caso, confira o exemplo Treinamento de modelos no Azure Databricks e implantação no Azure Machine Learning
Implantar modelos a ADB para pontuação de lote usando UDFs
Você pode escolher clusters do Azure Databricks para pontuação de lote. Aproveitando o Mlflow, você pode resolver todo modelo do registro ao qual está conectado. Em geral, você usará um dos dois métodos a seguir:
- Se o modelo foi treinado e criado com bibliotecas do Spark (como
MLLib
), usemlflow.pyfunc.spark_udf
para carregar um modelo e usá-lo como um UDF do Spark Pandas para pontuar novos dados. - Se o modelo não foi treinado ou criado com bibliotecas Spark, use
mlflow.pyfunc.load_model
oumlflow.<flavor>.load_model
para carregar o modelo no driver de cluster. Observe que, dessa forma, toda paralelização ou distribuição de trabalho que você deseja que aconteça no cluster precisa ser orquestrada por você. Além disso, observe que o MLflow não instala nenhuma biblioteca que seu modelo precise executar. Essas bibliotecas precisam ser instaladas no cluster antes de executá-las.
O exemplo a seguir mostra como carregar um modelo do registro chamado uci-heart-classifier
e utilizá-lo como uma UDF do Spark Pandas para pontuar 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)
Dica
Verifique Carregar modelos do Registro para obter mais maneiras de referenciar modelos do registro.
Depois que o modelo é carregado, você pode usar 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)
Limpar recursos
Caso deseje manter o workspace do Azure Databricks, mas não precise mais do workspace do Azure Machine Learning, exclua o workspace do Azure Machine Learning. Essa ação causa a desvinculação do workspace do Azure Databricks e do workspace do Azure Machine Learning.
Se você não planeja usar as métricas registradas e os artefatos no workspace, a opção de excluí-los individualmente não fica disponível neste momento. Em vez disso, exclua o grupo de recursos que contém a conta de armazenamento e o workspace, para que você não incorra nenhum encargo:
No portal do Azure, selecione Grupos de recursos no canto esquerdo.
Selecione o grupo de recursos criado na lista.
Selecione Excluir grupo de recursos.
Insira o nome do grupo de recursos. Em seguida, selecione Excluir.