튜토리얼: 분류 모델을 사용하여 객체 테이블에서 추론 실행

이 튜토리얼에서는 공개 데이터 세트의 이미지를 기반으로 객체 테이블을 만든 후 ResNet 50 모델을 사용하여 이 객체 테이블에서 추론을 실행하는 방법을 보여줍니다.

ResNet 50 모델

ResNet 50 모델은 이미지 파일을 분석하고 이미지가 해당 클래스(logits)에 포함될 가능성을 나타내는 벡터 배치를 출력합니다. 자세한 내용은 모델의 TensorFlow Hub 페이지에서 사용량 섹션을 참조하세요.

ResNet 50 모델 입력은 [-1, 224, 224, 3] 형태의 DType float32 텐서를 취합니다. 출력은 [-1, 1024] 형태의 tf.float32 텐서 배열입니다.

필수 권한

  • 데이터 세트를 만들려면 bigquery.datasets.create 권한이 필요합니다.
  • 연결 리소스를 만들려면 다음 권한이 필요합니다.

    • bigquery.connections.create
    • bigquery.connections.get
  • 연결의 서비스 계정에 권한을 부여하려면 다음 권한이 필요합니다.

    • resourcemanager.projects.setIamPolicy
  • 객체 테이블을 만들려면 다음 권한이 필요합니다.

    • bigquery.tables.create
    • bigquery.tables.update
    • bigquery.connections.delegate
  • 버킷을 만들려면 storage.buckets.create 권한이 필요합니다.

  • 모델을 Cloud Storage로 업로드하려면 storage.objects.createstorage.objects.get 권한이 필요합니다.

  • 모델을 BigQuery ML에 로드하려면 다음 권한이 필요합니다.

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
  • 추론을 실행하려면 다음 권한이 필요합니다.

    • 객체 테이블에 대한 bigquery.tables.getData
    • 모델에 대한 bigquery.models.getData
    • bigquery.jobs.create

비용

이 문서에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.

  • BigQuery: You incur storage costs for the object table you create in BigQuery.
  • BigQuery ML: You incur costs for the model you create and the inference you perform in BigQuery ML.
  • Cloud Storage: You incur costs for the objects you store in Cloud Storage.

프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요. Google Cloud를 처음 사용하는 사용자는 무료 체험판을 사용할 수 있습니다.

BigQuery 스토리지 가격 책정에 대한 자세한 내용은 BigQuery 문서에서 스토리지 가격 책정을 참조하세요.

BigQuery ML 가격 책정에 대한 자세한 내용은 BigQuery 문서에서 BigQuery ML 가격 책정을 참조하세요.

Cloud Storage 가격에 대한 자세한 내용은 Cloud Storage 가격 책정 페이지를 참조하세요.

시작하기 전에

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the BigQuery and BigQuery Connection API APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the BigQuery and BigQuery Connection API APIs.

    Enable the APIs

예약 만들기

객체 테이블에서 가져온 모델을 사용하려면 BigQuery Enterprise 또는 Enterprise Plus 버전을 사용하는 예약을 만든 후 QUERY 작업 유형을 사용하는 예약 할당을 만들어야 합니다.

데이터 세트 생성

resnet_inference_test라는 데이터 세트를 만듭니다.

SQL

  1. BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  2. 편집자 창에서 다음 SQL 문을 실행합니다.

    CREATE SCHEMA `PROJECT_ID.resnet_inference_test`;

    PROJECT_ID를 프로젝트 ID로 바꿉니다.

bq

  1. Google Cloud 콘솔에서 Cloud Shell을 활성화합니다.

    Cloud Shell 활성화

  2. bq mk 명령어를 실행하여 데이터 세트를 만듭니다.

    bq mk --dataset --location=us PROJECT_ID:resnet_inference_test

    PROJECT_ID를 프로젝트 ID로 바꿉니다.

연결 만들기

lake-connection이라는 연결을 만듭니다.

콘솔

  1. BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  2. 추가를 클릭한 다음 외부 데이터 소스를 클릭합니다.

  3. 연결 유형 목록에서 BigLake 및 원격 함수(Cloud 리소스)를 선택합니다.

  4. 연결 ID 필드에 lake-connection을 입력합니다.

  5. 연결 만들기를 클릭합니다.

  6. 연결 정보 창에서 서비스 계정 ID 필드의 값을 복사하여 다른 곳에 저장합니다. 연결의 서비스 계정에 권한을 부여하려면 이 정보가 필요합니다.

bq

  1. Cloud Shell에서 bq mk 명령어를 실행하여 연결을 만듭니다.

    bq mk --connection --location=us --connection_type=CLOUD_RESOURCE \
    lake-connection
    
  2. bq show 명령어를 실행하여 연결에 대한 정보를 검색합니다.

    bq show --connection us.lake-connection
    
  3. properties 열에서 serviceAccountId 속성 값을 복사하여 다른 위치에 저장합니다. 연결의 서비스 계정에 권한을 부여하려면 이 정보가 필요합니다.

Cloud Storage 버킷 만들기

모델 파일을 포함하기 위해 Cloud Storage 버킷을 만듭니다.

연결의 서비스 계정에 권한 부여

콘솔

  1. IAM 및 관리자 페이지로 이동합니다.

    IAM 및 관리자로 이동

  2. 액세스 권한 부여를 클릭합니다.

    주 구성원 추가 대화상자가 열립니다.

  3. 새 주 구성원 필드에 앞에서 복사한 서비스 계정 ID를 입력합니다.

  4. 역할 선택 필드에서 Cloud Storage를 선택한 후 스토리지 객체 뷰어를 선택합니다.

  5. 저장을 클릭합니다.

gcloud

Cloud Shell에서 gcloud storage buckets add-iam-policy-binding 명령어를 실행합니다.

gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
--member=serviceAccount:MEMBER \
--role=roles/storage.objectViewer

MEMBER를 앞에서 복사한 서비스 계정 ID로 바꿉니다. BUCKET_NAME을 이전에 만든 버킷의 이름으로 바꿉니다.

자세한 내용은 버킷 수준 정책에 주 구성원 추가를 참조하세요.

객체 테이블 만들기

공개 gs://cloud-samples-data/vision 버킷의 이미지 파일을 기반으로 vision_images라는 객체 테이블을 만듭니다.

SQL

  1. BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  2. 편집자 창에서 다음 SQL 문을 실행합니다.

    CREATE EXTERNAL TABLE resnet_inference_test.vision_images
    WITH CONNECTION `us.lake-connection`
    OPTIONS(
      object_metadata = 'SIMPLE',
      uris = ['gs://cloud-samples-data/vision/*.jpg']
    );

bq

Cloud Shell에서 bq mk 명령어를 실행하여 연결을 만듭니다.

bq mk --table \
--external_table_definition='gs://cloud-samples-data/vision/*.jpg@us.lake-connection' \
--object_metadata=SIMPLE \
resnet_inference_test.vision_images

Cloud Storage에 모델 업로드

모델 파일을 가져와 Cloud Storage에서 사용할 수 있도록 만듭니다.

  1. ResNet 50 모델을 로컬 머신으로 다운로드합니다. 그러면 모델에 대한 saved_model.pb 파일과 variables 폴더가 제공됩니다.
  2. saved_model.pb 파일과 variables 폴더를 이전에 만든 버킷에 업로드합니다.

BigQuery ML에 모델 로드

  1. BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  2. 편집자 창에서 다음 SQL 문을 실행합니다.

    CREATE MODEL `resnet_inference_test.resnet`
    OPTIONS(
      model_type = 'TENSORFLOW',
      model_path = 'gs://BUCKET_NAME/*');

    BUCKET_NAME을 이전에 만든 버킷의 이름으로 바꿉니다.

모델 검사

업로드된 모델을 검사하여 입력 및 출력 필드를 확인합니다.

  1. BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  2. 탐색기 창에서 프로젝트를 펼치고 resnet_inference_test 데이터 세트를 펼친 다음 모델 노드를 펼칩니다.

  3. resnet 모델을 클릭합니다.

  4. 모델 창이 열리면 스키마 탭을 클릭합니다.

  5. 라벨 섹션을 찾습니다. 이렇게 해서 모델에서 출력된 필드를 식별합니다. 이 경우 필드 이름 값은 activation_49입니다.

  6. 기능 섹션을 찾습니다. 이렇게 해서 모델에 입력해야 하는 필드를 식별합니다. ML.DECODE_IMAGE 함수에 대한 SELECT 문에서 이를 참조합니다. 이 경우 필드 이름 값은 input_1입니다.

추론 실행

resnet 모델을 사용하여 vision_images 객체 테이블에서 추론을 실행합니다.

  1. BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  2. 편집자 창에서 다음 SQL 문을 실행합니다.

    SELECT *
    FROM ML.PREDICT(
      MODEL `resnet_inference_test.resnet`,
      (SELECT uri, ML.RESIZE_IMAGE(ML.DECODE_IMAGE(data), 224, 224, FALSE) AS input_1
      FROM resnet_inference_test.vision_images)
    );

    결과는 다음과 비슷하게 표시됩니다.

    -------------------------------------------------------------------------------------------------------------------------------------
    | activation_49           | uri                                                                                           | input_1 |
    ------------------------------------------------------------------------------------------------------------------------------------
    | 1.0254175464297077e-07  | gs://cloud-samples-data/vision/automl_classification/flowers/daisy/21652746_cc379e0eea_m.jpg  | 0.0     |
    ------------------------------------------------------------------------------------------------------------------------------------
    | 2.1671139620593749e-06  |                                                                                               | 0.0     |
    --------------------------                                                                                               -----------
    | 8.346052027263795e-08   |                                                                                               | 0.0     |
    --------------------------                                                                                               -----------
    | 1.159310958342985e-08   |                                                                                               | 0.0     |
    ------------------------------------------------------------------------------------------------------------------------------------
    

삭제

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.