Tutorial: Desenvolvimento de modelos em uma estação de trabalho na nuvem

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

  • Instale e configure a estação de trabalho na nuvem. Sua estação de trabalho na nuvem é alimentada por uma instância de computação do Azure Machine Learning, que é pré-configurada com ambientes para dar suporte às suas várias necessidades de desenvolvimento de modelo.
  • Use ambientes de desenvolvimento baseados em nuvem.
  • Use o MLflow para acompanhar as métricas do seu modelo, tudo a partir de um bloco de anotações.

Pré-requisitos

Para usar o Aprendizado de Máquina do Azure, primeiro você precisará de um espaço de trabalho. Se você não tiver um, conclua Criar recursos necessários para começar a criar um espaço de trabalho e saiba mais sobre como usá-lo.

Começar com Blocos de Anotações

A seção Blocos de Anotações em seu espaço de trabalho é 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 blocos de anotações e scripts Jupyter.

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

  2. Selecione seu espaço de trabalho se ele ainda não estiver aberto.

  3. No painel de navegação esquerdo, selecione Blocos de Notas.

  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 local. 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 seu 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 Jupyter ao qual seu notebook se conecta, você usará um arquivo YAML que define as dependências.

  • Carregue um ficheiro.

    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 no espaço de trabalho.

    1. Transfira este ficheiro de ambiente conda, workstation_env.yml para o seu computador utilizando o botão Transferir ficheiro raw no canto superior direito.
    1. Selecione Adicionar arquivos e, em seguida, selecione Carregar arquivos para carregá-los em seu espaço de trabalho.

      Screenshot shows how to upload files to your workspace.

    2. Selecione Procurar e selecione arquivo(s).

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

    4. Selecione Carregar.

    Você verá o arquivo workstation_env.yml na pasta seu 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 Jupyter, com base no arquivo workstation_env.yml .

    1. Selecione Terminal para abrir uma janela do terminal. Você também pode abrir o terminal a partir da 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. Quando a computação estiver em execução, você verá uma mensagem de boas-vindas no terminal e poderá começar a digitar comandos.

    4. Veja seus ambientes de conda atuais. O ambiente ativo está 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 construir 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 Jupyter com base no 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 bloco de anotações e usará este kernel.

Criar um bloco de notas

  1. Selecione Adicionar arquivos e escolha Criar novo arquivo.

    Screenshot: Create new file.

  2. Nomeie seu novo bloco de anotações como develop-tutorial.ipynb (ou digite 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. Mude para usar o kernel Tutorial Workstation Env se você criou o kernel.

Desenvolver um script de treinamento

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

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

  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ê lê 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 o 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 código para iniciar o registro automático com MLflowo , para que você possa acompanhar as métricas e os resultados. Com a natureza iterativa do desenvolvimento de modelos, MLflow ajuda a registrar parâmetros e resultados do modelo. Consulte essas execuções para comparar e entender o desempenho do seu 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. Treine 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()

    Nota

    Você pode ignorar os avisos mlflow. Você ainda terá todos os resultados que precisa rastreados.

Iterar

Agora que você tem resultados de modelo, você pode querer alterar algo e tentar novamente. Por exemplo, tente 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()

Nota

Você pode ignorar os avisos mlflow. Você ainda terá todos os resultados que precisa rastreados.

Examinar os resultados

Agora que você já experimentou dois modelos diferentes, use os resultados rastreados para MLFfow decidir qual modelo é melhor. Você pode fazer referência a métricas como precisão ou outros indicadores que são mais importantes para seus cenários. Você pode mergulhar nesses resultados com mais detalhes observando os empregos criados pela 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ê tentou. 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 lápis.

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

  6. Selecione a guia Métricas para exibir as métricas que foram 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 visualizar as imagens geradas pelo MLflow.

    Screenshot shows images for a job.

  8. Volte e revise as métricas e imagens do outro modelo.

Criar um script Python

Agora crie um script Python a partir do seu bloco de anotações para treinamento de modelos.

  1. Na barra de ferramentas do bloco de anotações, selecione o menu.

  2. Selecione Exportar como> Python.

    Screenshot shows exporting a Python file from the notebook.

  3. Nomeie o arquivo train.py.

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

    • Certifique-se de manter o código que inicia o registro automático (mlflow.sklearn.autolog()).
    • Você pode querer excluir os comentários gerados automaticamente e adicionar mais de seus próprios comentários.
    • Quando você executa 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 dar-lhe um nome diferente para vê-lo como uma entrada diferente na seção Empregos . Mas quando você prepara o script para um trabalho de treinamento, essa linha não funcionará e deve ser omitida - a definição de trabalho inclui o nome do experimento.
    • Quando você treina um único modelo, as linhas para iniciar e terminar uma corrida ( e mlflow.end_run()) também não são necessárias (mlflow.start_run()elas não terão efeito), mas podem ser deixadas se desejar.
  5. Quando terminar as edições, salve o arquivo.

Agora você tem um script Python para usar para treinar seu modelo preferido.

Execute o script Python

Por enquanto, você está executando esse código em sua instância de computação, que é seu ambiente de desenvolvimento do Azure Machine Learning. Tutorial: Treinar um modelo mostra como executar um script de treinamento de forma 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. Veja seus ambientes de conda atuais. O ambiente ativo está 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 seu script de treinamento.

    python train.py
    

Nota

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

Examinar resultados de script

Volte para Empregos para ver os resultados do seu script de treinamento. Tenha em mente que os dados de treinamento mudam a cada divisão, portanto, os resultados também diferem entre as corridas.

Clean up resources (Limpar recursos)

Se você planeja continuar agora para outros tutoriais, pule para Próximas etapas.

Parar instância de computação

Se você não vai usá-lo agora, pare a instância de computação:

  1. No estúdio, na área de navegação esquerda, selecione Computar.
  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.

Eliminar todos os recursos

Importante

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

Se você não planeja usar nenhum dos recursos que criou, exclua-os para não incorrer em nenhum custo:

  1. No portal do Azure, selecione Grupos de recursos na extremidade esquerda.

  2. Na lista, selecione o grupo de recursos que você criou.

  3. Selecione Eliminar 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 Eliminar.

Próximos passos

Saiba mais sobre:

Este tutorial mostrou as primeiras etapas da criação de um modelo, prototipando na mesma máquina onde o código reside. Para seu treinamento de produção, saiba como usar esse script de treinamento em recursos de computação remota mais poderosos: