Criar estudos da Vertex AI Vizier

Nesta página, descrevemos como fazer solicitações de API para a Vertex AI Vizier usando Python. Para informações sobre como a Vertex AI Vizier funciona, consulte Visão geral da Vertex AI Vizier.

Antes de começar

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Ative a Vertex AI API.

    Ative a API

  4. Crie uma conta de serviço:

    1. No Console do Google Cloud, acesse a página Criar conta de serviço.

      Acesse "Criar conta de serviço"
    2. Selecione o projeto.
    3. No campo Nome da conta de serviço, insira um nome. O Console do Google Cloud preenche o campo ID da conta de serviço com base nesse nome.

      No campo Descrição da conta de serviço, insira uma descrição. Por exemplo, Service account for quickstart.

    4. Clique em Criar e continuar.
    5. Conceda o papel Project > Owner à conta de serviço do.

      Para conceder o papel, encontre a lista Selecionar um papel e clique em Project > Owner.

    6. Clique em Continuar.
    7. Clique em Concluído para terminar a criação da conta de serviço.

      Não feche a janela do navegador. Você vai usá-la na próxima etapa.

  5. Crie uma chave de conta de serviço:

    1. No console do Google Cloud, clique no endereço de e-mail da conta de serviço que você criou.
    2. Clique em Chaves.
    3. Clique em Adicionar chave e em Criar nova chave.
    4. Clique em Criar. O download de um arquivo de chave JSON é feito no seu computador.
    5. Clique em Fechar.
  6. Defina a variável de ambiente GOOGLE_APPLICATION_CREDENTIALS como o caminho do arquivo JSON que contém suas credenciais. Essa variável só se aplica à sessão de shell atual. Assim, se você abrir uma nova sessão, precisará definir a variável novamente.

  7. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  8. Ative a Vertex AI API.

    Ative a API

  9. Crie uma conta de serviço:

    1. No Console do Google Cloud, acesse a página Criar conta de serviço.

      Acesse "Criar conta de serviço"
    2. Selecione o projeto.
    3. No campo Nome da conta de serviço, insira um nome. O Console do Google Cloud preenche o campo ID da conta de serviço com base nesse nome.

      No campo Descrição da conta de serviço, insira uma descrição. Por exemplo, Service account for quickstart.

    4. Clique em Criar e continuar.
    5. Conceda o papel Project > Owner à conta de serviço do.

      Para conceder o papel, encontre a lista Selecionar um papel e clique em Project > Owner.

    6. Clique em Continuar.
    7. Clique em Concluído para terminar a criação da conta de serviço.

      Não feche a janela do navegador. Você vai usá-la na próxima etapa.

  10. Crie uma chave de conta de serviço:

    1. No console do Google Cloud, clique no endereço de e-mail da conta de serviço que você criou.
    2. Clique em Chaves.
    3. Clique em Adicionar chave e em Criar nova chave.
    4. Clique em Criar. O download de um arquivo de chave JSON é feito no seu computador.
    5. Clique em Fechar.
  11. Defina a variável de ambiente GOOGLE_APPLICATION_CREDENTIALS como o caminho do arquivo JSON que contém suas credenciais. Essa variável só se aplica à sessão de shell atual. Assim, se você abrir uma nova sessão, precisará definir a variável novamente.

  12. Instale o SDK da Vertex AI para Python.

Definir constantes

Para definir constantes, execute os seguintes comandos, substituindo REGION e PROJECT_ID pela região e pelo ID do projeto. Crie seu próprio nome de estudo ou use os valores sugeridos.

import json
import datetime
from google.cloud import aiplatform

REGION = "REGION"
PROJECT_ID = "PROJECT_ID"

# The following placeholder variables are automatically filled in.
STUDY_DISPLAY_NAME = '{}_study_{}'.format(PROJECT_ID.replace('-', ''), datetime.datetime.now().strftime('%Y%m%d_%H%M%S')) #@param {type: 'string'}
ENDPOINT = REGION + '-aiplatform.googleapis.com'
PARENT = 'projects/{}/locations/{}'.format(PROJECT_ID, REGION)

Crie solicitações de API

As solicitações da API de linha de comando a seguir são escritas em Python.

Criar um estudo

Um estudo é uma série de experimentos, ou testes, que ajudam a otimizar seus hiperparâmetros ou parâmetros.

No exemplo a seguir, a meta é maximizar y = x^2 com x no intervalo de [-10. 10]. Este exemplo tem apenas um parâmetro e usa uma função facilmente calculada para ajudar a demonstrar como usar o Vertex AI Vizier.

param_x = {
    'parameter_id': 'x',
    'double_value_spec': {
        'min_value': -10.0,
        'max_value': 10.0
    }
}

metric_y = {
    'metric_id': 'y',
    'goal': 'MAXIMIZE'
}

study = {
    'display_name': STUDY_DISPLAY_NAME,
    'study_spec': {
      'algorithm': 'RANDOM_SEARCH',
      'parameters': [param_x],
      'metrics': [metric_y],
    }
}

Para criar o estudo usando a configuração, envie a seguinte solicitação por meio do VizierServiceClient. Use o STUDY_NAME retornado para consultar o estudo.

vizier_client = aiplatform.gapic.VizierServiceClient(client_options=dict(api_endpoint=ENDPOINT))
study = vizier_client.create_study(parent=PARENT, study=study)
STUDY_NAME = study.name

Ver seu estudo

Após a criação do estudo, ele fica no Console do Cloud, na seção "Vertex AI", na página Experimentos.

Acessar a página "Experimentos"

Receber um estudo

Para receber um estudo, envie a solicitação a seguir.

vizier_client.get_study({'name': STUDY_NAME})

Listar estudos

Para listar estudos em um projeto e região específicos, envie a solicitação a seguir:

vizier_client.list_studies({'parent': PARENT})

Receber testes sugeridos

Para receber uma sugestão de teste da Vertex AI Vizier, crie uma solicitação que contenha um SUGGEST_COUNT e um CLIENT_ID. Passe essas informações para a Vertex AI Vizier enviando a solicitação.

Crie a solicitação usando os comandos a seguir. Altere o SUGGEST_COUNT para o número de sugestões que quer receber de cada solicitação.

suggest_response = vizier_client.suggest_trials({
    'parent': STUDY_NAME,
    'suggestion_count': SUGGEST_COUNT,
    'client_id': CLIENT_ID
    })

suggest_trials inicia uma operação de longa duração para gerar o teste. A resposta informa que a Vertex Vizier está trabalhando nas sugestões do teste.

Para aguardar o resultado retornado, use a função result() .

suggest_response.result().trials

O formato a seguir mostra um exemplo de teste. Este teste sugere o uso do valor 0.1 para o parâmetro x.

name: "TRIAL_ID"
state: ACTIVE
parameters {
  parameter_id: "x"
  value {
    number_value: 0.1
  }
}
start_time {
  seconds: 1618011215
}

Use o TRIAL_ID da resposta anterior para receber o teste:

vizier_client.get_trial({
        'name': TRIAL_ID
      })

Avaliar os resultados

Depois de receber suas sugestões de teste, avalie cada teste e registre cada resultado como uma medida.

Por exemplo, se a função que está tentando otimizar for y = x^2, avalie-a usando o valor de teste x sugerido. Usando um valor sugerido de 0.1, a função é avaliada como y = 0.1 * 0.1, o que resulta em 0.01.

Adicionar uma medida

Depois de avaliar a sugestão de teste para conseguir uma medida, adicione essa medida ao teste.

Use os seguintes comandos para armazenar sua medida e enviar a solicitação. Neste exemplo, você substitui RESULT pela medida. Se a função que você está otimizando for y = x^2, e o valor sugerido de x for 0.1, o resultado será 0.01.

vizier_client.add_trial_measurement({
        'trial_name': TRIAL_ID,
        'measurement': {
            'metrics': [{'metric_id': 'y', 'value':RESULT }]
        }
    })

Concluir um teste

Depois de adicionar todas as medidas para um teste, é necessário concluir o teste enviando um comando.

Ao concluir o teste, você pode enviar um comando para o teste ou adicionar um comando para adicionar uma medida final e concluir o teste.

Sem medida final

Para concluir o teste sem adicionar uma medida final, envie a seguinte solicitação:

vizier_client.complete_trial({
      'name': TRIAL_ID
  })

Com a medida final

Para concluir um teste e incluir uma medida final, use os comandos a seguir, substituindo RESULT pela medida final.

vizier_client.complete_trial({
      'name': TRIAL_ID
      'final_measurement': {
        'metrics': [{'metric_id': 'y', 'value': RESULT}]
      }
  })

Listar testes

Para listar os testes em um estudo específico, envie a solicitação a seguir:

vizier_client.list_trials({
    'parent': STUDY_NAME
})

Depois de concluir todos os testes pendentes, chame suggestTrials para mais sugestões e repita o processo de avaliação de teste.

Listar o teste ótimo

Veja no exemplo a seguir list_optimal_trials, que retorna os testes ideais para um estudo de vários objetivos ou os testes ideais para um estudo de objetivo único:

vizier_client.list_optimal_trials({
    'parent': STUDY_NAME
})

A seguir

  • Consulte a referência REST estudos.