Controlar experimentações do Azure Databricks ML 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:

Pré-requisitos

Blocos de notas de exemplo

Os modelos de treinamento no Azure Databricks e implantá-los no Azure Machine Learning demonstram como treinar modelos no Azure Databricks e implantá-los no Azure Machine Learning. Ele também inclui como lidar com casos em que você também deseja acompanhar os experimentos e modelos com a instância MLflow no Azure Databricks e aproveitar o Azure Machine Learning para implantação.

Instalar bibliotecas

Para instalar bibliotecas no cluster, navegue até a guia Bibliotecas e selecione Instalar novo

mlflow with azure databricks

No campo Pacote, digite azureml-mlflow e selecione instalar. Repita esta etapa conforme necessário para instalar outros pacotes adicionais ao cluster para seu experimento.

Azure DB install mlflow library

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

O Azure Databricks pode ser configurado para rastrear experimentos usando MLflow de duas maneiras:

Por padrão, o rastreamento duplo é configurado para você quando você vincula seu espaço de trabalho do Azure Databricks.

Rastreamento duplo no Azure Databricks e no Azure Machine Learning

Vincular seu espaço de trabalho ADB 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. Isso é conhecido como Dual-tracking.

Aviso

O rastreamento duplo em um espaço de trabalho do Azure Machine Learning habilitado para link privado não é suportado no momento. Em vez disso, configure o acompanhamento exclusivo com seu espaço de trabalho do Azure Machine Learning.

Aviso

Dual-tracking in não suportado no Microsoft Azure operado pela 21Vianet no momento. 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 ADB a um espaço de trabalho novo ou existente do Azure Machine Learning,

  1. Inicie sessão no portal do Azure.
  2. Navegue até a página Visão geral do espaço de trabalho do ADB.
  3. Selecione o botão Vincular espaço de trabalho do Azure Machine Learning no canto inferior direito.

Link Azure DB and Azure Machine Learning workspaces

Depois de vincular seu espaço de trabalho do Azure Databricks ao seu espaço de trabalho do Azure Machine Learning, o MLflow Tracking é definido automaticamente para ser rastreado em todos os seguintes locais:

  • O espaço de trabalho vinculado do Azure Machine Learning.
  • Seu espaço de trabalho ADB original.

Você pode usar o MLflow no Azure Databricks da mesma maneira que está acostumado. O exemplo a seguir define o nome do experimento como geralmente é feito 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. Ou um ou outro tem de ser usado. Por favor, leia a seção Registrando modelos no registro com MLflow para obter mais detalhes.

Acompanhamento exclusivo 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.

Você precisa configurar o URI de rastreamento MLflow para apontar exclusivamente para o Azure Machine Learning, como é demonstrado no exemplo a seguir:

Configurar URI de rastreamento

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

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

    1. Faça login e configure 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 rastreamento usando o az ml workspace comando:

      az ml workspace show --query mlflow_tracking_uri
      
  2. Configurando o URI de rastreamento:

    Em seguida, 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 em ambientes compartilhados, como um cluster do Azure Databricks, cluster do Azure Synapse Analytics ou similar, é útil definir a variável MLFLOW_TRACKING_URI de ambiente 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

    Depois que a variável de ambiente for configurada, qualquer experimento em execução nesse cluster será rastreado no Aprendizado de Máquina do Azure.

Configurar a autenticação

Depois que o rastreamento estiver configurado, você também precisará configurar como a autenticação precisa acontecer com o espaço de trabalho associado. Por padrão, o plug-in do Azure Machine Learning para MLflow executará 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 formas adicionais de configurar a autenticação para MLflow nos espaços de trabalho do Azure Machine Learning.

Para trabalhos interativos em que há um usuário conectado à sessão, você pode confiar na 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. Não é uma opção adequada para autenticação em ambientes autônomos, como trabalhos de treinamento. Recomendamos configurar outro modo de autenticação.

Para os cenários em que a execução autônoma é necessária, você terá que 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>"

Gorjeta

Ao trabalhar em ambientes compartilhados, é aconselhável configurar essas variáveis de ambiente na computação. Como prática recomendada, gerencie-os 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 forma 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 documentação semelhante em sua plataforma.

Nomes de experiências no Azure Machine Learning

Quando o MLflow é configurado 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, como /Users/alice@contoso.com/iris-classifier. No entanto, no Azure Machine Learning, você precisa fornecer o nome do experimento diretamente. Como no exemplo anterior, o mesmo experimento seria nomeado 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 está acostumado. Para obter detalhes, consulte Log & exibir métricas e arquivos de log.

Registrando modelos 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")

Vale a pena mencionar que o sabor não corresponde ao fato de que estamos treinando um modelo em um cluster Spark, mas por causa da estrutura de treinamento que foi usado (você pode perfeitamente treinar um modelo usando TensorFlow com Spark e, portanto, o sabor spark a usar seria tensorflow).

Os modelos são registrados dentro da corrida que está sendo rastreada. Isso 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

Observe que aqui o parâmetro registered_model_name não foi especificado. Leia a seção Registrando modelos no registro com MLflow para obter mais detalhes sobre as implicações de tal parâmetro e como o registro funciona.

Registrando modelos no registro com MLflow

Ao contrário do rastreamento, os registros de modelo não podem operar ao mesmo tempo no Azure Databricks e no Azure Machine Learning. Ou um ou outro tem de ser usado. Por padrão, o espaço de trabalho do Azure Databricks é usado para registros de modelo; a menos que você opte por definir o Rastreamento de MLflow para rastrear somente em seu espaço de trabalho do Azure Machine Learning, o registro do modelo é o espaço de trabalho 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 do Azure Machine Learning, mas 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 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.

Usando 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 Rastreamento de MLflow para rastrear apenas em seu espaço de trabalho do Azure Machine Learning. Tal eliminará a ambiguidade do local onde os modelos estão a ser registados e simplificará a complexidade.

No entanto, se você quiser continuar usando os recursos de rastreamento duplo, mas registrar modelos no Aprendizado de Máquina do Azure, poderá 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 exatamente o mesmo formato e valor que o URI de rastreamento MLflow.

mlflow.set_registry_uri(azureml_mlflow_uri)

Nota

O valor de foi obtido da mesma forma que foi mostrado 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 sobre esse cenário, verifique o exemplo Modelos de treinamento no Azure Databricks e implante-os no Azure Machine Learning.

Implantando e consumindo 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ê aproveite 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 (ACI), no Kubernetes do Azure (AKS) ou em nossos Pontos de Extremidade de Inferência Gerenciada.

  • Objetos de modelo MLFlow ou Pandas UDFs, que podem ser usados 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 aproveitar o azureml-mlflow plug-in para implantar um modelo em seu espaço de trabalho do Azure Machine Learning. Consulte a página Como implantar modelos MLflow para obter um detalhe completo sobre como implantar modelos nos diferentes destinos.

Importante

Os modelos precisam ser registrados no registro do Azure Machine Learning para implantá-los. Se seus modelos forem registrados na instância MLflow dentro do Azure Databricks, você terá que registrá-los novamente no Azure Machine Learning. Se este for o seu caso, verifique o exemplo de modelos de treinamento no Azure Databricks e implante-os no Azure Machine Learning

Implantar modelos no ADB para pontuação em lote usando UDFs

Você pode escolher clusters do Azure Databricks para pontuação em lote. Ao aproveitar o Mlflow, você pode resolver qualquer modelo do registro ao qual está conectado. Normalmente, você usará um dos dois métodos a seguir:

  • Se o seu modelo foi treinado e construído com bibliotecas do Spark (como ), use para carregar um modelo e use-o mlflow.pyfunc.spark_udf como MLLibum Spark Pandas UDF para marcar novos dados.
  • Se o seu modelo não foi treinado ou criado com bibliotecas do Spark, use mlflow.pyfunc.load_model ou mlflow.<flavor>.load_model carregue o modelo no driver de cluster. Observe que, dessa forma, qualquer paralelização ou distribuição de trabalho que você queira 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 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) 

Depois que o modelo for carregado, você poderá 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) 

Clean up resources (Limpar recursos)

Se desejar manter seu espaço de trabalho do Azure Databricks, mas não precisar mais do espaço de trabalho do Azure Machine Learning, você 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, a capacidade de excluí-los individualmente não está disponível no momento. Em vez disso, exclua o grupo de recursos que contém a conta de armazenamento e o espaço de trabalho, para não incorrer em nenhum custo:

  1. No portal do Azure, selecione Grupos de recursos na extremidade esquerda.

    Delete in the Azure portal

  2. Na lista, selecione o grupo de recursos que criou.

  3. Selecione Eliminar grupo de recursos.

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

Próximos passos