튜토리얼: 분류 모델을 사용하여 객체 테이블에서 추론 실행
이 튜토리얼에서는 공개 데이터 세트의 이미지를 기반으로 객체 테이블을 만든 후 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.create
및storage.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.
프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요.
BigQuery 스토리지 가격 책정에 대한 자세한 내용은 BigQuery 문서에서 스토리지 가격 책정을 참조하세요.
BigQuery ML 가격 책정에 대한 자세한 내용은 BigQuery 문서에서 BigQuery ML 가격 책정을 참조하세요.
Cloud Storage 가격에 대한 자세한 내용은 Cloud Storage 가격 책정 페이지를 참조하세요.
시작하기 전에
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the BigQuery and BigQuery Connection API APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the BigQuery and BigQuery Connection API APIs.
데이터 세트 만들기
resnet_inference_test
라는 데이터 세트를 만듭니다.
SQL
BigQuery 페이지로 이동합니다.
편집자 창에서 다음 SQL 문을 실행합니다.
CREATE SCHEMA `PROJECT_ID.resnet_inference_test`;
PROJECT_ID
를 프로젝트 ID로 바꿉니다.
bq
Google Cloud 콘솔에서 Cloud Shell을 활성화합니다.
bq mk
명령어를 실행하여 데이터 세트를 만듭니다.bq mk --dataset --location=us PROJECT_ID:resnet_inference_test
PROJECT_ID
를 프로젝트 ID로 바꿉니다.
연결 만들기
lake-connection
이라는 연결을 만듭니다.
콘솔
BigQuery 페이지로 이동합니다.
데이터 추가를 클릭한 다음 외부 데이터 소스를 클릭합니다.
연결 유형 목록에서 BigLake 및 원격 함수(Cloud 리소스)를 선택합니다.
연결 ID 필드에
lake-connection
을 입력합니다.연결 만들기를 클릭합니다.
연결 정보 창에서 서비스 계정 ID 필드의 값을 복사하여 다른 곳에 저장합니다. 연결의 서비스 계정에 권한을 부여하려면 이 정보가 필요합니다.
bq
Cloud Shell에서
bq mk
명령어를 실행하여 연결을 만듭니다.bq mk --connection --location=us --connection_type=CLOUD_RESOURCE \ lake-connection
bq show
명령어를 실행하여 연결에 대한 정보를 검색합니다.bq show --connection us.lake-connection
properties
열에서serviceAccountId
속성 값을 복사하여 다른 위치에 저장합니다. 연결의 서비스 계정에 권한을 부여하려면 이 정보가 필요합니다.
Cloud Storage 버킷 만들기
모델 파일을 포함하기 위해 Cloud Storage 버킷을 만듭니다.
연결의 서비스 계정에 권한 부여
콘솔
IAM 및 관리자 페이지로 이동합니다.
액세스 권한 부여를 클릭합니다.
주 구성원 추가 대화상자가 열립니다.
새 주 구성원 필드에 앞에서 복사한 서비스 계정 ID를 입력합니다.
역할 선택 필드에서 Cloud Storage를 선택한 후 스토리지 객체 뷰어를 선택합니다.
저장을 클릭합니다.
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
BigQuery 페이지로 이동합니다.
편집자 창에서 다음 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에서 사용할 수 있도록 만듭니다.
- ResNet 50 모델을 로컬 머신으로 다운로드합니다. 그러면 모델에 대한
saved_model.pb
파일과variables
폴더가 제공됩니다. saved_model.pb
파일과variables
폴더를 이전에 만든 버킷에 업로드합니다.
BigQuery ML에 모델 로드
BigQuery 페이지로 이동합니다.
편집자 창에서 다음 SQL 문을 실행합니다.
CREATE MODEL `resnet_inference_test.resnet` OPTIONS( model_type = 'TENSORFLOW', model_path = 'gs://BUCKET_NAME/*');
BUCKET_NAME
을 이전에 만든 버킷의 이름으로 바꿉니다.
모델 검사
업로드된 모델을 검사하여 입력 및 출력 필드를 확인합니다.
BigQuery 페이지로 이동합니다.
탐색기 창에서 프로젝트를 펼치고
resnet_inference_test
데이터 세트를 펼친 다음 모델 노드를 펼칩니다.resnet
모델을 클릭합니다.모델 창이 열리면 스키마 탭을 클릭합니다.
라벨 섹션을 찾습니다. 이렇게 해서 모델에서 출력된 필드를 식별합니다. 이 경우 필드 이름 값은
activation_49
입니다.기능 섹션을 찾습니다. 이렇게 해서 모델에 입력해야 하는 필드를 식별합니다.
ML.DECODE_IMAGE
함수에 대한SELECT
문에서 이를 참조합니다. 이 경우 필드 이름 값은input_1
입니다.
추론 실행
resnet
모델을 사용하여 vision_images
객체 테이블에서 추론을 실행합니다.
BigQuery 페이지로 이동합니다.
편집자 창에서 다음 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 | —------------------------------------------------------------------------------------------------------------------------------------
삭제
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.