Treinar um modelo com o AutoML End-to-End.

Nesta página, mostramos como treinar um modelo de classificação ou regressão de um conjunto de dados tabular com o fluxo de trabalho tabular para o AutoML de End-to-End.

Antes de começar

Antes de treinar um modelo, é preciso concluir as seguintes etapas:

Se você receber um erro relacionado a cotas ao executar o fluxo de trabalho tabular para o End-to-End AutoML, talvez precise solicitar uma cota maior. Para saber mais, consulte Gerenciar cotas para fluxos de trabalho tabulares.

Acessar o URI do resultado do ajuste de hiperparâmetros anterior

Se você já concluiu uma execução de fluxo de trabalho do AutoML End-to-End, é possível usar o resultado do ajuste de hiperparâmetros de uma execução anterior para economizar tempo e recursos de treinamento. Para encontrar o resultado anterior do ajuste de hiperparâmetro, use o Console do Google Cloud ou carregue-o de maneira programática com a API.

Console do Google Cloud

Para encontrar o URI do resultado de ajuste de hiperparâmetros usando o console do Google Cloud, execute as seguintes etapas:

  1. No console do Google Cloud, na seção da Vertex AI, acesse a página Conjuntos de dados.

    Acessar a página "Pipelines"

  2. Selecione a guia Execuções.

  3. Selecione a execução do pipeline que você quer usar.

  4. Selecione Expandir artefatos.

  5. Clique no componente exit-Handler-1.

  6. Clique no componente stage_1_tuning_result_artifact_uri_empty.

  7. Encontre o componente automl-tabular-cv-trainer-2.

  8. Clique no artefato associado tuning_result_output.

  9. Selecione a guia Informações do nó.

  10. Copie o URI para uso na etapa Treinar um modelo.

resultado da pesquisa de arquitetura

API: Python

No exemplo de código a seguir, demonstramos como carregar o resultado do ajuste de hiperparâmetros usando a API. A variável job refere-se à execução anterior do pipeline de treinamento de modelo.


def get_task_detail(
  task_details: List[Dict[str, Any]], task_name: str
) -> List[Dict[str, Any]]:
  for task_detail in task_details:
      if task_detail.task_name == task_name:
          return task_detail

pipeline_task_details = job.gca_resource.job_detail.task_details

stage_1_tuner_task = get_task_detail(
    pipeline_task_details, "automl-tabular-stage-1-tuner"
)
stage_1_tuning_result_artifact_uri = (
    stage_1_tuner_task.outputs["tuning_result_output"].artifacts[0].uri
)

Treinar um modelo

Console do Google Cloud

Para treinar um modelo usando o console do Google Cloud, execute as seguintes etapas:

  1. No console do Google Cloud, na seção da Vertex AI, acesse a página Conjuntos de dados.

    Acessar a página "Pipelines"

  2. Selecione a guia Galeria de modelos.

  3. No card AutoML para classificação / regressão tabular, clique em Criar execução.

  4. Na página Detalhes do modelo, configure o seguinte:

    1. Insira um nome de execução do pipeline.
    2. Opcional: se quiser definir a conta de serviço do Vertex AI Pipelines ou a conta de serviço do worker do Dataflow, abra o link Opções avançadas. Saiba mais sobre contas de serviço
    3. Clique em Continuar.

  5. Na página Configuração do ambiente de execução, faça as configurações a seguir:

    1. Insira um bucket do Cloud Storage ou uma pasta dentro dele para usar como diretório de saída raiz. Esse diretório será usado para salvar arquivos intermediários, como o conjunto de dados materializados e o modelo. Lembre-se de limpar o diretório após a conclusão do treinamento e da cópia do modelo e de outros artefatos importantes para outro bucket do Cloud Storage. Como alternativa, defina um Time to Live (TTL) para o bucket do Cloud Storage.

      Os buckets do seu projeto estão listados na seção "Cloud Storage" do Console do Google Cloud.

      Acessar a página "Buckets"

    2. Clique em Continuar.

  6. Na página Método de treinamento, configure da seguinte maneira:

    1. Selecione o nome do conjunto de dados que você quer usar para treinar o modelo.
    2. Selecione a coluna de destino. A coluna de objetivo é o valor que o modelo prevê. Saiba mais sobre os requisitos da coluna de destino.
    3. Digite o nome de exibição do novo modelo.
    4. Opcional: para escolher como dividir os dados entre conjuntos de treinamento, teste e validação, abra as Opções avançadas. Você pode escolher entre as seguintes opções de divisão de dados:
      • Aleatória (padrão): a Vertex AI seleciona aleatoriamente as linhas associadas a cada um dos conjuntos de dados. Por padrão, a Vertex AI seleciona aleatoriamente 80% das linhas de dados para o conjunto de treinamento, 10% para o conjunto de validação e 10% para o conjunto de teste. Defina a porcentagem de linhas de dados que você quer associar a cada um dos conjuntos de dados.
      • Manual: a Vertex AI seleciona linhas de dados para cada um dos conjuntos de dados com base nos valores em uma coluna de divisão de dados. Forneça o nome da coluna de divisão de dados.
      • Cronológico: a Vertex AI divide os dados com base no carimbo de data/hora em uma coluna de tempo. Forneça o nome da coluna de hora. Também é possível definir a porcentagem de linhas de dados que você quer associar ao conjunto de treinamento, de validação e de teste.
      • Estratificado: a Vertex AI seleciona aleatoriamente as linhas associadas a cada um dos conjuntos de dados, mas preserva a distribuição de valores de colunas de destino. Forneça o nome da coluna de destino. Também é possível definir a porcentagem de linhas de dados que você quer associar ao conjunto de treinamento, validação e teste.
      Saiba mais sobre as divisões de dados.
    5. Opcional: é possível executar o pipeline sem a pesquisa da arquitetura. Se você escolher Ignorar arquitetura de pesquisa, precisará fornecer um conjunto de hiperparâmetros de uma execução anterior do pipeline na página Opções de treinamento.
    6. Clique em Continuar.

  7. Na página Opções de treinamento, configure da seguinte maneira:

    1. Opcional: clique em Gerar estatísticas. A geração de estatísticas preenche os menus suspensos Transformação.
    2. Analise a lista de colunas e exclua as colunas do treinamento que não podem ser usadas para treinar o modelo.
    3. Analise as transformações selecionadas para os recursos incluídos, confirme se os dados inválidos são permitidos e faça as atualizações necessárias. Saiba mais sobre transformações e dados inválidos.
    4. Se você optou por pular a pesquisa de arquitetura na página Método de treinamento, forneça o caminho para o resultado de ajuste de hiperparâmetros de uma execução de pipeline anterior.
    5. Opcional: se quiser especificar a coluna de peso, abra as Opções avançadas e faça sua seleção. Saiba mais sobre colunas de peso.
    6. Opcional: se você quiser alterar o objetivo de otimização por padrão, abra as Opções avançadas e faça sua seleção. Saiba mais sobre os objetivos de otimização.
    7. Opcional: se você quiser pesquisar a arquitetura na página Método de treinamento, especifique o número de testes paralelos. Abra as Opções avançadas e insira o valor.
    8. Opcional:é possível fornecer valores fixos para um subconjunto dos hiperparâmetros. A Vertex AI pesquisa os valores ideais dos hiperparâmetros não fixos restantes. Essa é uma boa opção se você tem uma preferência forte para o tipo de modelo. É possível escolher entre redes neurais e árvores aprimoradas para seu tipo de modelo. Abra as Opções avançadas e forneça uma substituição de especificação do estudo no formato JSON.

      Por exemplo, se você quiser definir o tipo de modelo como Redes neurais (NN, na sigla em inglês), digite o seguinte:

      [
        {
          "parameter_id": "model_type",
          "categorical_value_spec": {
            "values": ["nn"]
          }
        }
      ]
      

    9. Clique em Continuar.

  8. Na página Computação e preços, configure da seguinte maneira:

    1. Insira o número máximo de horas que você quer que o modelo treine. Saiba mais sobre preços
    2. Opcional: na seção Configurações do Compute, defina os tipos de máquina e o número de máquinas para cada estágio do fluxo de trabalho. Essa é uma boa opção para quem tem um conjunto de dados grande e quer otimizar o hardware da máquina adequadamente.

  9. Selecione Enviar.

API: Python

Na amostra de código a seguir, demonstramos como executar um pipeline de treinamento de modelo:

job = aiplatform.PipelineJob(
    ...
    template_path=template_path,
    parameter_values=parameter_values,
    ...
)
job.run(service_account=SERVICE_ACCOUNT)

O parâmetro opcional service_account em job.run() permite definir a conta de serviço dos Pipelines da Vertex AI para uma conta de sua escolha.

O pipeline e os valores de parâmetro são definidos pela seguinte função: Os dados de treinamento podem ser um arquivo CSV no Cloud Storage ou uma tabela no BigQuery.

template_path, parameter_values = automl_tabular_utils.get_automl_tabular_pipeline_and_parameters(...)

Confira a seguir um subconjunto de parâmetros get_automl_tabular_pipeline_and_parameters:

Nome do parâmetro Tipo Definição
data_source_csv_filenames String Um URI para um CSV armazenado no Cloud Storage.
data_source_bigquery_table_path String Um URI de uma tabela do BigQuery.
dataflow_service_account String (Opcional) Conta de serviço personalizada para executar jobs do Dataflow. O job do Dataflow pode ser configurado para usar IPs privados e uma sub-rede VPC específica. Esse parâmetro funciona como uma substituição para a conta de serviço do worker padrão do Dataflow.
prediction_type String Escolha classification para treinar um modelo de classificação ou regression para treinar um modelo de regressão.
optimization_objective String Se você estiver treinando um modelo de classificação binária, o objetivo padrão é o AUC ROC. Se você estiver treinando um modelo de regressão, o objetivo padrão é o RMSE. Se você quiser um objetivo de otimização diferente para o modelo, escolha uma das opções em Objetivos de otimização para modelos de classificação ou regressão.
enable_probabilistic_inference Booleano Se você estiver treinando um modelo de regressão e definir esse valor como true, a Vertex AI modela a distribuição de probabilidade da previsão. A inferência probabilística pode melhorar a qualidade do modelo ao lidar com dados com ruído e quantificar a incerteza. Se quantiles forem especificados, a Vertex AI também vai retornar os quantis da distribuição.
quantiles Lista[float] Quantis a serem usados na inferência probabilística. O quantil indica a probabilidade de o valor desejado ser menor que um determinado valor. Forneça uma lista de até cinco números exclusivos entre 0 e 1.

Opções de personalização do fluxo de trabalho

É possível personalizar o fluxo de do End to End AutoML definindo valores de argumentos que são transmitidos durante a definição do pipeline. É possível personalizar seu fluxo de trabalho das seguintes maneiras:

  • Substituir espaço de pesquisa
  • Configurar hardware
  • Extrair o modelo
  • Pular pesquisa de arquitetura

Substituir espaço de pesquisa

O parâmetro get_automl_tabular_pipeline_and_parameters a seguir permite fornecer valores fixos para um subconjunto dos hiperparâmetros. A Vertex AI pesquisa os valores ideais dos hiperparâmetros não fixos restantes. Use essa opção para escolher entre redes neurais e árvores otimizadas para seu tipo de modelo.

Nome do parâmetro Tipo Definição
study_spec_parameters_override List[Dict[String, Any]] (Opcional) Subconjunto personalizado de hiperparâmetros. Esse parâmetro configura o componente automl-tabular-stage-1-tuner do pipeline.

O código a seguir demonstra como definir o tipo de modelo como Redes Neurais (NN, na sigla em inglês):

study_spec_parameters_override = [
  {
    "parameter_id": "model_type",
    "categorical_value_spec": {
      "values": ["nn"] # The default value is ["nn", "boosted_trees"], this reduces the search space
    }
  }
]

Configurar hardware

Os parâmetros get_automl_tabular_pipeline_and_parameters a seguir permitem configurar os tipos de máquina e o número de máquinas para treinamento. Essa é uma boa opção para quem tem um conjunto de dados grande e quer otimizar o hardware da máquina adequadamente.

Nome do parâmetro Tipo Definição
stage_1_tuner_worker_pool_specs_override Dict[String, Any] (Opcional) Configuração personalizada dos tipos de máquina e do número de máquinas para o treinamento. Esse parâmetro configura o componente automl-tabular-stage-1-tuner do pipeline.
cv_trainer_worker_pool_specs_override Dict[String, Any] (Opcional) Configuração personalizada dos tipos de máquina e do número de máquinas para o treinamento. Esse parâmetro configura o componente automl-tabular-stage-1-tuner do pipeline.

O código a seguir demonstra como definir o tipo de máquina n1-standard-8 para o nó principal do TensorFlow e o tipo de máquina n1-standard-4 para o nó do avaliador do TensorFlow:

worker_pool_specs_override = [
  {"machine_spec": {"machine_type": "n1-standard-8"}}, # override for TF chief node
  {},  # override for TF worker node, since it's not used, leave it empty
  {},  # override for TF ps node, since it's not used, leave it empty
  {
    "machine_spec": {
        "machine_type": "n1-standard-4" # override for TF evaluator node
    }
  }
]

Extrair o modelo

O parâmetro get_automl_tabular_pipeline_and_parameters a seguir permite criar uma versão menor do modelo ensemble. Um modelo menor reduz a latência e o custo da previsão.

Nome do parâmetro Tipo Definição
run_distillation Booleano Se TRUE, cria uma versão menor do modelo de ensemble.

Pular pesquisa de arquitetura

Com o parâmetro get_automl_tabular_pipeline_and_parameters a seguir, é possível executar o pipeline sem a pesquisa de arquitetura e fornecer um conjunto de hiperparâmetros de uma execução de pipeline anterior como alternativa.

Nome do parâmetro Tipo Definição
stage_1_tuning_result_artifact_uri String (Opcional) URI do resultado do ajuste de hiperparâmetros de uma execução de pipeline anterior.

Objetivos de otimização para modelos de classificação ou regressão

Ao treinar um modelo, a Vertex AI seleciona um objetivo de otimização padrão com base no tipo de modelo e no tipo de dados usado na coluna de destino.

Os modelos de classificação são ideais para:
Objetivo da otimização Valor da API Use este objetivo se você quiser...
AUC ROC maximize-au-roc Área sob a curva de característica de operação do receptor (ROC, na sigla em inglês). Distinguir entre classes. Valor padrão para classificação binária.
Log perda minimize-log-loss Manter o máximo possível de precisão nas probabilidades de predição. É o único objetivo compatível com a classificação multiclasse.
AUC PR maximize-au-prc Maximizar a área sob curva de precisão-recall. Otimizar resultados para predições da classe menos comum.
Precisão em recall maximize-precision-at-recall Otimize a precisão com um valor de recall específico.
Recall na precisão maximize-recall-at-precision Otimizar recall em um valor de precisão específico.
Os modelos de regressão são melhores para:
Objetivo da otimização Valor da API Use este objetivo se você quiser...
REMQ minimize-rmse Minimizar a raiz do erro médio quadrado (REMQ) Captura mais valores extremos com precisão. Valor padrão.
MAE minimize-mae Minimizar erro médio absoluto (MAE, na sigla em inglês). Ver os valores extremos como outliers, o que impacta menos o modelo.
RMSLE minimize-rmsle Minimizar o erro logarítmico quadrado médio (RMSLE, na sigla em inglês). Penaliza o erro conforme o tamanho relativo e não o valor absoluto. É útil quando valores previstos e reais podem ser muito grandes.

A seguir