Vertex AI: 예측용 BigQuery 머신러닝 모델 내보내기 및 배포

1. 개요

이 실습에서는 BigQuery 머신러닝으로 모델을 학습시킨 다음, 해당 모델을 Vertex AI로 내보내고 배포합니다. 이는 Google Cloud의 최신 AI 제품 제품입니다.

학습 내용

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

  • BigQuery 머신러닝 (BQML)을 사용한 모델 학습
  • BQML 모델을 Cloud Storage로 내보내기
  • 학습된 BQML을 Vertex AI에 배포
  • 배포된 모델에 대한 예측 수행하기

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

2. Vertex AI 소개

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

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

Vertex 제품 개요

3. 환경 설정

이 Codelab을 실행하려면 결제가 사용 설정된 Google Cloud Platform 프로젝트가 필요합니다. 프로젝트를 만들려면 여기의 안내를 따르세요.

1단계: Compute Engine API 사용 설정

아직 사용 설정되지 않은 경우 Compute Engine으로 이동하고 사용 설정을 선택합니다. 이것은 노트북 인스턴스를 생성하는 데 필요합니다.

2단계: Vertex AI API 사용 설정

Cloud Console의 Vertex AI 섹션으로 이동하고 Vertex AI API 사용 설정을 클릭합니다.

Vertex AI 대시보드

3단계: Notebooks 인스턴스 만들기

모델을 배포한 후 Notebooks를 사용하여 예측을 수행합니다. Cloud 콘솔의 Vertex AI 섹션에서 Notebooks를 클릭합니다.

Vertex AI 메뉴

그런 다음 새 인스턴스를 선택합니다. 그런 다음 GPU 없는 TensorFlow Enterprise 2.3 인스턴스 유형을 선택합니다.

TFE 인스턴스

기본 옵션을 사용한 다음 만들기를 클릭합니다. 인스턴스가 생성되면 JupyterLab 열기를 선택합니다.

CAIP 노트북 열기

4. BigQuery ML 모델을 학습시킵니다.

BigQuery ML을 사용하면 BigQuery에 저장된 데이터를 사용하여 커스텀 머신러닝 모델을 학습시킬 수 있습니다. SQL에서 모델을 학습시키고 예측 결과를 얻을 수 있습니다. 이 실습에서는 BigQuery의 공개적으로 사용 가능한 데이터 세트를 사용하여 신용카드 결제에 대한 채무 불이행 가능성을 예측합니다.

1단계: 프로젝트에서 BigQuery 데이터 세트 만들기

BigQuery ML에서 모델을 학습시키려면 프로젝트 내에 이 모델을 저장할 데이터 세트를 만들어야 합니다. 왼쪽 메뉴 바에서 프로젝트를 클릭한 후 데이터 세트 만들기를 선택합니다.

BQ 데이터 세트 만들기

데이터 세트 ID 필드에 cc_default를 입력합니다. 나머지 필드는 그대로 두고 데이터 세트 만들기를 클릭합니다.

2단계: CREATE MODEL 쿼리 실행

BigQuery 쿼리 편집기에서 다음 CREATE MODEL 쿼리를 실행하여 사용할 공개 데이터 세트에서 BigQuery ML 모델을 만들고 학습시킵니다. your-project를 Cloud 프로젝트의 이름으로 바꿔야 합니다.

CREATE OR REPLACE MODEL
  `your-project.cc_default.logistic_model` OPTIONS(model_type='LOGISTIC_REG',
    input_label_cols=['default_payment_next_month']) AS
SELECT
  limit_balance,
  sex,
  education_level,
  marital_status,
  age,
  pay_0,
  pay_2,
  pay_3,
  pay_4,
  pay_5,
  pay_6,
  bill_amt_1,
  bill_amt_2,
  bill_amt_3,
  bill_amt_4,
  bill_amt_5,
  bill_amt_6,
  pay_amt_1,
  pay_amt_2,
  pay_amt_3,
  pay_amt_4,
  pay_amt_5,
  pay_amt_6,
  default_payment_next_month
FROM
  `bigquery-public-data.ml_datasets.credit_card_default`

이렇게 하면 0에서 1 사이의 숫자 값을 출력하는 로지스틱 회귀 모델이 생성되며, 이는 실행하는 데 약 1분 정도 소요됨을 나타냅니다. 완료되면 데이터 세트 아래에 모델이 표시됩니다.

BQML 모델 세부정보

모델을 클릭하면 학습 및 평가 측정항목을 확인할 수 있습니다.

5. BigQuery ML 모델 내보내기

학습된 BQML 모델에서는 BQML SQL 구문을 사용하여 예측을 수행하거나 모델을 내보내 다른 곳에 배포할 수 있습니다. 여기에서는 모델을 확장 가능한 방식으로 제공하고 예측을 수행할 수 있도록 Vertex AI에 모델을 내보내겠습니다.

1단계: 모델을 위한 Cloud Storage 버킷 만들기

모델 세부정보에서 모델 내보내기를 클릭합니다.

BQML 모델 내보내기

그러면 모델의 애셋을 내보낼 Google Cloud Storage (GCS) 위치를 입력하라는 메시지가 표시됩니다. 아직 GCS 버킷이 없어도 걱정하지 마세요. 이제 만들려고 합니다. 먼저 탐색을 클릭합니다.

GCS 버킷 찾아보기

그런 다음 + 아이콘을 클릭하여 새 버킷을 만듭니다.

새 GCS 버킷

고유한 이름을 지정합니다. 스토리지 버킷 이름은 전역적으로 고유해야 합니다. 계속을 클릭합니다. 다음 단계의 위치 유형에서 리전을 선택하고 드롭다운에서 리전을 선택합니다.

버킷 위치

기본 스토리지 클래스를 사용하고 액세스 제어 아래에서 균일이 선택되어 있는지 확인합니다.

균일한 액세스 제어

계속을 클릭하고 나머지 옵션에 기본값을 사용합니다. 그런 다음 만들기를 클릭합니다.

2단계: BQML 모델 내보내기

새 버킷이 생성되면 이름 필드에 model-assets (또는 원하는 이름)을 입력한 후 선택을 클릭합니다.

모델 내보내기 경로

그런 다음 내보내기를 클릭합니다. 이렇게 하면 BigQuery에서 작업을 만들어 TensorFlow의 SavedModel 형식으로 모델을 새로 만든 GCS 버킷으로 내보낼 수 있습니다. 내보내는 데 1분 정도 걸립니다.

모델을 내보내는 동안 Cloud 콘솔의 스토리지 섹션으로 이동합니다. 작업이 완료되면 모델 애셋이 model-assets 하위 디렉터리 아래에서 방금 만든 버킷으로 내보내야 합니다.

내보낸 모델 애셋

6. Vertex AI로 모델 가져오기

이 단계에서는 모델을 만들고 Vertex AI로 가져오기 위해 모델 애셋을 방금 내보낸 GCS 스토리지 위치를 참조합니다.

1단계: 모델 가져오기

Cloud 콘솔에서 Vertex AI 모델 섹션으로 이동합니다. 여기에서 가져오기를 선택합니다.

모델 가져오기

첫 번째 단계에서는 모델 이름을 predict_default로 지정합니다. 버킷을 만든 리전과 동일한 리전 (us-central1, europe-west4 또는 asia-east1)을 선택합니다. 그런 다음 계속을 클릭합니다. 모델 설정에서 '모델 아티팩트를 사전 빌드된 새 컨테이너로 가져오기'를 유지합니다. 선택합니다.

모델 프레임워크 드롭다운에서 TensorFlow를 선택합니다. 그런 다음 프레임워크 버전으로 2.3을 선택합니다.

모델 아티팩트 위치 필드에서 찾아보기를 클릭하고 방금 만든 GCS 버킷을 클릭한 후 model-assets 디렉터리를 클릭합니다.

모델 애셋 경로

그런 다음 가져오기를 클릭합니다. 모델을 가져오는 데 몇 분 정도 걸립니다. 만들어지면 Cloud 콘솔의 모델 섹션에 표시됩니다.

모델 섹션

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

모델을 업로드했으므로 다음 단계는 Vertex에서 엔드포인트를 만드는 것입니다. Vertex의 모델 리소스에는 여러 엔드포인트가 연결되어 있을 수 있으며 엔드포인트 간에 트래픽을 분할할 수 있습니다.

1단계: 엔드포인트 만들기

모델 페이지에서 배포 및 테스트 탭으로 이동하여 엔드포인트에 배포를 클릭합니다.

배포 및 테스트

엔드포인트에 이름(예: default_pred_v1)을 지정하고 트래픽 분할 설정은 그대로 둔 다음 모델 배포의 머신 유형을 선택합니다. 여기서는 n1-highcpu-2를 사용했지만 원하는 머신 유형을 선택할 수 있습니다.

그런 다음 완료를 선택하고 계속을 클릭합니다. 선택한 위치 설정을 그대로 두고 배포를 클릭합니다. 엔드포인트를 배포하는 데 몇 분 정도 걸립니다. 완료되면 작업 옆에 녹색 체크표시가 나타납니다.

배포된 엔드포인트

거의 다 되었습니다. 이제 배포된 모델에 대한 예측을 가져올 준비가 되었습니다.

8. 배포된 모델을 기반으로 예측 얻기

모델 예측을 수행하기 위한 몇 가지 옵션이 있습니다.

  • Vertex AI UI
  • Vertex AI API

여기에서는 API를 통해 예측을 얻는 방법을 보여드리겠습니다.

1단계: Vertex AI API를 사용하여 모델 예측 수행하기

여기에서 모델 예측을 수행하는 방법을 보여주기 위해 이 실습을 시작할 때 만든 Vertex 노트북 인스턴스를 사용합니다.

다음으로, 만든 노트북 인스턴스를 열고 런처에서 Python 3 노트북을 엽니다.

노트북 열기

노트북의 셀에서 다음을 실행하여 default-pred.json이라는 JSON 파일에 테스트 예시를 작성합니다. 예측을 위해 다음 예를 모델로 전송하겠습니다.

%%writefile default-pred.json
{
  "instances": [
    {"age": 39,
    "bill_amt_1": 47174,
    "bill_amt_2": 47974,
    "bill_amt_3": 48630,
    "bill_amt_4": 50803,
    "bill_amt_5": 30789,
    "bill_amt_6": 15874,
    "education_level": "1",
    "limit_balance": 50000,
    "marital_status": "2",
    "pay_0": 0,
    "pay_2":0,
    "pay_3": 0,
    "pay_4": 0,
    "pay_5": "0",
    "pay_6": "0",
    "pay_amt_1": 1800,
    "pay_amt_2": 2000,
    "pay_amt_3": 3000,
    "pay_amt_4": 2000,
    "pay_amt_5": 2000,
    "pay_amt_6": 2000,
    "sex": "1"}
  ]
}

그런 다음 Vertex UI에서 방금 배포한 엔드포인트에 대한 샘플 요청을 클릭합니다.

샘플 요청

REST 탭의 4단계에서 가져온 코드를 노트북에 복사하고 셀을 실행합니다.

요청 변수

그런 다음 버킷과 모델을 만든 리전의 변수를 추가합니다. 아래 문자열에서 your-region를 바꿉니다.

REGION="your-region" # either us-central1, europe-west4, or asia-east1

마지막으로 다음 코드를 노트북에 복사하여 curl로 엔드포인트에 예측 요청을 수행합니다.

!curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://us-central1-prediction-aiplatform.googleapis.com/v1alpha1/projects/$PROJECT_ID/locations/$REGION/endpoints/$ENDPOINT_ID:predict \
-d "@default-pred.json"

다음과 같이 표시됩니다 (정확한 예측값은 약간 다를 수 있음).

{
  "predictions": [
    {
      "default_payment_next_month_values": [
        "1",
        "0"
      ],
      "default_payment_next_month_probs": [
        0.180815295299778,
        0.819184704700222
      ],
      "predicted_default_payment_next_month": [
        "0"
      ]
    }
  ],
  "deployedModelId": "your-model-id"
}

default_payment_next_month_probs의 값은 각 클래스의 확률을 나타냅니다. 이 예에서 모델은 이 사람이 다음 결제 금액을 불이행하지 않을 가능성이 81% 라고 예측합니다. .819 값은 0 클래스 (기본값 아님)에 해당합니다.

🎉 수고하셨습니다. 🎉

다음과 같은 내용을 배웠습니다.

  • BQML에서 모델 학습
  • BQML 모델을 Cloud Storage로 내보내기
  • 예측을 위해 BQML 모델을 Vertex AI로 가져오기
  • Vertex AI 모델 생성 및 모델을 엔드포인트에 배포
  • Vertex Notebooks 및 curl을 통해 배포된 엔드포인트에서 예측 가져오기

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

9. 삭제

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

인스턴스 중지

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

배포한 엔드포인트를 삭제하려면 Vertex AI 콘솔의 엔드포인트 섹션으로 이동하여 삭제 아이콘을 클릭합니다.

엔드포인트 삭제

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

스토리지 삭제