arrow_back

Vertex AI: 하이퍼파라미터 조정

로그인 가입
Quick tip: Review the prerequisites before you run the lab
Use an Incognito or private browser window to run this lab. This prevents any conflicts between your personal account and the student account, which may cause extra charges incurred to your personal account.
지식을 테스트하고 커뮤니티와 공유하기
done
700개 이상의 실무형 실습, 기술 배지, 과정에 액세스

Vertex AI: 하이퍼파라미터 조정

실습 2시간 30분 universal_currency_alt 크레딧 5개 show_chart 고급
info 이 실습에는 학습을 지원하는 AI 도구가 통합되어 있을 수 있습니다.
지식을 테스트하고 커뮤니티와 공유하기
done
700개 이상의 실무형 실습, 기술 배지, 과정에 액세스

개요

이 실습에서는 Vertex AI를 사용하여 TensorFlow 모델을 위해 하이퍼파라미터 조정 작업을 실행하는 방법을 알아봅니다. 이 실습에서는 모델 코드에 TensorFlow를 사용하지만 다른 프레임워크로 쉽게 교체할 수 있습니다.

학습 목표

  • Workbench 인스턴스 노트북 만들기
  • 하이퍼파라미터 조정을 위한 학습 애플리케이션 코드 수정
  • Vertex AI UI에서 하이퍼파라미터 조정 작업 실행

Vertex AI 소개

이 실습에서는 Google Cloud에서 제공되는 최신 AI 제품을 사용합니다. Vertex AI는 Google Cloud 전반의 ML 제품을 원활한 개발 환경으로 통합합니다. 예전에는 AutoML로 학습된 모델과 커스텀 모델은 별도의 서비스를 통해 액세스할 수 있었습니다. 새 서비스는 다른 새로운 제품과 함께 두 가지 모두를 단일 API로 결합합니다. 기존 프로젝트를 Vertex AI로 마이그레이션할 수도 있습니다. 의견이 있는 경우 지원 페이지를 참조하세요.

Vertex AI에는 엔드 투 엔드 ML 워크플로를 지원하는 다양한 제품이 포함되어 있습니다. 이 실습에서는 아래에 강조 표시된 학습/HP 조정 및 Notebooks 제품에 중점을 둡니다.

Vertex AI는 두 가지 노트북 솔루션인 Workbench와 Colab Enterprise를 제공합니다.

Workbench

Vertex AI Workbench는 제어 및 맞춤설정을 우선시하는 프로젝트에 적합한 옵션입니다. 복잡한 종속 항목을 지닌 여러 파일에 걸쳐져 있는 프로젝트에 적합합니다. 워크스테이션이나 노트북에서 클라우드로 전환하는 데이터 과학자에게도 적합한 옵션입니다.

Vertex AI Workbench 인스턴스에는 TensorFlow 및 PyTorch 프레임워크 지원을 포함하여 딥 러닝 패키지 모음이 사전 설치되어 있습니다.

설정 및 요건

각 실습에서는 정해진 기간 동안 새 Google Cloud 프로젝트와 리소스 집합이 무료로 제공됩니다.

  1. 시크릿 창을 사용하여 Qwiklabs에 로그인합니다.

  2. 실습 사용 가능 시간(예: 1:15:00)을 참고하여 해당 시간 내에 완료합니다.
    일시중지 기능은 없습니다. 필요한 경우 다시 시작할 수 있지만 처음부터 시작해야 합니다.

  3. 준비가 되면 실습 시작을 클릭합니다.

  4. 실습 사용자 인증 정보(사용자 이름비밀번호)를 기록해 두세요. Google Cloud Console에 로그인합니다.

  5. Google Console 열기를 클릭합니다.

  6. 다른 계정 사용을 클릭한 다음, 안내 메시지에 실습에 대한 사용자 인증 정보를 복사하여 붙여넣습니다.
    다른 사용자 인증 정보를 사용하는 경우 오류가 발생하거나 요금이 부과됩니다.

  7. 약관에 동의하고 리소스 복구 페이지를 건너뜁니다.

Compute Engine API 사용 설정

  1. Cloud 콘솔에서 탐색 메뉴 > API 및 서비스 > 라이브러리를 클릭합니다.

  2. Compute Engine API를 검색한 다음 아직 사용 설정되어 있지 않으면 사용 설정을 클릭합니다. 이것은 노트북 인스턴스를 생성하는 데 필요합니다.

Container Registry API 사용 설정

  1. Cloud 콘솔에서 탐색 메뉴 > API 및 서비스 > 라이브러리를 클릭합니다.

  2. Google Container Registry API를 검색하고 사용 설정되지 않았다면 사용 설정을 선택합니다. 이를 사용하여 커스텀 학습 작업을 위한 컨테이너를 생성합니다.

작업 1. Vertex AI Workbench 인스턴스 실행

  1. Google Cloud 콘솔의 탐색 메뉴()에서 Vertex AI를 선택합니다.

  2. 모든 권장 API 사용 설정을 클릭합니다.

  3. 탐색 메뉴에서 Workbench를 클릭합니다.

    Workbench 페이지 상단에서 인스턴스 뷰에 있는지 확인합니다.

  4. 새로 만들기를 클릭합니다.

  5. 인스턴스를 구성합니다.

    • 이름: lab-workbench
    • 리전: 리전을 (으)로 설정합니다.
    • 영역: 영역을 (으)로 설정합니다.
    • 고급 옵션(선택사항): 필요한 경우 '고급 옵션'을 클릭하여 추가로 맞춤설정(예: 머신 유형, 디스크 크기)할 수 있습니다.

  1. 만들기를 클릭합니다.

인스턴스를 만드는 데 몇 분 정도 걸립니다. 준비되면 이름 옆에 녹색 체크표시가 나타납니다.

  1. 인스턴스 이름 옆에 있는 JupyterLab 열기를 클릭하여 JupyterLab 인터페이스를 실행합니다. 그러면 브라우저에서 새 탭이 열립니다.

참고: 이 실습에서 학습하고 조정할 모델은 TensorFlow Datasetshorses or humans dataset로 학습된 이미지 분류 모델입니다.

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. Vertex AI Workbench 인스턴스 실행

작업 2. 학습 애플리케이션 코드 컨테이너화

학습 애플리케이션 코드를 Docker 컨테이너에 넣고 이 컨테이너를 Google Container Registry로 푸시하여 이 하이퍼파라미터 조정 작업을 Vertex에 제출합니다. 이 방식을 사용하면 모든 프레임워크로 빌드된 모델의 하이퍼파라미터를 조정할 수 있습니다.

  1. JupyterLab의 Launcher(런처) 메뉴에서 노트북 인스턴스의 Terminal(터미널) 창을 엽니다.

  1. horses_or_humans라는 새 디렉터리를 만들고 cd 명령어를 사용해 이 디렉터리로 변경하세요.
mkdir horses_or_humans cd horses_or_humans

Dockerfile 만들기

코드를 컨테이너화하는 첫 번째 단계는 Dockerfile을 만드는 것입니다. Dockerfile에는 이미지를 실행하는 데 필요한 모든 명령어가 포함됩니다. CloudML Hypertune 라이브러리를 포함하여 필요한 모든 라이브러리를 설치하고 학습 코드의 진입점을 설정합니다.

  1. 터미널에서 빈 Dockerfile을 만듭니다.
touch Dockerfile
  1. 왼쪽 메뉴에서 Dockerfile을 열고 다음을 복사해서 붙여넣습니다.
FROM gcr.io/deeplearning-platform-release/tf2-gpu.2-9 WORKDIR / # Installs hypertune library RUN pip install cloudml-hypertune # Copies the trainer code to the docker image. COPY trainer /trainer # Sets up the entry point to invoke the trainer. ENTRYPOINT ["python", "-m", "trainer.task"]
  1. Ctrl + S를 눌러 파일을 저장합니다.

이 Dockerfile은 Deep Learning Container TensorFlow Enterprise 2.9 GPU Docker 이미지를 사용합니다. Google Cloud의 Deep Learning Containers에는 많은 수의 일반적인 ML 및 데이터 과학 프레임워크가 사전 설치된 상태로 제공됩니다.

해당 이미지를 다운로드한 후 이 Dockerfile은 학습 코드의 진입점을 설정합니다. 아직 이 파일을 만들지 않았습니다. 다음 단계에서 모델을 학습시키고 조정하기 위한 코드를 추가할 것입니다.

모델 학습 코드 추가

  1. 터미널에서 다음을 실행하여 학습 코드용 디렉터리와 코드를 추가할 Python 파일을 만듭니다.
mkdir trainer touch trainer/task.py

이제 horse_or_humans/ 디렉터리에 다음이 포함됩니다.

+ Dockerfile + trainer/ + task.py
  1. 다음으로 방금 만든 task.py 파일을 열고 아래 코드를 복사합니다.
import tensorflow as tf import tensorflow_datasets as tfds import argparse import hypertune NUM_EPOCHS = 10 def get_args(): '''Parses args. Must include all hyperparameters you want to tune.''' parser = argparse.ArgumentParser() parser.add_argument( '--learning_rate', required=True, type=float, help='learning rate') parser.add_argument( '--momentum', required=True, type=float, help='SGD momentum value') parser.add_argument( '--num_neurons', required=True, type=int, help='number of units in last hidden layer') args = parser.parse_args() return args def preprocess_data(image, label): '''Resizes and scales images.''' image = tf.image.resize(image, (150,150)) return tf.cast(image, tf.float32) / 255., label def create_dataset(): '''Loads Horses Or Humans dataset and preprocesses data.''' data, info = tfds.load(name='horses_or_humans', as_supervised=True, with_info=True) # Create train dataset train_data = data['train'].map(preprocess_data) train_data = train_data.shuffle(1000) train_data = train_data.batch(64) # Create validation dataset validation_data = data['test'].map(preprocess_data) validation_data = validation_data.batch(64) return train_data, validation_data def create_model(num_neurons, learning_rate, momentum): '''Defines and complies model.''' inputs = tf.keras.Input(shape=(150, 150, 3)) x = tf.keras.layers.Conv2D(16, (3, 3), activation='relu')(inputs) x = tf.keras.layers.MaxPooling2D((2, 2))(x) x = tf.keras.layers.Conv2D(32, (3, 3), activation='relu')(x) x = tf.keras.layers.MaxPooling2D((2, 2))(x) x = tf.keras.layers.Conv2D(64, (3, 3), activation='relu')(x) x = tf.keras.layers.MaxPooling2D((2, 2))(x) x = tf.keras.layers.Flatten()(x) x = tf.keras.layers.Dense(num_neurons, activation='relu')(x) outputs = tf.keras.layers.Dense(1, activation='sigmoid')(x) model = tf.keras.Model(inputs, outputs) model.compile( loss='binary_crossentropy', optimizer=tf.keras.optimizers.SGD(learning_rate=learning_rate, momentum=momentum), metrics=['accuracy']) return model def main(): args = get_args() train_data, validation_data = create_dataset() model = create_model(args.num_neurons, args.learning_rate, args.momentum) history = model.fit(train_data, epochs=NUM_EPOCHS, validation_data=validation_data) # DEFINE METRIC hp_metric = history.history['val_accuracy'][-1] hpt = hypertune.HyperTune() hpt.report_hyperparameter_tuning_metric( hyperparameter_metric_tag='accuracy', metric_value=hp_metric, global_step=NUM_EPOCHS) if __name__ == "__main__": main()
  1. Ctrl + S를 눌러 파일을 저장합니다.

컨테이너를 빌드하기 전에 코드를 자세히 살펴보겠습니다. 하이퍼파라미터 조정 서비스 사용과 관련된 몇 가지 구성요소가 있습니다.

  • 스크립트는 hypertune 라이브러리를 가져옵니다. 1단계의 Dockerfile에는 이 라이브러리를 pip 설치하는 지침이 포함되어 있습니다.

  • get_args() 함수는 조정하려는 각 하이퍼파라미터에 대한 명령줄 인수를 정의합니다. 이 예에서 조정될 하이퍼파라미터는 학습률, 옵티마이저의 모멘텀 값, 모델의 마지막 히든 레이어의 뉴런 수이지만 자유롭게 실험해도 됩니다. 그런 다음 코드에서 해당 인수에 전달된 값을 사용하여 해당 하이퍼파라미터를 설정합니다.

  • main() 함수의 끝에서 hypertune 라이브러리를 사용하여 최적화하려는 측정항목을 정의합니다. TensorFlow에서 keras model.fit 메서드는 History 객체를 반환합니다. History.history 속성은 연속적인 에포크에서의 학습 손실 값과 측정항목 값의 기록입니다. model.fit에 유효성 검사 데이터를 전달하면 History.history 속성에 유효성 검사 손실 및 측정항목 값도 포함됩니다. 예를 들어 유효성 검사 데이터로 3개의 에포크에 대한 모델을 학습하고 accuracy를 측정항목으로 제공한 경우 History.history 속성은 다음 딕셔너리와 유사하게 나타납니다.

{ "accuracy": [ 0.7795261740684509, 0.9471358060836792, 0.9870933294296265 ], "loss": [ 0.6340447664260864, 0.16712145507335663, 0.04546636343002319 ], "val_accuracy": [ 0.3795261740684509, 0.4471358060836792, 0.4870933294296265 ], "val_loss": [ 2.044623374938965, 4.100203514099121, 3.0728273391723633 ]

하이퍼파라미터 조정 서비스가 모델의 유효성 검사 정확도를 최대화하는 값을 검색하도록 하려면 측정항목을 val_accuracy 목록의 마지막 항목(또는 NUM_EPOCS - 1)으로 정의합니다. 그런 다음 이 측정항목을 HyperTune의 인스턴스에 전달합니다. hyperparameter_metric_tag에 대해 원하는 문자열을 선택할 수 있지만 나중에 하이퍼파라미터 조정 작업을 시작할 때 해당 문자열을 다시 사용해야 합니다.

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. Dockerfile 만들기 및 모델 학습 코드 추가

컨테이너 빌드

  1. 터미널에서 다음을 실행하여 프로젝트의 env 변수를 정의하고 your-cloud-project를 프로젝트 ID로 바꿉니다.
참고: 터미널에서 gcloud config list --format 'value(core.project)'를 실행하여 프로젝트 ID를 얻을 수 있습니다. PROJECT_ID='your-cloud-project'
  1. Google Container Registry에서 컨테이너 이미지의 URI로 변수를 정의합니다.
IMAGE_URI="gcr.io/$PROJECT_ID/horse-human:hypertune"
  1. 그런 다음 horses_or_humans 디렉터리의 루트에서 다음을 실행하여 컨테이너를 빌드합니다.
docker build ./ -t $IMAGE_URI
  1. 마지막으로 Google Container Registry에 푸시합니다.
docker push $IMAGE_URI

컨테이너가 Container Registry로 푸시되었으므로 이제 커스텀 모델 하이퍼파라미터 조정 작업을 시작할 준비가 되었습니다.

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. 컨테이너 빌드

작업 3. Vertex AI에서 하이퍼파라미터 조정 작업 실행

이 실습에서는 Google Container Registry의 커스텀 컨테이너를 통한 커스텀 학습을 사용하지만 사전 빌드된 컨테이너로 하이퍼파라미터 조정 작업을 실행할 수도 있습니다.

  • Cloud 콘솔에서 Vertex AI의 학습 섹션으로 이동합니다.
  • Vertex AI API의 경우 사용 설정을 클릭하고 닫기를 클릭합니다.

학습 작업 구성

  1. 새 모델 학습을 클릭하여 하이퍼파라미터 조정 작업을 위한 파라미터를 입력합니다.

    • 데이터 세트에서 관리형 데이터 세트 없음을 선택합니다.
    • 학습 방법으로 커스텀 학습(고급)을 선택하고 계속을 클릭합니다.
    • 모델 이름horses-humans-hyptertune(또는 원하는 모델 이름)을 입력합니다.
    • 계속을 클릭합니다.
  2. 학습 컨테이너 단계에서 커스텀 컨테이너를 선택합니다.

    • 커스텀 컨테이너 설정에서 컨테이너 이미지에 대해 이전 섹션의 IMAGE_URI 변수 값을 입력합니다. 사용자 고유의 프로젝트 이름이 포함된 gcr.io/<your-cloud-project>/horse-human:hypertune이어야 합니다. 나머지 필드는 비워 두고 계속을 클릭합니다.

하이퍼파라미터 조정 작업 구성

  • 하이퍼파라미터 조정 사용 설정을 선택합니다.

하이퍼파라미터 구성

다음으로 학습 애플리케이션 코드에서 명령줄 인수로 설정한 하이퍼파라미터를 추가해야 합니다. 하이퍼파라미터를 추가할 때 먼저 이름을 제공해야 합니다. 이것은 argparse에 전달한 인수 이름과 일치해야 합니다.

  1. 매개변수 이름learning_rate를 입력합니다.

  2. 유형으로 실수(Double)를 선택합니다.

  3. 최솟값0.01, 최댓값1을 입력합니다.

  4. 확장으로 로그를 선택합니다.

  5. 완료를 클릭합니다.

  6. learning_rate 하이퍼파라미터를 추가한 후 momentumnum_neurons에 대한 파라미터를 추가합니다.

  • momentum:

    • 초매개변수 추가를 클릭합니다.
    • 매개변수 이름momentum을 입력합니다.
    • 유형으로 실수(Double)를 선택합니다.
    • 최솟값0, 최댓값1을 입력합니다.
    • 확장으로 선형을 선택합니다.
    • 완료를 클릭합니다.
  • num_neurons:

    • 초매개변수 추가를 클릭합니다.
    • 매개변수 이름num_neurons를 입력합니다.
    • 유형으로 개별 값을 선택합니다.
    • 64,128,512를 입력합니다.
    • 확장으로 확장 안함을 선택합니다.
    • 완료를 클릭합니다.

측정항목 구성

초매개변수를 추가한 후에는 최적화하려는 측정항목과 목표를 제공합니다. 이것은 학습 애플리케이션에서 설정한 hyperparameter_metric_tag와 동일해야 합니다.

  1. 최적화할 측정항목정확성을 입력합니다.
  2. 목표최대화를 선택합니다.

Vertex AI 하이퍼파라미터 조정 서비스는 이전 단계에서 구성된 값을 사용하여 학습 애플리케이션을 여러 번 실행합니다. 서비스 실행 시도 횟수에 상한값을 설정해야 합니다.

더 많이 시도하면 일반적으로 결과가 향상되지만, 반환되는 결과가 감소하는 시점이 있습니다. 그 이후에는 추가로 시도해도 최적화할 측정항목에 거의 또는 전혀 영향을 미치지 않습니다. 처음에는 시도 횟수를 적게 설정하고 선택한 초매개변수가 미치는 영향을 파악한 후 시도 횟수를 늘리는 것이 좋습니다.

병렬 시도 횟수의 상한값도 설정해야 합니다. 병렬 시도 횟수를 늘리면 하이퍼파라미터 조정 작업을 실행하는 데 걸리는 시간이 줄어듭니다. 하지만 전체적으로 작업의 효율성이 떨어질 수 있습니다. 기본 조정 전략에서는 이전 시도의 결과를 바탕으로 후속 시도에서 값을 할당하기 때문입니다. 너무 많은 시도를 병렬로 실행하면 시도가 시작될 때 기존에 실행 중인 시도의 결과를 활용하지 못할 수 있습니다.

  1. 시연 목적으로 최대 시도 횟수15로 설정하고 최대 병렬 시도 횟수3으로 설정할 수 있습니다. 다른 숫자로 실험할 수 있지만 이로 인해 조정 시간이 길어지고 비용이 증가할 수 있습니다.

  2. 기본값알고리즘으로 선택하면 알고리즘이 Google Vizier를 사용하여 하이퍼파라미터 조정을 위한 베이즈 최적화를 수행합니다. 이 알고리즘에 대한 자세한 내용은 베이즈 최적화를 사용하여 Cloud Machine Learning Engine의 초매개변수 조정 블로그에서 확인할 수 있습니다.

  3. 계속을 클릭합니다.

컴퓨팅 구성

컴퓨팅 및 가격 책정에서 선택한 리전을 그대로 두고 컴퓨팅 설정에서 새 작업자 풀에 배포를 선택합니다.

작업자 풀 0을 다음과 같이 구성합니다.

  1. 머신 유형에서 표준 > n1-standard-4을 선택합니다.
  2. 디스크 유형에서 SSD를 선택합니다.
  3. 디스크 크기(GB)100을 입력합니다.
  4. 하이퍼파라미터 조정 작업을 시작하려면 학습 시작을 클릭합니다. 콘솔의 학습 섹션에서 초매개변수 조정 작업 탭에 다음과 같은 내용이 표시됩니다.

참고: 초매개변수 조정 작업을 완료하는 데 약 55~60분이 걸립니다.

완료되면 작업 이름을 클릭하고 조정 시도 결과를 볼 수 있습니다.

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. Vertex AI에서 하이퍼파라미터 조정 작업 실행

작업 4. 삭제

  1. 이 실습에서 만든 노트북을 계속 사용하려면 사용하지 않을 때 노트북을 끄는 것이 좋습니다. Cloud 콘솔의 Notebooks UI에서 노트북을 선택한 다음 중지를 선택합니다.

    노트북을 완전히 삭제하려면 오른쪽 상단에 있는 삭제 버튼을 클릭하면 됩니다.

  2. 스토리지 버킷을 삭제하려면 탐색 메뉴 > Cloud Storage로 이동하여 버킷을 선택하고 삭제를 클릭합니다.

수고하셨습니다

Vertex AI를 사용하여 다음을 수행하는 방법을 배웠습니다.

커스텀 컨테이너에서 제공되는 학습 코드에 하이퍼파라미터 조정 작업 시작하기. 이 예에서는 TensorFlow 모델을 사용했지만 커스텀 또는 기본 제공되는 컨테이너를 사용하여 모든 프레임워크로 빌드된 모델을 학습시킬 수 있습니다. Vertex의 다른 부분에 대해 자세히 알아보려면 Vertex AI 문서를 확인하세요.

실습 종료

실습을 완료하면 실습 종료를 클릭합니다. Qwiklabs에서 사용된 리소스를 자동으로 삭제하고 계정을 지웁니다.

실습 경험을 평가할 수 있습니다. 해당하는 별표 수를 선택하고 의견을 입력한 후 제출을 클릭합니다.

별점의 의미는 다음과 같습니다.

  • 별표 1개 = 매우 불만족
  • 별표 2개 = 불만족
  • 별표 3개 = 중간
  • 별표 4개 = 만족
  • 별표 5개 = 매우 만족

의견을 제공하고 싶지 않다면 대화상자를 닫으면 됩니다.

의견이나 제안 또는 수정할 사항이 있다면 지원 탭을 사용하세요.

Copyright 2020 Google LLC All rights reserved. Google 및 Google 로고는 Google LLC의 상표입니다. 기타 모든 회사명 및 제품명은 해당 업체의 상표일 수 있습니다.

Before you begin

  1. Labs create a Google Cloud project and resources for a fixed time
  2. Labs have a time limit and no pause feature. If you end the lab, you'll have to restart from the beginning.
  3. On the top left of your screen, click Start lab to begin

현재 이 콘텐츠를 이용할 수 없습니다

이용할 수 있게 되면 이메일로 알려드리겠습니다.

감사합니다

이용할 수 있게 되면 이메일로 알려드리겠습니다.

One lab at a time

Confirm to end all existing labs and start this one

Use private browsing to run the lab

Use an Incognito or private browser window to run this lab. This prevents any conflicts between your personal account and the Student account, which may cause extra charges incurred to your personal account.