이 페이지에서는 Spanner 데이터베이스에서 머신러닝(ML) 예측을 생성하는 방법을 보여줍니다. ML 예측은 GoogleSQL 및 PostgreSQL 데이터베이스 모두에서 작동합니다.
Spanner Vertex AI 통합은 GoogleSQL용 ML.PREDICT
함수 또는 PostgreSQL용 spanner.ML_PREDICT_ROW
함수를 호출하여 예측을 생성하는 기능을 제공합니다. Spanner Vertex AI 통합에 대한 자세한 내용은 Spanner Vertex AI 통합 개요를 참조하세요.
시작하기 전에
Spanner 인스턴스에서 예측을 생성하려면 먼저 데이터베이스를 준비하고 모델을 선택해야 합니다.
Vertex AI 엔드포인트에 대한 Spanner Vertex AI 통합의 액세스 구성
Spanner는 Spanner가 첫 번째 MODEL DDL 문을 실행할 때 자동으로 서비스 에이전트를 만들고 필요한 권한을 부여합니다. Spanner 데이터베이스와 Vertex AI 엔드포인트가 모두 동일한 프로젝트에 있는 경우 추가 설정이 필요하지 않습니다.
Spanner 프로젝트에 Spanner 서비스 에이전트 계정이 없는 경우 다음 명령어를 실행하여 만듭니다.
gcloud beta services identity create --service=spanner.googleapis.com --project={PROJECT}`
단일 역할 부여에 설명된 단계에 따라 Vertex AI 프로젝트의 Spanner 서비스 에이전트 계정인 service-PROJECT_ID@gcp-sa-spanner.iam.gserviceaccount.com
에 Spanner API Service Agent
역할을 부여합니다.
모델 선택
ML.PREDICT
(GoogleSQL의 경우) 또는 spanner.ML_PREDICT_ROW
(PostgreSQL의 경우) 함수를 사용할 때 ML 모델의 위치를 지정해야 합니다. 선택한 모델은 다음 중 하나일 수 있습니다.
Vertex AI Model Garden에서 실행되는 모델
Spanner 서비스 에이전트가 액세스할 수 있는 IAM 권한이 있는 활성 엔드포인트가 포함된 Vertex AI 모델
Spanner Vertex AI 통합에 대한 자세한 내용은 Spanner Vertex AI 통합 작동 방식을 참조하세요.
예측 생성
선택한 모델의 유형에 따라 예측 생성 단계가 달라집니다.
Vertex AI Model Garden에서 모델 사용
Vertex AI Model Garden의 모델을 사용하여 예측을 생성하려면 Model Garden에서 모델을 선택합니다.
GoogleSQL
ML.PREDICT()
와 함께 모델을 사용하려면 먼저 CREATE MODEL
문을 사용하여 모델을 등록해야 합니다.
CREATE MODEL 'MODEL_NAME'
INPUT (INPUT_COLUMN_NAME INPUT_COLUMN_TYPE)
OUTPUT (OUTPUT_COLUMN_NAME OUTPUT_COLUMN_TYPE)
REMOTE
OPTIONS (
endpoint = '//aiplatform.googleapis.com/projects/PROJECT_ID/locations/LOCATION_ID/publishers/google/models/model_id'
);
다음을 바꿉니다.
MODEL_NAME
: 모델에 지정할 이름INPUT_COLUMN_NAME
: 입력 열의 이름. 예를 들어gemini-pro
모델을 사용하는 경우 입력 열 이름은prompt
입니다.INPUT_COLUMN_TYPE
:INPUT_COLUMN_NAME
의 데이터 유형OUTPUT_COLUMN_NAME
: 출력 열의 이름. 예를 들어gemini-pro
모델을 사용하는 경우 출력 열 이름은content
입니다.OUTPUT_COLUMN_TYPE
:OUTPUT_COLUMN_NAME
의 데이터 유형PROJECT_ID
: Google Cloud 프로젝트의 IDREGION_ID
: 모델이 있는 Google Cloud 리전의 ID(예:us-central1
)MODEL_ID
: 사용할 ML 모델의 ID(예:gemini-pro
)모델에 대한 자세한 내용은 생성형 AI를 위한 모델 API 참조를 확인하세요.
Model Garden에서 선택한 모델과 함께 ML.PREDICT
GoogleSQL 함수를 사용하여 예측을 생성합니다.
SELECT * FROM ML.PREDICT(
MODEL `MODEL_NAME`,
`INPUT_RELATION`[, `PARAMETERS`])
다음을 바꿉니다.
MODEL_NAME
: 모델에 지정할 이름모델에 대한 자세한 내용은 생성형 AI를 위한 모델 API 참조를 확인하세요.
INPUT_RELATION
:TABLE table_name
또는 ML 예측을 실행할 데이터를 제공하는 테이블 또는 서브 쿼리PARAMETERS
:model_id
에서 지원하는 매개변수가 포함된STRUCT
값
SAFE.ML.PREDICT
를 사용하여 예측 오류 대신 null
을 반환할 수도 있습니다. 이는 일부 실패한 예측이 허용되는 대규모 쿼리를 실행하는 경우에 유용합니다.
PostgreSQL
Model Garden에서 선택한 모델과 함께 ML_PREDICT_ROW
PostgreSQL 함수를 사용하여 예측을 생성합니다.
SELECT spanner.ml_predict_row(
'projects/PROJECT_ID/locations/REGION_ID/publishers/google/models/MODEL_ID'::text,
'{
"instances": [ INSTANCES ],
"parameters": { PARAMETERS }
}'::jsonb);
다음을 바꿉니다.
PROJECT_ID
: Google Cloud 프로젝트의 IDREGION_ID
: 모델이 있는 Google Cloud 리전의 ID(예:us-central1
)MODEL_ID
: 사용할 ML 모델의 ID(예:gemini-pro
)모델에 대한 자세한 내용은 생성형 AI를 위한 모델 API 참조를 확인하세요.
INSTANCES
: JSON 형식의 예측 호출의 입력PARAMETERS
: JSON 형식의 예측 호출의 매개변수(선택사항)
이 쿼리는 JSON 응답을 생성합니다. 모델의 JSON 응답 메시지에 대한 자세한 내용은 PredictResponse를 참조하세요.
Vertex AI 모델 엔드포인트 사용
Spanner Vertex AI 통합에서 학습되었거나 다운로드된 모델을 사용하려면 Vertex AI에 모델을 배포해야 합니다. Vertex AI의 엔드포인트에 모델을 배포하는 방법에 대한 자세한 내용은 엔드포인트에 모델 배포를 참조하세요.
GoogleSQL
Vertex AI 엔드포인트의 모델과 함께 ML.PREDICT
GoogleSQL 함수를 사용하여 예측을 생성합니다. ML.PREDICT()
와 함께 모델을 사용하려면 먼저 CREATE MODEL
문을 사용하여 모델을 등록해야 합니다. 배포된 각 모델에는 고유한 스키마가 있습니다. 다음은 분류 및 회귀 개요의 스키마 예시입니다.
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/projects/PROJECT/locations/LOCATION/endpoints/ENDPOINT_ID'
)
다음을 바꿉니다.
PROJECT_ID
: Google Cloud 프로젝트의 IDLOCATION
: 모델이 있는 Google Cloud 리전의 ID(예:us-central1
)ENDPOINT_ID
: 사용할 ML 모델의 ID(예:gemini-pro
)모델에 대한 자세한 내용은 생성형 AI를 위한 모델 API 참조를 확인하세요.
Model Garden에서 선택한 모델과 함께 ML.PREDICT
GoogleSQL 함수를 사용하여 예측을 생성합니다.
SELECT * FROM ML.PREDICT(
`MODEL_ID`,
`INPUT_RELATION`[, `PARAMETERS`])
다음을 바꿉니다.
MODEL_ID
: 사용할 ML 모델의 IDINPUT_RELATION
: ML 예측을 실행할 테이블 또는 서브 쿼리PARAMETERS
:model_name
에서 지원하는 매개변수가 포함된STRUCT
값
이 쿼리는 모델의 모든 출력 열과 입력 관계의 모든 열이 포함된 관계를 생성합니다.
PostgreSQL
Vertex AI 엔드포인트의 모델과 함께 ML.PREDICT
PostgreSQL 함수를 사용하여 예측을 생성합니다.
SELECT spanner.ml_predict_row(
'projects/PROJECT_ID/locations/REGION_ID/endpoints/ENDPOINT_ID'::text,
'{
"instances": [ INSTANCES ],
"parameters": { PARAMETERS }
}'::jsonb);
```
Replace the following:
PROJECT_ID
: 모델이 있는 Google Cloud 프로젝트의 IDREGION_ID
: 모델이 있는 Google Cloud 리전의 ID(예:us-central1
)ENDPOINT_ID
: 모델 엔드포인트의 IDINSTANCES
: JSON 형식의 예측 호출의 입력PARAMETERS
: JSON 형식의 예측 호출의 매개변수(선택사항)
이 쿼리는 JSON 응답을 생성합니다. 모델의 JSON 응답 메시지에 대한 자세한 내용은 PredictResponse를 참조하세요.
ML 함수를 사용하여 예측을 생성하는 예시
다음 예시에서는 Model Garden의 gemini-pro 모델을 사용하여 인수로 제공되는 짧은 프롬프트를 기반으로 텍스트를 생성합니다. 이 모델은 Spanner에서 Gemini의 일부로 제공됩니다.
GoogleSQL
gemini-pro
모델 등록
CREATE MODEL GeminiPro
INPUT (prompt STRING(MAX))
OUTPUT (content STRING(MAX))
REMOTE
OPTIONS (
endpoint = '//aiplatform.googleapis.com/projects/PROJECT/locations/LOCATION/publishers/google/models/gemini-pro',
default_batch_size = 1
);
다음을 바꿉니다.
PROJECT
: 프로젝트 IDLOCATION
: Vertex AI를 사용하는 리전
모델 실행
SELECT content
FROM ML.PREDICT(
MODEL GeminiPro,
(SELECT "Is 7 a prime number?" AS prompt),
STRUCT(256 AS maxOutputTokens, 0.2 AS temperature, 40 as topK, 0.95 AS topP)
);
예상 출력
예상되는 결과는 다음과 같습니다.
+--------------------+
| content |
+--------------------+
| "Yes" |
+--------------------+
PostgreSQL
모델 실행
select spanner.ml_predict_row(
'{
"endpoint": "projects/PROJECT_ID/locations/us-central1/publishers/google/models/gemini-pro",
"default_batch_size": 1
}'::jsonb,
'{
"instances":[{"prompt": "Is 7 a prime number?"}],
"parameters":{"maxOutputTokens":256, "topK": 40, "topP":0.96, "temperature":0.2}
}'
);
예상 출력
예상되는 결과는 다음과 같습니다.
+--------------------+
| content |
+--------------------+
| "Yes" |
+--------------------+