Acompanhe experimentos de aprendizado de máquina 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ê aprende:

Pré-requisitos

Veja quais permissões de acesso são necessárias para executar suas operações de MLflow com seu workspace.

Blocos de anotações de exemplo

O repositório Treinando modelos no Azure Databricks e implantando-os no Azure Machine Learning demonstra como treinar modelos no Azure Databricks e implantá-los no Azure Machine Learning. Ele também descreve como acompanhar os experimentos e modelos com a instância do MLflow no Azure Databricks. Ele descreve como usar o Azure Machine Learning para implantação.

Instalar bibliotecas

Para instalar as bibliotecas em seu cluster:

  1. Navegue até a guia Bibliotecas e selecione Instalar Novo.

    Captura de tela mostrando o mlflow com o azure databricks.

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

    Captura de tela mostrando a biblioteca do mlflow do BD do Azure instalada.

Acompanhar as execuções do Azure Databricks com o MLflow

Você pode configurar o Azure Databricks para acompanhar experimentos usando o MLflow de duas maneiras:

Por padrão, quando você vincula seu workspace do Azure Databricks, o acompanhamento duplo é configurado para você.

Acompanhamento duplo no Azure Databricks e no Azure Machine Learning

Vincular o workspace do Azure Databricks 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. Essa configuração é chamada Acompanhamento duplo.

Não há suporte para o acompanhamento duplo em um workspace do Azure Machine Learning habilitado para link privado. Configure o rastreamento exclusivo com seu workspace do Azure Machine Learning.

No momento, não há suporte para o rastreamento duplo no Microsoft Azure operado pela 21Vianet. Configure o rastreamento exclusivo com seu workspace do Azure Machine Learning.

Para vincular seu workspace do Azure Databricks a um workspace do Azure Machine Learning novo ou existente:

  1. Entre no portal do Azure.

  2. Navegue até a página Visão geral do seu workspace do Azure Databricks.

  3. Selecione Vincular workspace do Azure Machine Learning.

    A captura de tela mostra a opção Vincular workspaces do Azure Databricks e Azure Machine Learning.

Depois que você vincular o workspace do Azure Databricks ao workspace do Azure Machine Learning, o acompanhamento do MLflow será automaticamente rastreado nos seguintes locais:

  • O workspace vinculado do Azure Machine Learning.
  • Seu workspace do Azure Databricks original.

Você pode usar o MLflow no Azure Databricks da mesma forma que está acostumado. O exemplo a seguir define o nome do experimento como de costume no Azure Databricks e começa a registrar em log 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

Ao contrário do acompanhamento, os registros de modelos não dão suporte ao registro de modelos ao mesmo tempo no Azure Machine Learning e no Azure Databricks. Para mais informações, consulte Registrar modelos no registro com o MLflow.

Acompanhar exclusivamente 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.

Configure o URI de acompanhamento do MLflow para apontar exclusivamente para o Azure Machine Learning, conforme mostrado no exemplo a seguir:

Configurar o URI de acompanhamento

  1. Obtenha o URI de acompanhamento para seu espaço de trabalho.

    APLICA-SE A: Extensão de ML da CLI do Azurev2 (atual)

    1. Entrar e configurar seu espaço de trabalho.

      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. Configurar o URI de acompanhamento.

    O método set_tracking_uri() aponta o URI de acompanhamento do MLflow para esse URI.

    import mlflow
    
    mlflow.set_tracking_uri(mlflow_tracking_uri)
    

Dica

Ao trabalhar com ambientes compartilhados, como um cluster do Azure Databricks, cluster do Azure Synapse Analytics ou similar, você pode definir a variável de ambiente MLFLOW_TRACKING_URI no nível do cluster. Essa abordagem permite que você configure automaticamente o URI de acompanhamento do MLflow para apontar para o Azure Machine Learning para todas as sessões executadas no cluster, em vez de fazer isso por sessão.

A captura de tela mostra as opções avançadas em que você pode configurar as variáveis de ambiente em um cluster do Azure Databricks.

Depois de configurar a variável de ambiente, qualquer experimento em execução nesse cluster será acompanhado no Azure Machine Learning.

Configurar autenticação

Depois de configurar o acompanhamento, configure como autenticar o espaço de trabalho associado. Por padrão, o plug-in do Azure Machine Learning para o MLflow abre um navegador para solicitar credenciais de forma interativa. Para obter outras maneiras de configurar a autenticação para o MLflow nos workspaces do Azure Machine Learning, confira Configurar o MLflow para o Azure Machine Learning: Configurar autenticação.

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 por navegador interativo bloqueia a execução do código quando solicita credenciais. Essa abordagem não é adequada para autenticação em ambientes não assistidos, como trabalhos de treinamento. Recomendamos que você configure um modo de autenticação diferente.

Para cenários em que a execução não assistida é necessária, você precisa 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, recomendamos que você configure essas variáveis de ambiente na computação. Como melhor prática, gerencie-os como segredos em uma instância do Azure Key Vault.

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>}}. Para obter mais informações sobre como implementar essa abordagem no Azure Databricks, confira Referenciar um segredo em uma variável de ambiente ou consulte a documentação da sua plataforma.

Experimento de nome no Azure Machine Learning

Quando você configura o MLflow para acompanhar exclusivamente experimentos no workspace do Azure Machine Learning, a convenção de nomenclatura de experimentos deve seguir a convenção 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")

Rastrear parâmetros, métricas e artefatos

Após essa configuração, você pode usar o MLflow no Azure Databricks da mesma forma que está acostumado. Para mais informações, confira Registrar 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")

A variante spark não corresponde ao fato de você estar treinando um modelo em um cluster do Spark. Em vez disso, ele decorre da estrutura de treinamento utilizada. Você pode treinar um modelo usando o TensorFlow com o Spark. A variante a ser usada seria tensorflow.

Os modelos são registrados dentro da execução que está sendo controlada. 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 acompanhamento 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, confira Registrar modelos no registro com o MLflow.

Registrar modelos no registro com o MLflow

Ao contrário do acompanhamento, os registros de modelos não podem operar ao mesmo tempo no Azure Databricks e no Azure Machine Learning. Eles precisam usar um ou outro. Por padrão, os registros de modelos usam o workspace do Azure Databricks. Se você optar por configurar o acompanhamento do MLflow para acompanhar apenas no seu workspace do Azure Machine Learning, o registro de modelos será o workspace do Azure Machine Learning.

Se você usar a configuração padrão, o código a seguir registrará um modelo dentro das execuções correspondentes do Azure Databricks e do Azure Machine Learning, mas o registrará 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 objeto MLflow ModelVersion.
  • 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 quiser usar o Registro de Modelo de Azure Machine Learning em vez do Azure Databricks, recomendamos que você configure o acompanhamento do MLflow para acompanhar somente no workspace 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 acompanhamento duplo, mas registrar modelos no Azure Machine Learning, você pode instruir o MLflow a usar o Azure Machine Learning para registros de modelos configurando o URI do Registro de Modelo do MLflow. Este URI tem o mesmo formato e valor que o MLflow que acompanha o URI.

mlflow.set_registry_uri(azureml_mlflow_uri)

Observação

O valor de azureml_mlflow_uri foi obtido da mesma forma descrita em Configurar o acompanhamento do MLflow para acompanhar somente em seu workspace do Azure Machine Learning.

Para um exemplo completo desse cenário, confira Treinando modelos no Azure Databricks e implantando-os no Azure Machine Learning.

Implantar e consumir modelos registrados no Azure Machine Learning

Os modelos registrados no serviço do Azure Machine Learning usando o 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 Azure Machine Learning para inferência em tempo real e em lote nas instâncias de contêiner do Azure, no Kubernetes do Azure ou nos pontos de extremidade de inferência gerenciados.
  • Objetos de modelo MLFlow ou funções definidas pelo usuário (UDFs) do Pandas, que podem ser usados em notebooks do Azure Databricks em pipelines de streaming ou em lote.

Implantar modelos para ponto de extremidade do Azure Machine Learning

Você pode usar o plug-in azureml-mlflow para implantar um modelo no seu workspace do Azure Machine Learning. Para obter mais informações sobre como implantar modelos em diferentes destinos Como implantar modelos do MLflow.

Importante

Os modelos precisam ser registrados no registro Azure Machine Learning para implantá-los. Se seus modelos estiverem registrados na instância do MLflow dentro do Azure Databricks, registre-os novamente no Azure Machine Learning. Para mais informações, confira Treinando modelos no Azure Databricks e implantando-os 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 de lote. Ao usar o Mlflow, você pode resolver qualquer modelo do registro ao qual está conectado. Normalmente, você usa um dos seguintes métodos:

  • Se o seu 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. Você precisa orquestrar qualquer paralelização ou distribuição de trabalho que deseja que ocorra 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á-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) 

Para obter mais maneiras de referenciar modelos do repositório, confira 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) 

Limpar os recursos

Se você quiser manter seu workspace do Azure Databricks, mas não precisar mais do workspace do Azure Machine Learning, poderá excluir 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 não planeja usar as métricas e os artefatos registrados no seu espaço de trabalho, exclua o grupo de recursos que contém a conta de armazenamento e o espaço de trabalho.

  1. No portal do Azure, pesquise Grupos de recursos. Em serviços, selecione Grupos de Recursos.
  2. Na lista Grupos de recursos, localize e selecione o grupo de recursos que você criou para abri-lo.
  3. Na página Visão geral, selecione Excluir grupo de recursos.
  4. Para verificar a exclusão, insira o nome do grupo de recursos.