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 인스턴스 만들기

모델을 배포한 후에는 노트북을 사용하여 예측을 가져옵니다. 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에서 모델을 학습시키려면 이 모델을 저장할 데이터 세트를 프로젝트 내에 만들어야 합니다. 왼쪽 메뉴 바에서 프로젝트를 클릭한 다음 데이터 세트 만들기를 선택합니다.

BigQuery 데이터 세트 만들기

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

2단계: CREATE MODEL 쿼리 실행

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

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`

이렇게 하면 실행하는 데 약 1분이 걸리는 0~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 (또는 원하는 이름)을 입력한 다음 선택을 클릭합니다.

모델 내보내기 경로

그런 다음 내보내기를 클릭합니다. 그러면 TensorFlow의 SavedModel 형식으로 모델을 지정한 새로 생성된 GCS 버킷으로 내보내는 BigQuery 작업이 생성됩니다. 내보내는 데 1분 정도 걸립니다.

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

내보낸 모델 애셋

6. Vertex AI로 모델 가져오기

이 단계에서는 모델 애셋을 내보낸 GCS 스토리지 위치를 참조하여 Vertex AI에 모델을 만들고 가져옵니다.

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 Notebook 인스턴스를 사용합니다.

그런 다음 생성한 노트북 인스턴스를 열고 런처에서 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 콘솔의 탐색 메뉴를 사용하여 스토리지로 이동하고 버킷을 선택하고 '삭제'를 클릭합니다.

스토리지 삭제