목표
이 튜토리얼에서는 다음과 같은 방법을 알아봅니다.
- DDL 문을 사용하여 Vertex AI 서비스에서 호스팅되는 모델을 Cloud Spanner 스키마에 등록합니다.
- Cloud Spanner에 저장된 데이터를 통해 예측을 생성하려면 SQL 쿼리에서 이 모델을 참조합니다.
비용
이 가이드에서는 다음과 같은 비용이 청구될 수 있는 Google Cloud 구성요소를 사용합니다.
- Cloud Spanner
- Vertex AI
Cloud Spanner 비용에 대한 자세한 내용은 Cloud Spanner 가격 책정 페이지를 참조하세요.
Vertex AI 비용에 대한 자세한 내용은 Vertex AI 가격 책정 페이지를 참조하세요.
시작하기 전에
이미 Vertex AI 엔드포인트에 학습되고 배포된 모델이 있는지 확인합니다.
이 튜토리얼에서는 분류 및 회귀 개요에 설명된 단계에 따라 Vertex AI에 배포된 분류 및 회귀 모델을 사용합니다.
ML 모델 학습 및 배포에 대한 일반적인 정보는 Vertex AI 표 형식 데이터 개요를 참조하세요. 하지만 Spanner Vertex AI 통합과 함께 사용하려면 Vertex AI를 사용하여 모델을 학습시킬 필요가 없고 Vertex AI 엔드포인트에만 배포하면 됩니다. 자체 ML 학습 인프라, BigQuery ML 또는 모든 타사 ML 학습 서비스를 포함한 모든 ML 학습 프레임워크 또는 서비스를 사용하여 모델을 학습시킬 수 있습니다. 데이터가 Cloud Spanner에 저장된 경우 통합 쿼리를 사용할 수 있습니다. 또한 TensorFlow Hub와 같은 공개 모델 저장소에 있는 사전 학습된 ML 모델을 배포할 수 있습니다.
Vertex AI 엔드포인트에 대한 Spanner Vertex AI 통합의 액세스 구성
Spanner Vertex AI 통합이 Vertex AI 모델에 액세스하도록 허용하려면 다음과 같이 Cloud Spanner의 서비스 에이전트 계정에 Vertex AI User
역할을 부여합니다.
- 프로젝트에 Cloud Spanner 서비스 에이전트 계정이 없는 경우
gcloud beta services identity create --service=spanner.googleapis.com --project={PROJECT}
명령어를 실행하여 만듭니다. - 다음 튜토리얼에 설명된 단계에 따라 Cloud Spanner 서비스 에이전트 계정
service-{PROJECT}@gcp-sa-spanner.iam.gserviceaccount.com
에Vertex AI User
역할을 부여합니다.
Cloud Spanner 스키마에 원격 모델 등록
Cloud Spanner 스키마에 모델을 등록한 후 Cloud Spanner SQL 쿼리에서 참조할 수 있습니다. 위에서 언급한 튜토리얼을 사용하여 학습되고 배포된 Vertex AI 분류 모델 엔드포인트에 대한 참조를 만들려 다음 DDL 문을 실행합니다.
CREATE MODEL MyClassificationModel
INPUT (
length FLOAT64,
material STRING(MAX),
tag_array ARRAY<STRING(MAX)>
)
OUTPUT (
scores ARRAY<FLOAT64>,
classes ARRAY<STRING(MAX)>
)
REMOTE
OPTIONS (
endpoint = '//aiplatform.googleapis.com.googleapis.com/projects/PROJECT/locations/LOCATION/endpoints/ENDPOINT_ID'
)
여기서 PROJECT
, LOCATION
, ENDPOINT_ID
는 프로젝트 ID, Vertex AI를 사용하는 리전, Vertex AI 엔드포인트의 ID에 해당합니다.
모델 배포 중에 지정한 값과 동일해야 합니다.
length
, material
, tag_array
열은 튜토리얼에서 사용된 샘플 분류 모델의 입력 열(특성)에 해당합니다.
scores
및 classes
열은 AutoML을 사용하여 학습된 모든 분류 모델에 대해 생성되는 표준 출력 열입니다. 다른 모델 유형(예: 회귀) 또는 다른 학습 프레임워크로 학습된 모델의 출력 열은 이름 및 유형이 완전히 다를 수 있습니다. 모델의 입력/출력 열 이름과 유형의 전체 목록은 모델의 메타데이터를 통해 확인하세요.
튜토리얼에서 배포된 회귀 모델에 대한 참조를 만들려면 다음 DDL 문을 사용합니다.
CREATE MODEL MyRegressionModel
INPUT (
age FLOAT64,
sq_ft INT64,
code STRING(MAX)
)
OUTPUT (
value FLOAT64,
lower_bound FLOAT64,
upper_bound FLOAT64
)
REMOTE
OPTIONS (
endpoint = '//aiplatform.googleapis.com.googleapis.com/projects/PROJECT/locations/LOCATION/endpoints/ENDPOINT_ID'
)
여기서 value
, lower_bound
, upper_bound
는 AutoML로 학습된 모든 회귀 모델에 대해 생성되는 표준 열입니다.
ML.PREDICT를 사용하여 ML 제공
DQL/DML 쿼리에서 등록된 모델을 사용하여 예측을 생성하려면 ML.PREDICT 함수를 사용합니다.
예를 들어 튜토리얼에 나와 있는 Vertex AI API에 대한 요청과 유사한 분류 모델 예측 요청을 생성하려면 다음 SQL 쿼리를 사용하면 됩니다.
SELECT scores, classes
FROM ML.PREDICT(
MODEL MyClassificationModel,
SELECT
3.6 AS length,
'cotton' AS material,
['abc','def'] AS tag_array
);
+---------------------------------------------+---------+
| scores | classes |
+---------------------------------------------+---------+
| [0.96771615743637085, 0.032283786684274673] | [0, 1] |
+---------------------------------------------+---------+
Vertex AI 튜토리얼에 설명된 API 요청과 유사한 회귀 모델에서 예측을 생성하려면 다음 쿼리를 사용합니다.
SELECT value, lower_bound, upper_bound
FROM ML.PREDICT(
MODEL MyRegressionModel,
SELECT
3.6 AS age,
5392 AS sq_ft,
'90331' AS code
);
+----------+-------------+-------------+
| value | lower_bound | upper_bound |
+----------+-------------+-------------+
| 65.14233 | 4.6572 | 164.0279 |
+----------+-------------+-------------+
ML.PREDICT 함수를 사용하려면 입력 관계에 대상 모델의 모든 입력 열이 있어야 합니다. 동시에 이 관계에 다른 열이 포함될 수 있습니다. 이 경우 출력 관계로 전달됩니다.
이렇게 하면 예측 프로세스 자체와 관련이 없는 커스텀 식별자를 예측 인스턴스와 연결할 수 있습니다. 예를 들어 아래 예시에서는 입력 관계에 id
열을 추가합니다. id
열의 값은 예측 인스턴스를 고유하게 식별하며, 생성된 예측 출력 행을 예측 입력 행과 연결하는 데 사용할 수 있습니다(입력 관계에 행이 여러 개 있는 경우). 일반적으로 age
열에 표시된 대로 입력 관계의 모든 열을 출력 관계에 포함할 수 있습니다.
SELECT id, value, age
FROM ML.PREDICT(
MODEL MyRegressionModel,
SELECT
1 AS id,
3.6 AS age,
5392 AS sq_ft,
'90331' AS code
);
+----+----------+-----+
| id | value | age |
+----+----------+-----+
| 1 | 65.14233 | 3.6 |
+----+----------+-----+