Share via


Executar projetos do MLflow no Azure Databricks

Um Projeto do MLflow é um formato para empacotar o código de ciência de dados de forma reutilizável e reproduzível. O componente de projetos do MLflow inclui uma API e ferramentas de linha de comando para executar projetos, que também se integram ao componente de acompanhamento para registrar automaticamente os parâmetros e os commits no Git do seu código-fonte para reprodutibilidade.

Este artigo descreve o formato de um projeto de MLflow e como executá-lo remotamente em clusters do Azure Databricks usando a CLI do MLflow, o que torna fácil dimensionar verticalmente seu código de ciência de dados.

Formato de projeto do MLflow

Qualquer diretório local ou repositório Git pode ser tratado como um projeto do MLflow. As seguintes convenções definem um projeto:

  • O nome do projeto é o nome do diretório.
  • O ambiente de software é especificado em python_env.yaml, caso esteja presente. Se nenhum arquivo python_env.yaml estiver presente, o MLflow usará um ambiente virtualenv contendo apenas o Python (especificamente, o Python mais recente disponível para virtualenv) ao executar o projeto.
  • Qualquer arquivo .py ou .sh no projeto pode ser um ponto de entrada, sem parâmetros explicitamente declarados. Quando você executa esse comando com um conjunto de parâmetros, o MLflow passa cada parâmetro na linha de comando usando a sintaxe --key <value>.

Você especifica mais opções adicionando um arquivo MLproject, que é um arquivo de texto na sintaxe YAML. Um exemplo de arquivo MLproject tem esta aparência:

name: My Project

python_env: python_env.yaml

entry_points:
  main:
    parameters:
      data_file: path
      regularization: {type: float, default: 0.1}
    command: "python train.py -r {regularization} {data_file}"
  validate:
    parameters:
      data_file: path
    command: "python validate.py {data_file}"

Executar um projeto do MLflow

Para executar um projeto do MLflow em um cluster do Azure Databricks no workspace padrão, use o comando:

mlflow run <uri> -b databricks --backend-config <json-new-cluster-spec>

em que <uri> é um URI de repositório Git ou uma pasta que contém um projeto do MLflow e <json-new-cluster-spec> é um documento JSON que contém uma estrutura new_cluster. O URI do Git deve estar no formato: https://github.com/<repo>#<project-folder>.

Um exemplo de especificação de cluster é:

{
  "spark_version": "7.3.x-scala2.12",
  "num_workers": 1,
  "node_type_id": "Standard_DS3_v2"
}

Se você precisar instalar bibliotecas no trabalho, use o formato de "especificação de cluster". Observe que os arquivos wheel do Python devem ser carregados no DBFS e especificados como pypi dependências. Por exemplo:

{
  "new_cluster": {
    "spark_version": "7.3.x-scala2.12",
    "num_workers": 1,
    "node_type_id": "Standard_DS3_v2"
  },
  "libraries": [
    {
      "pypi": {
        "package": "tensorflow"
      }
    },
    {
      "pypi": {
         "package": "/dbfs/path_to_my_lib.whl"
      }
    }
  ]
}

Importante

  • Não há suporte para dependências .egg e .jar para projetos do MLflow.
  • Não há suporte para a execução de projetos do MLflow com ambientes do Docker.
  • Você deve usar uma nova especificação de cluster ao executar um projeto do MLflow no Databricks. Não há suporte para a execução de projetos em clusters existentes.

Usar o SparkR

Para usar o SparkR em uma execução de projeto do MLflow, o código do projeto deve primeiro instalar e importar o SparkR da seguinte maneira:

if (file.exists("/databricks/spark/R/pkg")) {
    install.packages("/databricks/spark/R/pkg", repos = NULL)
} else {
    install.packages("SparkR")
}

library(SparkR)

O projeto pode então inicializar uma sessão do SparkR e usá-lo como de costume:

sparkR.session()
...

Exemplo

Este exemplo mostra como criar um experimento, executar o projeto do tutorial do MLflow em um cluster do Azure Databricks, exibir a saída de execução do trabalho e exibir a execução no experimento.

Requisitos

  1. Instale o MLflow usando pip install mlflow.
  2. Instale e configure a CLI do Databricks. É necessário o mecanismo de autenticação da CLI do Databricks para executar trabalhos em um cluster do Azure Databricks.

Etapa 1: Criar um experimento

  1. No workspace, selecione Criar experimento do MLflow>.

  2. No campo Nome, insira Tutorial.

  3. Clique em Criar. Observe a ID do experimento. Neste exemplo, é 14622565.

    ID do experimento

Etapa 2: Executar o projeto do tutorial do MLflow

As etapas a seguir configuram a variável de ambiente MLFLOW_TRACKING_URI e executam o projeto, registrando os parâmetros de treinamento, as métricas e o modelo treinado para o experimento observado na etapa anterior:

  1. Defina a variável de ambiente MLFLOW_TRACKING_URI para o workspace do Azure Databricks.

    export MLFLOW_TRACKING_URI=databricks
    
  2. Execute o projeto do tutorial do MLflow, treinando um modelo de vinhos. Substitua <experiment-id> pela ID do experimento que você anotou na etapa anterior.

    mlflow run https://github.com/mlflow/mlflow#examples/sklearn_elasticnet_wine -b databricks --backend-config cluster-spec.json --experiment-id <experiment-id>
    
    === Fetching project from https://github.com/mlflow/mlflow#examples/sklearn_elasticnet_wine into /var/folders/kc/l20y4txd5w3_xrdhw6cnz1080000gp/T/tmpbct_5g8u ===
    === Uploading project to DBFS path /dbfs/mlflow-experiments/<experiment-id>/projects-code/16e66ccbff0a4e22278e4d73ec733e2c9a33efbd1e6f70e3c7b47b8b5f1e4fa3.tar.gz ===
    === Finished uploading project to /dbfs/mlflow-experiments/<experiment-id>/projects-code/16e66ccbff0a4e22278e4d73ec733e2c9a33efbd1e6f70e3c7b47b8b5f1e4fa3.tar.gz ===
    === Running entry point main of project https://github.com/mlflow/mlflow#examples/sklearn_elasticnet_wine on Databricks ===
    === Launched MLflow run as Databricks job run with ID 8651121. Getting run status page URL... ===
    === Check the run's status at https://<databricks-instance>#job/<job-id>/run/1 ===
    
  3. Copie a URL https://<databricks-instance>#job/<job-id>/run/1 na última linha da saída de execução do MLflow.

Etapa 3: Exibir a execução do trabalho do Azure Databricks

  1. Abra a URL que você copiou na etapa anterior em um navegador para exibir a saída da execução do trabalho do Azure Databricks:

    Saída da execução do trabalho

Etapa 4: Exibir os detalhes da execução do experimento e do MLflow

  1. Navegue até o experimento em workspace do Azure Databricks.

    Ir para o experimento

  2. Clique no experimento.

    Exibir experimento

  3. Para exibir os detalhes da execução, clique em um link na coluna Data.

    Detalhes da execução

Você pode exibir os logs de sua execução clicando no link Logs no campo saída do trabalho.

Recursos

Para ver alguns exemplos de projetos do MLflow, consulte a Biblioteca de aplicativos do MLflow, que contém um repositório de projetos prontos para execução destinados a facilitar a inclusão da funcionalidade do ML em seu código.