Partilhar via


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:

Pré-requisitos

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:

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

    Captura de tela mostrando mlflow com azure databricks.

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

    Captura de tela mostrando a biblioteca mlflow de instalação do Banco de Dados do Azure.

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

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

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:

  1. Inicie sessão no portal do Azure.

  2. Navegue até a página Visão geral do espaço de trabalho do Azure Databricks.

  3. Selecione Vincular espaço de trabalho do Azure Machine Learning.

    A captura de tela mostra a opção Vincular espaços de trabalho do Azure Databricks e 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

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

    APLICA-SE A: Azure CLI ml extension v2 (atual)

    1. Entre 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. 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.

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

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

  1. No portal do Azure, procure Grupo 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.