Vertex AI Vizier 학습 만들기

이 페이지에서는 Python을 사용하여 Vertex AI Vizier에 API 요청을 보내는 방법을 설명합니다. Vertex AI Vizier의 작동 방식에 대한 자세한 내용은 Vertex AI Vizier 개요를 참조하세요.

시작하기 전에

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  3. Vertex AI API 사용 설정

    API 사용 설정

  4. 서비스 계정을 만듭니다.

    1. 콘솔에서 서비스 계정 만들기 페이지로 이동합니다.

      서비스 계정 만들기로 이동
    2. 프로젝트를 선택합니다.
    3. 서비스 계정 이름 필드에 이름을 입력합니다. 콘솔은 이 이름을 기반으로 서비스 계정 ID 필드를 채웁니다.

      서비스 계정 설명 필드에 설명을 입력합니다. 예를 들면 Service account for quickstart입니다.

    4. 만들고 계속하기를 클릭합니다.
    5. 프로젝트에 대한 액세스 권한을 제공하려면 서비스 계정에 프로젝트 > 소유자 역할을 부여합니다.

      역할 선택 목록에서 역할을 선택합니다.

      역할을 추가하려면 다른 역할 추가를 클릭하고 각 역할을 추가합니다.

    6. 계속을 클릭합니다.
    7. 완료를 클릭하여 서비스 계정 만들기를 마칩니다.

      브라우저 창을 닫지 마세요. 다음 단계에서 사용합니다.

  5. 서비스 계정 키 만들기

    1. 콘솔에서 만든 서비스 계정의 이메일 주소를 클릭합니다.
    2. 를 클릭합니다.
    3. 키 추가를 클릭한 후 새 키 만들기를 클릭합니다.
    4. 만들기를 클릭합니다. JSON 키 파일이 컴퓨터에 다운로드됩니다.
    5. 닫기를 클릭합니다.
  6. GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 서비스 계정 키가 포함된 JSON 파일의 경로로 설정합니다. 이 변수는 현재 셸 세션에만 적용되므로, 새 세션을 열 경우, 변수를 다시 설정합니다.

  7. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  8. Vertex AI API 사용 설정

    API 사용 설정

  9. 서비스 계정을 만듭니다.

    1. 콘솔에서 서비스 계정 만들기 페이지로 이동합니다.

      서비스 계정 만들기로 이동
    2. 프로젝트를 선택합니다.
    3. 서비스 계정 이름 필드에 이름을 입력합니다. 콘솔은 이 이름을 기반으로 서비스 계정 ID 필드를 채웁니다.

      서비스 계정 설명 필드에 설명을 입력합니다. 예를 들면 Service account for quickstart입니다.

    4. 만들고 계속하기를 클릭합니다.
    5. 프로젝트에 대한 액세스 권한을 제공하려면 서비스 계정에 프로젝트 > 소유자 역할을 부여합니다.

      역할 선택 목록에서 역할을 선택합니다.

      역할을 추가하려면 다른 역할 추가를 클릭하고 각 역할을 추가합니다.

    6. 계속을 클릭합니다.
    7. 완료를 클릭하여 서비스 계정 만들기를 마칩니다.

      브라우저 창을 닫지 마세요. 다음 단계에서 사용합니다.

  10. 서비스 계정 키 만들기

    1. 콘솔에서 만든 서비스 계정의 이메일 주소를 클릭합니다.
    2. 를 클릭합니다.
    3. 키 추가를 클릭한 후 새 키 만들기를 클릭합니다.
    4. 만들기를 클릭합니다. JSON 키 파일이 컴퓨터에 다운로드됩니다.
    5. 닫기를 클릭합니다.
  11. GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 서비스 계정 키가 포함된 JSON 파일의 경로로 설정합니다. 이 변수는 현재 셸 세션에만 적용되므로, 새 세션을 열 경우, 변수를 다시 설정합니다.

  12. 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
})