Vertex AI Vizier 연구 만들기

이 페이지에서는 Python을 사용해서 Vertex AI Vizier에 API 요청을 수행하는 방법을 설명합니다. Vertex AI Vizier 작동 방법은 Vertex AI Vizier 개요를 참조하세요.

시작하기 전에

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Vertex AI API 사용 설정

    API 사용 설정

  3. Create a service account:

    1. In the Google Cloud console, go to the Create service account page.

      Go to Create service account
    2. Select your project.
    3. In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.

      In the Service account description field, enter a description. For example, Service account for quickstart.

    4. Click Create and continue.
    5. Grant the Project > Owner role to the service account.

      To grant the role, find the Select a role list, then select Project > Owner.

    6. Click Continue.
    7. Click Done to finish creating the service account.

      Do not close your browser window. You will use it in the next step.

  4. Create a service account key:

    1. In the Google Cloud console, click the email address for the service account that you created.
    2. Click Keys.
    3. Click Add key, and then click Create new key.
    4. Click Create. A JSON key file is downloaded to your computer.
    5. Click Close.
  5. GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 사용자 인증 정보가 포함된 JSON 파일의 경로로 설정합니다. 이 변수는 현재 셸 세션에만 적용되므로 새 세션을 열면 변수를 다시 설정합니다.

  6. Python용 Vertex AI SDK를 설치합니다.

상수 정의

상수를 정의하려면 다음 명령어를 실행하여 REGIONPROJECT_ID를 리전 및 프로젝트 ID로 바꿉니다. 자체 학습 이름을 만들거나 추천 값을 사용합니다.

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)

API 요청 생성

다음 명령줄 API 요청은 Python으로 작성되어 있습니다.

학습 만들기

학습이란 초매개변수 또는 매개변수를 최적화하는 데 도움이 되는 일련의 실험 또는 시도입니다.

다음 예시에서 목표는 [-10. 10] 범위에서 x를 사용하여 y = x^2를 최대화하는 것입니다. 이 예시에는 매개변수가 하나뿐이며, 쉽게 계산할 수 있는 함수를 사용하여 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],
    }
}

학습 구성을 사용하여 학습을 만들려면 VizierServiceClient를 통해 다음 요청을 보냅니다. 반환된 STUDY_NAME을 사용하여 학습을 쿼리합니다.

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

학습 보기

학습이 생성되면 Google Cloud Console 실험 페이지의 Vertex AI 섹션에서 학습을 찾을 수 있습니다.

실험 페이지로 이동

학습 가져오기

학습을 가져오려면 다음 요청을 전송합니다.

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

학습 나열

특정 프로젝트 및 리전의 학습을 나열하려면 다음 요청을 전송합니다.

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

추천 시도 가져오기

Vertex AI Vizier에서 시도 추천을 가져오려면 SUGGEST_COUNTCLIENT_ID가 포함된 요청을 만듭니다. 요청을 보내서 이 정보를 Vertex AI Vizier로 전달합니다.

다음 명령어를 사용하여 요청을 만듭니다. SUGGEST_COUNT를 각 요청에서 가져오려는 추천 수로 변경합니다.

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

suggest_trials는 시도를 생성하기 위해 장기 실행 작업을 시작합니다. 응답을 통해 Vertex AI Vizier가 시도 추천 시 작동하는지 알 수 있습니다.

반환된 결과를 기다리려면 result() 함수를 사용합니다.

suggest_response.result().trials

다음 형식은 예시 시도를 보여줍니다. 이 시도는 x 매개변수에 0.1 값을 사용할 것을 권장합니다.

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

이전 응답의 TRIAL_ID를 사용하여 시도를 가져옵니다.

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

테스트 결과 평가하기

시도 추천을 받은 후 각 시도를 평가하고 각 결과를 측정값으로 기록합니다.

예를 들어 최적화하려는 함수가 y = x^2이면 시도에서 추천하는 값 x를 사용하여 함수를 평가합니다. 이 함수는 추천 값 0.1을 사용하여 y = 0.1 * 0.1로 계산되며 결과는 0.01이 됩니다.

측정값 추가

시도 추천을 평가하여 측정값을 얻은 다음 이 측정값을 시도에 추가합니다.

다음 명령어를 사용하여 측정값을 저장하고 요청을 보냅니다. 이 예시에서는 RESULT를 측정값으로 바꿉니다. 최적화하는 함수가 y = x^2이고 x의 추천 값이 0.1이면 결과는 0.01입니다.

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

시도 완료

시도에 대해 모든 측정값을 추가한 다음에는 명령어를 전송하여 시도를 완료해야 합니다.

시도를 완료할 때는 시도만 완료하는 명령어를 전송하거나 최종 측정값을 추가하고 시도를 완료하는 명령어를 전송할 수 있습니다.

최종 측정값 제외

최종 측정값을 추가하지 않고 시도를 완료하려면 다음 요청을 전송합니다.

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

최종 측정값 포함

시도를 완료하고 최종 측정값을 포함하려면 다음 명령어를 사용하고 RESULT를 최종 측정값으로 바꿉니다.

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

시도 나열

특정 학습의 시도를 나열하려면 다음 요청을 보냅니다.

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

대기중인 시도를 모두 완료하면 suggestTrials을 호출하여 추가 추천을 확인하고 시도 평가 프로세스를 반복할 수 있습니다.

최적 시도 나열

다음 예시는 다중 객관 학습에 대한 파타토 최적화 시도 또는 단일 목표 학습에 대한 최적 시도를 반환하는 list_optimal_trials을 보여줍니다.

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

다음 단계

  • 연구에서 REST 참조를 확인하세요.