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:
- As bibliotecas necessárias para usar o MLflow com o Azure Databricks e o Azure Machine Learning.
- Como acompanhar execuções do Azure Databricks com MLflow no Azure Machine Learning.
- Como registrar modelos com MLflow para registrá-los no Azure Machine Learning.
- Como implantar e consumir modelos registrados no Azure Machine Learning.
Pré-requisitos
- Instale o pacote, que lida com a conectividade com o Azure Machine Learning, incluindo autenticação
azureml-mlflow
. - Um espaço de trabalho e cluster do Azure Databricks.
- Crie um Espaço de Trabalho do Azure Machine Learning.
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
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.
Controlar as execuções do Azure Databricks com o MLflow
O Azure Databricks pode ser configurado para rastrear experimentos usando MLflow de duas maneiras:
- Rastrear no espaço de trabalho do Azure Databricks e no espaço de trabalho do Azure Machine Learning (rastreamento duplo)
- Acompanhe exclusivamente no Azure Machine Learning
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,
- Inicie sessão no portal do Azure.
- Navegue até a página Visão geral do espaço de trabalho do ADB.
- Selecione o botão Vincular espaço de trabalho do Azure Machine Learning no canto inferior direito.
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
Obtenha o URI de acompanhamento para seu espaço de trabalho:
APLICA-SE A:Extensão ml da CLI do Azure v2 (atual)
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>
Você pode obter o URI de rastreamento usando o
az ml workspace
comando:az ml workspace show --query mlflow_tracking_uri
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.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
comoMLLib
um 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
oumlflow.<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)
Gorjeta
Marque Carregando modelos do Registro para obter mais maneiras de referenciar modelos do Registro .
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:
No portal do Azure, selecione Grupos de recursos na extremidade esquerda.
Na lista, selecione o grupo de recursos que criou.
Selecione Eliminar grupo de recursos.
Insira o nome do grupo de recursos. Em seguida, selecione Eliminar.