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 arquivopython_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
- Instale o MLflow usando
pip install mlflow
. - 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
No workspace, selecione Criar experimento do MLflow>.
No campo Nome, insira
Tutorial
.Clique em Criar. Observe a ID do experimento. Neste exemplo, é
14622565
.
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:
Defina a variável de ambiente
MLFLOW_TRACKING_URI
para o workspace do Azure Databricks.export MLFLOW_TRACKING_URI=databricks
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 ===
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
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:
Etapa 4: Exibir os detalhes da execução do experimento e do MLflow
Navegue até o experimento em workspace do Azure Databricks.
Clique no experimento.
Para exibir os detalhes da execução, clique em um link na coluna Data.
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.