Acompanhe o desenvolvimento de modelos usando MLflow
O acompanhamento MLflow permite registrar blocos de anotações e conjuntos de dados de treinamento, parâmetros, métricas, tags e artefatos relacionados ao treinamento de um modelo de aprendizado de máquina ou aprendizado profundo. Para obter um bloco de anotações de exemplo para começar a usar o MLflow, consulte Tutorial: Modelos de ML de ponta a ponta no Azure Databricks.
Rastreamento de MLflow com experimentos e execuções
O processo de desenvolvimento do modelo é iterativo e pode ser um desafio acompanhar o seu trabalho à medida que desenvolve e otimiza um modelo. No Azure Databricks, você pode usar de rastreamento MLflow para ajudá-lo a acompanhar o processo de desenvolvimento do modelo, incluindo configurações de parâmetros ou combinações que você tentou e como elas afetaram o desempenho do modelo.
O rastreamento MLflow usa experimentos e execuções para registrar e acompanhar o desenvolvimento de modelos de ML e deep learning. Uma execução é uma única execução do código do modelo. Durante uma execução MLflow, você pode registrar parâmetros e resultados do modelo. Um experimento é uma coleção de corridas relacionadas. Em um experimento, você pode comparar e filtrar execuções para entender como seu modelo funciona e como seu desempenho depende das configurações de parâmetro, dados de entrada e assim por diante.
- Organize execuções de treinamento com experimentos MLflow
- Veja os resultados da formação com as sessões do MLflow
Nota
A partir de 27 de março de 2024, o MLflow impõe um limite de cota para o número total de parâmetros, tags e etapas métricas para todas as execuções novas e existentes e o número total de execuções para todos os experimentos novos e existentes, consulte Limites de recursos. Se você atingir a cota de execuções por experimento, o Databricks recomenda que você exclua execuções que não são mais necessárias usando a API de execução de exclusão em Python. Se você atingir outros limites de cota, o Databricks recomenda ajustar sua estratégia de registro para se manter abaixo do limite. Se você precisar de um aumento para esse limite, entre em contato com sua equipe de conta Databricks com uma breve explicação do seu caso de uso, por que as abordagens de mitigação sugeridas não funcionam e o novo limite solicitado.
API de rastreamento MLflow
A API MLflow Tracking registra parâmetros, métricas, tags e artefatos de uma execução de modelo. A API de rastreamento se comunica com um servidor de rastreamento MLflow. Quando você usa o Databricks, um servidor de rastreamento hospedado no Databricks registra os dados. O servidor de rastreamento MLflow hospedado tem APIs Python, Java e R.
O MLflow é pré-instalado em clusters de ML do Databricks Runtime. Para usar o MLflow em um cluster do Databricks Runtime, você deve instalar a mlflow
biblioteca. Para obter instruções sobre como instalar uma biblioteca em um cluster, consulte Instalar uma biblioteca em um cluster.
Onde as execuções do MLflow são registradas
Todas as execuções MLflow são registradas no experimento ativo, que pode ser definido usando qualquer uma das seguintes maneiras:
- Use o comando mlflow.set_experiment().
- Use o
experiment_id
parâmetro no comando mlflow.start_run(). - Defina uma das variáveis de ambiente MLflow MLFLOW_EXPERIMENT_NAME ou MLFLOW_EXPERIMENT_ID.
Se nenhum experimento ativo for definido, as execuções serão registradas no experimento do bloco de anotações.
Para registrar os resultados do experimento em um servidor de Controle de MLflow hospedado remotamente em um espaço de trabalho diferente daquele em que você está executando o experimento, defina o URI de controle para fazer referência ao espaço de trabalho remoto com mlflow.set_tracking_uri()
e defina o caminho para o experimento no espaço de trabalho remoto usando mlflow.set_experiment()
.
mlflow.set_tracking_uri(<uri-of-remote-workspace>)
mlflow.set_experiment("path to experiment in remote workspace")
Se você estiver executando experimentos localmente e quiser registrar os resultados do experimento no servidor Databricks MLflow Tracking, forneça sua instância de espaço de trabalho Databricks (DATABRICKS_HOST
) e token de acesso pessoal Databricks (DATABRICKS_TOKEN
). Em seguida, você pode definir o URI de rastreamento para fazer referência ao espaço de trabalho com mlflow.set_tracking_uri()
e definir o caminho para seu experimento usando mlflow.set_experiment()
. Consulte Executar autenticação de token de acesso pessoal do Azure Databricks para obter detalhes sobre onde encontrar valores para as DATABRICKS_HOST
variáveis e DATABRICKS_TOKEN
de ambiente.
O exemplo de código a seguir demonstra a configuração desses valores:
os.environ["DATABRICKS_HOST"] = "https://dbc-1234567890123456.cloud.databricks.com" # set to your server URI
os.environ["DATABRICKS_TOKEN"] = "dapixxxxxxxxxxxxx"
mlflow.set_tracking_uri("databricks")
mlflow.set_experiment("/your-experiment")
Log é executado em um experimento
O MLflow pode registrar automaticamente o código de treinamento escrito em muitas estruturas de aprendizado de máquina e aprendizado profundo. Esta é a maneira mais fácil de começar a usar o rastreamento MLflow. Consulte o exemplo de bloco de anotações.
Para obter mais controle sobre quais parâmetros e métricas são registrados ou para registrar artefatos adicionais, como arquivos CSV ou gráficos, use a API de log MLflow. Consulte o exemplo de bloco de anotações.
Use o registro automático para acompanhar o desenvolvimento do modelo
Este bloco de anotações de exemplo mostra como usar o registro automático com scikit-learn. Para obter informações sobre o registro automático com outras bibliotecas Python, consulte a documentação de registro automático MLflow.
Bloco de notas do Python para registo automático com MLflow
Usar a API de registro em log para acompanhar o desenvolvimento do modelo
Este bloco de anotações de exemplo mostra como usar o Python logging API. O MLflow também tem APIs REST, R e Java.
Caderno Python da API de registo do MLflow
O log é executado em um experimento de espaço de trabalho
Por padrão, quando se treina um modelo num bloco de notas Databricks, as execuções são registadas no experimento do bloco de notas. Somente as execuções do MLflow iniciadas em um bloco de anotações podem ser registradas no experimento do bloco de anotações.
As execuções do MLflow iniciadas a partir de qualquer bloco de anotações ou das APIs podem ser registradas em um experimento de espaço de trabalho. Para registrar execuções em um experimento de espaço de trabalho, use um código semelhante ao seguinte em seu bloco de anotações ou chamada de API:
experiment_name = "/Shared/name_of_experiment/"
mlflow.set_experiment(experiment_name)
Para obter instruções sobre como criar um experimento de espaço de trabalho, consulte Criar experimento de espaço de trabalho. Para obter informações sobre como exibir execuções registradas, consulte Exibir experimento de bloco de anotações e Exibir experiência de espaço de trabalho.
Acessar o servidor de rastreamento MLflow de fora do Azure Databricks
Você também pode gravar e ler no servidor de rastreamento de fora do Azure Databricks, por exemplo, usando a CLI MLflow. Consulte Acessar o servidor de rastreamento MLflow de fora do Azure Databricks.
Analisar MLflow é executado programaticamente
Você pode acessar dados de execução MLflow programaticamente usando as duas APIs DataFrame a seguir:
- O cliente Python MLflow search_runs API retorna um DataFrame pandas.
- A fonte de dados do experimento MLflow retorna um Apache Spark DataFrame.
Este exemplo demonstra como usar o cliente Python MLflow para criar um painel que visualiza as alterações nas métricas de avaliação ao longo do tempo, controla o número de execuções iniciadas por um usuário específico e mede o número total de execuções em todos os usuários:
Por que as métricas e saídas de treinamento do modelo podem variar
Muitos dos algoritmos usados no ML têm um elemento aleatório, como amostragem ou condições iniciais aleatórias dentro do próprio algoritmo. Quando você treina um modelo usando um desses algoritmos, os resultados podem não ser os mesmos com cada execução, mesmo se você iniciar a execução com as mesmas condições. Muitas bibliotecas oferecem um mecanismo de semeadura para fixar as condições iniciais para esses elementos estocásticos. No entanto, pode haver outras fontes de variação que não são controladas pelas sementes. Alguns algoritmos são sensíveis à ordem dos dados, e algoritmos de ML distribuídos também podem ser afetados pela forma como os dados são particionados. Geralmente, esta variação não é significativa e não é importante no processo de desenvolvimento do modelo.
Para controlar a variação causada por diferenças na ordenação e particionamento, use as funções PySpark repartition e sortWithinPartitions.
Exemplos de rastreamento de MLflow
Os blocos de anotações a seguir demonstram como acompanhar o desenvolvimento de modelos usando MLflow.