Tutorial: modelar o desenvolvimento em uma estação de trabalho em nuvem

Saiba como desenvolver um script de treinamento com um notebook em uma estação de trabalho em nuvem do Azure Machine Learning. Este tutorial aborda as noções básicas de que você precisa para começar:

  • Configure a estação de trabalho em nuvem. Sua estação de trabalho em nuvem é alimentada por uma instância de computação do Azure Machine Learning, que é pré-configurada com ambientes para dar suporte a diversas necessidades de desenvolvimento de modelos.
  • Use ambientes de desenvolvimento baseados em nuvem.
  • Use o MLflow para acompanhar as métricas do modelo, tudo de dentro de um notebook.

Pré-requisitos

Para usar o Azure Machine Learning, primeiro você precisará de um workspace. Se você não tiver um, conclua Criar recursos necessários para começar para criar um workspace e saber mais sobre como usá-lo.

Comece com os Notebooks

A seção Notebooks em seu workspace é um bom lugar para começar a aprender sobre o Azure Machine Learning e seus recursos. Aqui você pode se conectar a recursos de computação, trabalhar com um terminal e editar e executar Jupyter Notebooks e scripts.

  1. Entre no Estúdio do Azure Machine Learning.

  2. Selecione o workspace, se ele ainda não estiver aberto.

  3. No painel de navegação à esquerda, selecione Notebooks.

  4. Se você não tiver uma instância de computação, verá Criar computação no meio da tela. Selecione Criar computação e preencha o formulário. Você pode usar todos os padrões. (Se você já tiver uma instância de computação, verá Terminal nesse spot. Você usará o Terminal mais adiante neste tutorial.)

    Screenshot shows how to create a compute instance.

Configurar um novo ambiente para prototipagem (opcional)

Para que o script seja executado, você precisa estar trabalhando em um ambiente configurado com as dependências e bibliotecas que o código espera. Esta seção ajuda você a criar um ambiente adaptado ao seu código. Para criar o novo kernel do Jupyter ao qual seu notebook se conecta, você usará um arquivo YAML que define as dependências.

  • Carregar um arquivo.

    Os arquivos carregados são armazenados em um compartilhamento de arquivos do Azure e esses arquivos são montados em cada instância de computação e compartilhados dentro do workspace.

    1. Baixe este arquivo de ambiente conda, workstation_env.yml para seu computador usando o botão Baixar arquivo bruto no canto superior direito.
    1. Selecione Adicionar arquivos e, em seguida, selecione Carregar arquivos para carregá-los no workspace.

      Screenshot shows how to upload files to your workspace.

    2. Selecione Procurar e selecione arquivos.

    3. Selecione o arquivo workstation_env.yml que você baixou.

    4. Escolha Carregar.

    Você verá o arquivo workstation_env.yml na pasta de nome de usuário na guia Arquivos. Selecione este arquivo para visualizá-lo e veja quais dependências ele especifica. Você verá conteúdos como este:

    name: workstation_env
    # This file serves as an example - you can update packages or versions to fit your use case
    dependencies:
      - python=3.8
      - pip=21.2.4
      - scikit-learn=0.24.2
      - scipy=1.7.1
      - pandas>=1.1,<1.2
      - pip:
        - mlflow-skinny 
        - azureml-mlflow
        - psutil>=5.8,<5.9
        - ipykernel~=6.0
        - matplotlib
    
  • Crie um kernel.

    Agora, use o terminal do Azure Machine Learning para criar um novo kernel do Jupyter, com base no arquivo workstation_env.yml .

    1. Selecione Terminal para abrir uma janela do terminal. Você também pode abrir o terminal na barra de comandos à esquerda:

      Screenshot shows open terminal tool in notebook toolbar.

    2. Se a instância de computação for interrompida, selecione Iniciar computação e aguarde até que ela esteja em execução.

      Screenshot shows how to start compute if it's stopped.

    3. Depois que a computação estiver em execução, você verá uma mensagem de boas-vindas no terminal e poderá começar a digitar os comandos.

    4. Exiba seus ambientes atuais do Conda. O ambiente ativo é marcado com um *.

      conda env list
      
    5. Se você criou uma subpasta para este tutorial, cd para essa pasta agora.

    6. Crie o ambiente com base no arquivo conda fornecido. Leva alguns minutos para criar esse ambiente.

      conda env create -f workstation_env.yml
      
      
    7. Ative o novo ambiente.

       conda activate workstation_env
      
    8. Valide se o ambiente correto está ativo, novamente procurando o ambiente marcado com um *.

      conda env list
      
    9. Crie um novo kernel do Jupyter com base em seu ambiente ativo.

      python -m ipykernel install --user --name workstation_env --display-name "Tutorial Workstation Env" 
      
    10. Feche a janela do terminal.

Agora você tem um novo kernel. Em seguida, você abrirá um notebook e usará esse kernel.

Criar um notebook

  1. Selecione Adicionar arquivos e escolha Criar novo arquivo.

    Screenshot: Create new file.

  2. Nomeie seu novo notebook develop-tutorial.ipynb (ou insira seu nome preferido).

  3. Se a instância de computação for interrompida, selecione Iniciar computação e aguarde até que ela esteja em execução.

    Screenshot shows how to start compute if it's stopped.

  4. Você verá que o notebook está conectado ao kernel padrão no canto superior direito. Alterne para usar o kernel do Tutorial de Ambiente de Estação de Trabalho se você criou o kernel.

Desenvolver um script de treinamento

Nesta seção, você desenvolverá um script de treinamento do Python que prevê pagamentos de cartão de crédito como padrão, usando os conjuntos de dados de teste e treinamento preparados do conjunto de dados da UCI.

Esse código usa sklearn para treinamento e MLflow para registrar as métricas em log.

  1. Comece com o código que importa os pacotes e bibliotecas que você usará no script de treinamento.

    import os
    import argparse
    import pandas as pd
    import mlflow
    import mlflow.sklearn
    from sklearn.ensemble import GradientBoostingClassifier
    from sklearn.metrics import classification_report
    from sklearn.model_selection import train_test_split
  2. Em seguida, carregue e processe os dados para este experimento. Neste tutorial, você irá ler os dados de um arquivo na Internet.

    # load the data
    credit_df = pd.read_csv(
        "https://azuremlexamples.blob.core.windows.net/datasets/credit_card/default_of_credit_card_clients.csv",
        header=1,
        index_col=0,
    )
    
    train_df, test_df = train_test_split(
        credit_df,
        test_size=0.25,
    )
  3. Prepare os dados para treinamento:

    # Extracting the label column
    y_train = train_df.pop("default payment next month")
    
    # convert the dataframe values to array
    X_train = train_df.values
    
    # Extracting the label column
    y_test = test_df.pop("default payment next month")
    
    # convert the dataframe values to array
    X_test = test_df.values
  4. Adicione o código para iniciar o registro automático com MLflow, para que você possa acompanhar as métricas e os resultados. Com a natureza iterativa do desenvolvimento de modelos, MLflow ajuda você a registrar os parâmetros e os resultados do modelo de log. Veja essas execuções para comparar e entender o desempenho do modelo. Os logs também fornecem contexto para quando você estiver pronto para passar da fase de desenvolvimento para a fase de treinamento de seus fluxos de trabalho no Azure Machine Learning.

    # set name for logging
    mlflow.set_experiment("Develop on cloud tutorial")
    # enable autologging with MLflow
    mlflow.sklearn.autolog()
  5. Treinar um modelo.

    # Train Gradient Boosting Classifier
    print(f"Training with data of shape {X_train.shape}")
    
    mlflow.start_run()
    clf = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1)
    clf.fit(X_train, y_train)
    
    y_pred = clf.predict(X_test)
    
    print(classification_report(y_test, y_pred))
    # Stop logging for this model
    mlflow.end_run()

    Observação

    Você pode ignorar os avisos de mlflow. Você ainda obterá todos os resultados necessários.

ITERAR

Agora que você tem resultados de modelo, talvez queira alterar algo e tentar novamente. Por exemplo, experimente uma técnica de classificador diferente:

# Train  AdaBoost Classifier
from sklearn.ensemble import AdaBoostClassifier

print(f"Training with data of shape {X_train.shape}")

mlflow.start_run()
ada = AdaBoostClassifier()

ada.fit(X_train, y_train)

y_pred = ada.predict(X_test)

print(classification_report(y_test, y_pred))
# Stop logging for this model
mlflow.end_run()

Observação

Você pode ignorar os avisos de mlflow. Você ainda obterá todos os resultados necessários.

Examinar resultados

Agora que você tentou dois modelos diferentes, use os resultados rastreados por MLFfow para decidir qual modelo é melhor. Você pode fazer referência a métricas como precisão ou outros indicadores que são mais relevantes para seus cenários. Obtenha informações mais detalhadas sobre esses resultados examinando os trabalhos criados por MLflow.

  1. Na navegação à esquerda, selecione Trabalhos.

    Screenshot shows how to select Jobs in the navigation.

  2. Selecione o link para o Tutorial Desenvolver na nuvem.

  3. Há dois trabalhos diferentes mostrados, um para cada um dos modelos que você experimentou. Esses nomes são gerados automaticamente. Ao passar o mouse sobre um nome, use a ferramenta de lápis ao lado do nome se quiser renomeá-lo.

  4. Selecione o link para o primeiro trabalho. O nome aparece na parte superior. Você também pode renomeá-lo aqui com a ferramenta de lápis.

  5. A página mostra detalhes do trabalho, como propriedades, saídas, marcas e parâmetros. Em Marcas, você verá o estimator_name, que descreve o tipo de modelo.

  6. Selecione a guia Métricas para exibir as métricas registradas pelo MLflow. (Espere que seus resultados sejam diferentes, pois você tem um conjunto de treinamento diferente.)

    Screenshot shows metrics for a job.

  7. Selecione a guia Imagens para exibir as imagens geradas por MLflow.

    Screenshot shows images for a job.

  8. Voltar e examine as métricas e imagens do outro modelo.

Executar um script do Python

Agora, crie um script Python do notebook para treinamento de modelo.

  1. Selecione o menu na barra de ferramentas do notebook.

  2. Selecione Exportar como> Python.

    Screenshot shows exporting a Python file from the notebook.

  3. Nomeie o arquivo train.py.

  4. Examine esse arquivo e exclua o código que você não deseja no script de treinamento. Por exemplo, mantenha o código para o modelo que deseja usar e exclua o código para o modelo que não deseja.

    • Certifique-se de manter o código que inicia o registro automático (mlflow.sklearn.autolog()).
    • Talvez você queira excluir os comentários gerados automaticamente e adicionar mais de seus próprios comentários.
    • Ao executar o script Python interativamente (em um terminal ou notebook), você pode manter a linha que define o nome do experimento (mlflow.set_experiment("Develop on cloud tutorial")). Ou até mesmo dê a ele um nome diferente para vê-lo como uma entrada diferente na seção Trabalhos . Mas ao preparar o script para um trabalho de treinamento, essa linha não funcionará e deverá ser omitida. A definição da tarefa inclui o nome do experimento.
    • Ao treinar um único modelo, as linhas para iniciar e encerrar uma execução (mlflow.start_run() e mlflow.end_run()) também não são necessárias (não terão efeito), mas podem ser mantidas se desejar.
  5. Ao terminar de editar, salve o arquivo.

Agora você tem um script Python para usar no treinamento do modelo de sua preferência.

Executar o script do Python

Por enquanto, você está executando este código em sua instância de computação, que é o seu ambiente de desenvolvimento do Azure Machine Learning. Tutorial: treinar um modelo que mostra como executar um script de treinamento de maneira mais escalável em recursos de computação mais poderosos.

  1. À esquerda, selecione Abrir terminal para abrir uma janela do terminal.

    Screenshot shows how to open a terminal window.

  2. Exiba seus ambientes atuais do Conda. O ambiente ativo é marcado com um *.

    conda env list
    
  3. Se você criou um novo kernel, ative-o agora:

    conda activate workstation_env
    
  4. Se você criou uma subpasta para este tutorial, cd para essa pasta agora.

  5. Execute o script de treinamento.

    python train.py
    

Observação

Você pode ignorar os avisos de mlflow. Você ainda obterá todas as métricas e imagens do registro automático.

Examinar os resultados do script

Retorne para a seção Trabalhos para ver os resultados do script de treinamento. Lembre-se de que os dados de treinamento mudam a cada divisão, de modo que os resultados também diferem entre as execuções.

Limpar os recursos

Se você planeja prosseguir agora para outros tutorial, vá diretamente para as Próximas etapas.

Parar a instância de computação

Se não for usá-la agora, pare a instância de computação:

  1. No estúdio, na área de navegação à esquerda, selecione Computação.
  2. Nas guias superiores, selecione Instâncias de computação
  3. Selecione a instância de computação na lista.
  4. Na barra de ferramentas superior, selecione Parar.

Excluir todos os recursos

Importante

Os recursos que você criou podem ser usados como pré-requisitos em outros tutoriais e artigos de instruções do Azure Machine Learning.

Se você não pretende usar nenhum dos recursos criados, exclua-os para não gerar custos:

  1. No portal do Azure, selecione Grupos de recursos no canto esquerdo.

  2. Selecione o grupo de recursos que você criou por meio da lista.

  3. Selecione Excluir grupo de recursos.

    Screenshot of the selections to delete a resource group in the Azure portal.

  4. Insira o nome do grupo de recursos. Em seguida, selecione Excluir.

Próximas etapas

Saiba mais sobre:

Este tutorial mostrou as primeiras etapas de criação de um modelo, criando protótipos no mesmo computador em que o código reside. Para seu treinamento de produção, saiba como usar esse script de treinamento em recursos de computação remota mais avançados: