프로토타입에서 프로덕션으로: 커스텀 학습 모델에서 예측 수행

1. 개요

이 실습에서는 Vertex AI를 사용하여 커스텀 학습 모델에서 온라인 및 일괄 예측을 수행합니다.

이 실습은 프로토타입에서 프로덕션으로 동영상 시리즈 중 하나이며, 이전 실습을 완료한 후에 이 실습을 진행해야 합니다. 함께 제공되는 동영상을 시청하여 자세히 알아볼 수 있습니다.

.

학습 내용

다음 작업을 수행하는 방법을 배우게 됩니다.

  • Vertex AI 모델 레지스트리에 모델 업로드
  • 엔드포인트에 모델 배포
  • UI 및 SDK를 사용하여 온라인 및 일괄 예측 수행

Google Cloud에서 이 실습을 진행하는 데 드는 총 비용은 약 $1입니다.

2. Vertex AI 소개

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

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

Vertex 제품 개요

3. 환경 설정

Vertex AI를 사용한 커스텀 모델 학습 실습의 단계를 완료하여 환경을 설정합니다.

4. 레지스트리에 모델 업로드

모델을 사용하여 예측을 수행하려면 먼저 ML 모델의 수명 주기를 관리할 수 있는 저장소인 Vertex AI 모델 레지스트리에 모델을 업로드해야 합니다.

아래와 같이 커스텀 학습 작업을 구성할 때 모델을 업로드할 수 있습니다.

training_prediction

또는 학습 작업이 완료된 후 모델 아티팩트를 Cloud Storage 버킷에 저장하기만 하면 모델을 가져올 수 있습니다. 이 실습에서는 이 옵션을 사용합니다.

콘솔 내에서 모델 섹션으로 이동합니다.

모델 메뉴

가져오기 선택

import_model

새 모델로 가져오기를 선택한 후 모델 이름 지정

new_model

모델 설정에서 미리 빌드된 컨테이너가 있는 모델을 가져오고 TensorFlow 2.8을 사용합니다. 여기서 사전 빌드된 예측 컨테이너의 전체 목록을 볼 수 있습니다.

그런 다음 커스텀 교육 작업에서 모델 아티팩트를 저장한 클라우드 스토리지 버킷의 경로를 제공합니다. gs://{PROJECT_ID}-bucket/model_output과 같이 표시됩니다.

설명 기능 섹션은 건너뛰겠습니다. Vertex Explainable AI에 대해 자세히 알아보려면 문서를 확인하세요.

모델을 가져오면 레지스트리에 표시됩니다.

flower_model

UI 대신 SDK를 통해 이 작업을 수행하려는 경우 Workbench 노트북에서 다음을 실행하여 모델을 업로드할 수 있습니다.

from google.cloud import aiplatform

my_model = aiplatform.Model.upload(display_name='flower-model',
                                  artifact_uri='gs://{PROJECT_ID}-bucket/model_output',
                                  serving_container_image_uri='us-docker.pkg.dev/vertex-ai/prediction/tf2-cpu.2-8:latest')

5. 엔드포인트에 모델 배포

Vertex AI에서 실행할 수 있는 예측 작업에는 일괄 예측과 온라인 예측의 두 가지 유형이 있습니다.

일괄 예측은 비동기식 요청입니다. 즉각적인 응답이 필요하지 않고 누적된 데이터를 단일 요청으로 처리하려는 경우에 적합합니다.

반면에 모델에 전달된 데이터에서 즉시 지연 시간이 짧은 예측을 수행하려면 온라인 예측을 사용합니다.

이제 모델이 레지스트리에 있으므로 일괄 예측에 사용할 수 있습니다.

하지만 온라인 예측을 수행하려면 모델을 엔드포인트에 배포해야 합니다. 이렇게 하면 저장된 모델 아티팩트가 물리적 리소스와 연결되어 예측 지연 시간이 짧아집니다.

엔드포인트에 배포하려면 모델 맨 오른쪽에 있는 세 개의 점을 선택한 다음 엔드포인트에 배포를 선택합니다.

deploy_model

엔드포인트에 이름을 지정한 다음 나머지 설정은 그대로 두고 계속을 클릭합니다.

endpoint_name

엔드포인트는 자동 확장을 지원합니다. 즉, 최소값과 최대값을 설정할 수 있으며 컴퓨팅 노드가 해당 경계 내에서 트래픽 수요에 맞게 확장됩니다.

이 실습은 시연용일 뿐이며 트래픽이 많은 경우 이 엔드포인트를 사용하지 않으므로 최대 컴퓨팅 노드 수를 1로 설정하고 머신 유형에 n1-standard-4를 선택할 수 있습니다.

endpoint_compute

모델 모니터링은 건너뛰겠습니다. 이 기능에 대해 자세히 알아보려면 문서를 확인하세요.

그런 다음 배포를 클릭합니다.

배포하는 데 몇 분 정도 걸리지만 완료되면 모델의 배포 상태가 Vertex AI에 배포됨으로 변경된 것을 볼 수 있습니다.

SDK를 통해 모델을 배포하려면 아래 명령어를 실행하세요.

my_model = aiplatform.Model("projects/{PROJECT_NUMBER}/locations/us-central1/models/{MODEL_ID}")

endpoint = my_model.deploy(
     deployed_model_display_name='my-endpoint',
     traffic_split={"0": 100},
     machine_type="n1-standard-4",
     accelerator_count=0,
     min_replica_count=1,
     max_replica_count=1,
   )

6. 예측 가져오기

온라인 예측

모델이 엔드포인트에 배포되면 다른 나머지 엔드포인트처럼 조회할 수 있습니다. 즉, Cloud 함수, 챗봇, 웹 앱 등에서 모델을 호출할 수 있습니다.

시연을 위해 Workbench에서 이 엔드포인트를 호출하겠습니다.

이전 실습에서 만든 노트북으로 돌아갑니다. 런처에서 새 TensorFlow 2 노트북을 만듭니다.

tf_kernel

Vertex AI Python SDK, NumPy, PIL 가져오기

from google.cloud import aiplatform

import numpy as np
from PIL import Image

아래 이미지를 다운로드하여 Workbench 인스턴스에 업로드합니다. 이 민들레 이미지에 대해 모델을 테스트해 보겠습니다.

test_image

먼저 엔드포인트를 정의합니다. 아래에서 {PROJECT_NUMBER}{ENDPOINT_ID}를 바꿔야 합니다.

endpoint = aiplatform.Endpoint(
    endpoint_name="projects/{PROJECT_NUMBER}/locations/us-central1/endpoints/{ENDPOINT_ID}")

Cloud 콘솔의 엔드포인트 섹션에서 endpoint_id를 찾을 수 있습니다.

endpoint_id

그리고 콘솔의 홈페이지에서 프로젝트 번호를 찾을 수 있습니다. 이는 프로젝트 ID와 다릅니다.

project_number

아래 코드는 PIL로 이미지를 열고 크기를 조절합니다.

IMAGE_PATH = "test-image.jpg"
im = Image.open(IMAGE_PATH)

그런 다음 NumPy 데이터를 float32 유형 및 목록으로 변환합니다. NumPy 데이터는 JSON 직렬화가 가능하지 않으므로 요청 본문에 보낼 수 없어서 목록으로 변환하는 것입니다.

x_test = np.asarray(im).astype(np.float32).tolist()

마지막으로 endpoint.predict를 호출합니다.

endpoint.predict(instances=x_test).predictions

5개의 단위가 있는 소프트맥스 레이어인 모델의 출력이 결과로 표시됩니다. 색인 대신 문자열 레이블을 반환하는 커스텀 논리를 작성하려는 경우 커스텀 예측 루틴을 사용할 수 있습니다.

일괄 예측

일괄 예측을 위해 데이터 형식을 지정하는 방법에는 여러 가지가 있습니다. 간단하게 NumPy 데이터를 json 파일로 덤프하고 이 파일을 Cloud Storage에 저장하겠습니다.

with open('test-data.json', 'w') as fp:
    json.dump(x_test, fp)

!gsutil cp test-data.json gs://{YOUR_BUCKET}

다음으로, 모델을 정의합니다. 이는 ENDPOINT_ID 대신 MODEL_ID를 제공해야 한다는 점을 제외하면 엔드포인트를 정의하는 것과 유사합니다.

my_model=aiplatform.Model("projects/{PROJECT_NUMBER}/locations/us-central1/models/{MODEL_ID}")

콘솔의 모델 섹션에서 모델 이름과 버전을 선택한 다음 버전 세부정보를 선택하여 모델 ID를 찾을 수 있습니다.

model_id

마지막으로 SDK를 사용하여 일괄 예측 작업을 호출하고, json 파일을 저장한 Cloud Storage 경로를 전달하고, 예측 결과를 저장할 Cloud Storage 위치를 제공합니다.

batch_prediction_job = my_model.batch_predict(
    job_display_name='flower_batch_predict',
    gcs_source='gs://{YOUR_BUCKET}/test-data.json',
    gcs_destination_prefix='gs://{YOUR_BUCKET}/prediction-results',
    machine_type='n1-standard-4',)

콘솔의 일괄 예측 섹션에서 작업 진행 상황을 추적할 수 있습니다. 단일 이미지에 대해 일괄 예측 작업을 실행하는 것은 효율적이지 않습니다.

batch_pred

다음 단계

이 예에서는 예측 호출을 수행하기 전에 먼저 테스트 이미지를 NumPy로 변환했습니다. 보다 현실적인 사용 사례에서는 이미지를 NumPy에 먼저 로드할 필요 없이 이미지 자체를 보낼 수 있습니다. 이렇게 하려면 이미지 바이트를 디코딩하도록 TensorFlow Serving 기능을 조정해야 합니다. 이 경우 조금 더 많은 작업이 필요하지만 더 큰 이미지와 애플리케이션 빌드에 훨씬 더 효율적입니다. 이 노트북의 예를 볼 수 있습니다.

🎉 수고하셨습니다. 🎉

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

  • Vertex AI 모델 레지스트리에 모델 업로드
  • 일괄 예측 및 온라인 예측 수행

Vertex의 다른 부분에 대해 자세히 알아보려면 문서를 확인하세요.

7. 정리

모델을 사용할 계획이 없다면 엔드포인트에서 모델 배포를 취소할 수 있습니다. 엔드포인트를 완전히 삭제할 수도 있습니다. 필요한 경우 언제든지 모델을 엔드포인트에 재배포할 수 있습니다.

undeploy_model

Workbench 관리형 노트북은 180분의 유휴 시간이 지나면 자동으로 타임아웃되므로 인스턴스 종료에 대해 걱정할 필요가 없습니다. 인스턴스를 수동으로 종료하려면 콘솔의 Vertex AI Workbench 섹션에서 '중지' 버튼을 클릭합니다. 노트북을 완전히 삭제하려면 '삭제' 버튼을 클릭합니다.

인스턴스 중지

스토리지 버킷을 삭제하려면 Cloud 콘솔의 탐색 메뉴를 사용하여 스토리지로 이동하고 버킷을 선택하고 '삭제'를 클릭합니다.

스토리지 삭제