Share via


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á:

Pré-requisitos

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

mlflow with azure databricks

No campo Pacote, digite azureml-mlflow e selecione instalar. Repita essa etapa conforme necessário para instalar outros pacotes no cluster do experimento.

Azure DB install mlflow library

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:

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

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,

  1. Entre no Portal do Azure.
  2. Navegue até a página Visão geral do workspace do ADB.
  3. Selecione o botão Vincular workspace do Azure Machine Learning no canto inferior direito.

Link Azure DB and Azure Machine Learning workspaces

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.

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

  1. Obtenha o URI de acompanhamento para seu workspace:

    APLICA-SE A:Extensão do ML da CLI do Azure v2 (atual)

    1. Faça logon e configure o seu workspace:

      az account set --subscription <subscription>
      az configure --defaults workspace=<workspace> group=<resource-group> location=<location> 
      
    2. Você pode obter o URI de acompanhamento usando o comando az ml workspace:

      az ml workspace show --query mlflow_tracking_uri
      
  2. 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.

    Configure the environment variables in an Azure Databricks cluster

    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), use mlflow.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 ou mlflow.<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:

  1. No portal do Azure, selecione Grupos de recursos no canto esquerdo.

    Delete in the Azure portal

  2. Selecione o grupo de recursos criado na lista.

  3. Selecione Excluir grupo de recursos.

  4. Insira o nome do grupo de recursos. Em seguida, selecione Excluir.

Próximas etapas