Hello 커스텀 학습: 커스텀 이미지 분류 모델을 사용한 예측 제공

이 페이지에서는 이미지 분류 모델로 예측을 제공하고 웹 앱에서 이러한 예측을 확인하는 방법을 설명합니다.

이 튜토리얼은 여러 페이지로 이루어져 있습니다.

  1. 프로젝트 및 환경 설정

  2. 커스텀 이미지 분류 모델 학습

  3. 커스텀 이미지 분류 모델을 사용한 예측 제공

  4. 프로젝트 삭제

각 페이지에서는 이 튜토리얼의 이전 페이지에서 안내를 이미 수행했다고 가정합니다.

이 문서의 나머지 부분에서는 이 튜토리얼의 첫 번째 페이지를 따를 때 만든 Cloud Shell 환경과 동일한 환경을 사용한다고 가정합니다. 기존 Cloud Shell 세션이 더 이상 열려 있지 않으면 다음을 수행하여 환경으로 돌아갈 수 있습니다.

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

  2. Cloud Shell 세션에서 다음 명령어를 실행하세요.

    cd hello-custom-sample
    

엔드포인트 만들기

이 튜토리얼의 이전 페이지를 진행할 때 학습시킨 ML 모델에서 온라인 예측을 얻으려면 Vertex AI 엔드포인트를 만드세요. 엔드포인트는 하나 이상의 모델에서 온라인 예측을 제공합니다.

  1. Google Cloud Console의 Vertex AI 섹션에서 모델 페이지로 이동합니다.

    모델로 이동

  2. 이 튜토리얼의 이전 단계에서 학습한 모델 hello_custom의 행을 찾고 모델 이름을 클릭하여 모델 세부정보 페이지를 엽니다.

  3. 배포 및 테스트 탭에서 엔드포인트에 배포를 클릭하여 엔드포인트에 배포 창을 엽니다.

  4. 엔드포인트 정의 단계에서 엔드포인트의 기본 정보를 추가합니다.

    1. 새 엔드포인트 만들기를 선택합니다.

    2. 엔드포인트 이름 필드에 hello_custom을 입력합니다.

    3. 모델 설정 섹션에 hello_custom이라는 모델 이름이 표시되는지 확인합니다. 다음 모델 설정을 지정합니다.

      1. 트래픽 분할 필드에 100을 입력합니다. Vertex AI는 엔드포인트의 트래픽을 여러 모델로 분할하는 기능을 지원하지만 이 튜토리얼에서는 이 기능을 사용하지 않습니다.

      2. 최소 컴퓨팅 노드 수 필드에 1을 입력합니다.

      3. 머신 유형 드롭다운 목록의 표준 섹션에서 n1-standard-2를 선택합니다.

      4. 완료를 클릭합니다.

    4. 로깅 섹션에서 두 가지 유형의 예측 로깅이 사용 설정되어 있는지 확인합니다.

    계속을 클릭합니다.

  5. 엔드포인트 세부정보 단계에서 엔드포인트가 us-central1 (Iowa)에 배포될 것임을 확인합니다.

    고객 관리 암호화 키(CMEK) 사용 체크박스를 선택하지 마세요. 이 튜토리얼에서는 CMEK를 사용하지 않습니다.

  6. 배포를 클릭하여 엔드포인트를 만들고 모델을 엔드포인트에 배포합니다.

몇 분 후 엔드포인트 테이블의 새 엔드포인트 옆에 이 나타납니다. 동시에 엔드포인트를 성공적으로 만들고 모델을 엔드포인트에 배포했음을 알리는 이메일도 전송됩니다.

Cloud 함수 배포하기

Vertex AI API의 REST 인터페이스에 요청을 전송하여 방금 만든 Vertex AI 엔드포인트에서 예측을 가져올 수 있습니다. 하지만 aiplatform.endpoints.predict 권한이 있는 주 구성원만 온라인 예측 요청을 보낼 수 있습니다. 엔드포인트는 예를 들어 웹 앱을 통해 누구나 요청을 보낼 수 있는 공개 상태로 설정할 수 없습니다.

이 섹션에서는 Cloud Functions에 코드를 배포하여 인증되지 않은 요청을 처리합니다. 이 튜토리얼의 첫 번째 페이지를 읽을 때 다운로드한 샘플 코드의 function/ 디렉터리에는 이 Cloud 함수의 코드가 포함되어 있습니다. 원하는 경우 다음 명령어를 실행하여 Cloud 함수 코드를 탐색합니다.

less function/main.py

함수 배포는 다음 목적으로 사용됩니다.

  • 인증되지 않은 요청을 수신하도록 Cloud 함수를 구성할 수 있습니다. 또한 함수는 기본적으로 편집자 역할이 있는 서비스 계정(Vertex AI 엔드포인트에서 예측을 가져오는 데 필요한 aiplatform.endpoints.predict 권한 포함)을 사용하여 실행됩니다.

  • 또한 이 함수는 요청에 대한 유용한 사전 처리를 수행합니다. Vertex AI 엔드포인트는 학습된 TensorFlow Keras 그래프의 첫 번째 레이어의 형식, 즉 고정 차원의 정규화 부동소수점 수의 텐서로 된 예측 요청을 기대합니다. 함수는 이미지의 URL을 입력으로 받아서 이미지를 이 형식으로 사전 처리한 후에 Vertex AI 엔드포인트로부터 예측을 요청합니다.

Cloud 함수를 배포하려면 다음 안내를 따르세요.

  1. Google Cloud Console의 Vertex AI 섹션에서 엔드포인트 페이지로 이동합니다.

    엔드포인트로 이동

  2. 이전 섹션에서 만든 hello_custom이라는 엔드포인트 행을 찾습니다. 이 행에서 샘플 요청을 클릭하여 샘플 요청 창을 엽니다.

  3. 샘플 요청 창에서 다음 패턴과 일치하는 셸 코드 줄을 찾습니다.

    ENDPOINT_ID="ENDPOINT_ID"
    

    ENDPOINT_ID는 이 특정 엔드포인트를 식별하는 숫자입니다.

    이 코드 줄을 복사하고 Cloud Shell 세션에서 실행하여 ENDPOINT_ID 변수를 설정합니다.

  4. Cloud Shell 세션에서 다음 명령어를 실행하여 Cloud 함수를 배포합니다.

    gcloud functions deploy classify_flower \
      --region=us-central1 \
      --source=function \
      --runtime=python37 \
      --memory=2048MB \
      --trigger-http \
      --allow-unauthenticated \
      --set-env-vars=ENDPOINT_ID=${ENDPOINT_ID}
    

웹 앱을 배포하여 예측 요청 전송

마지막으로 Cloud Storage에서 정적 웹 앱을 호스팅하여 학습된 ML 모델에서 예측을 가져옵니다. 웹 앱은 Cloud 함수로 요청을 보내며 Cloud 함수는 요청을 사전 처리하여 Vertex AI 엔드포인트에서 예측을 가져옵니다.

다운로드한 샘플 코드의 webapp 디렉터리에는 샘플 웹 앱이 포함되어 있습니다. Cloud Shell 세션에서 다음 명령어를 실행하여 웹 앱을 준비하고 배포하세요.

  1. 다음 단계에 따라 명령어에 사용할 몇 가지 셸 변수를 설정합니다.

    PROJECT_ID=PROJECT_ID
    BUCKET_NAME=BUCKET_NAME
    

    다음을 바꿉니다.

  2. 앱을 수정하여 Cloud 함수의 트리거 URL와 함께 제공합니다.

    echo "export const CLOUD_FUNCTION_URL = 'https://us-central1-${PROJECT_ID}.cloudfunctions.net/classify_flower';" \
      > webapp/function-url.js
    
  3. webapp 디렉터리를 Cloud Storage 버킷에 업로드합니다.

    gsutil -m cp -r webapp gs://${BUCKET_NAME}/
    
  4. 방금 업로드한 웹 앱 파일을 공개적으로 읽을 수 있게 하세요.

    gsutil -m acl ch -u AllUsers:R gs://${BUCKET_NAME}/webapp/**
    
  5. 이제 다음 URL로 이동하여 웹 앱을 열고 예측을 가져올 수 있습니다.

    https://storage.googleapis.com/BUCKET_NAME/webapp/index.html
    

    웹 앱을 열고 꽃의 이미지를 클릭하여 ML 모델의 꽃 유형 분류를 확인하세요. 웹 앱은 꽃 유형의 목록과 각 유형의 꽃이 이미지에 포함되었을 확률을 예측으로 제시합니다.

다음 스크린샷에서 웹 앱은 이미 예측 한 개를 수신했으며 다른 예측 요청을 보내는 중입니다.

4개의 꽃 이미지가 표시된 웹 앱. 한 이미지 아래에는 예측 라벨의 확률이 표시됨. 또 다른 이미지는 아래에 로드 표시줄이 있음.

다음 단계

튜토리얼의 마지막 페이지의 설명에 따라 지금까지 만든 리소스 삭제하기