모델 엔드포인트 관리를 사용하여 원격 AI 모델 등록 및 호출

이 페이지에서는 모델을 사용하여 예측을 호출하거나 임베딩을 생성한 후 모델 엔드포인트 관리에 모델 엔드포인트를 등록하는 방법을 설명합니다.

google_ml.create_model() 함수에 관한 자세한 내용은 모델 엔드포인트 관리 참조를 참고하세요.

시작하기 전에

확장 프로그램 사용 설정

  1. 인스턴스의 google_ml_integration.enable_model_support 데이터베이스 플래그를 on로 설정합니다. 데이터베이스 플래그 설정에 관한 자세한 내용은 데이터베이스 플래그 구성을 참고하세요.

  2. psql 클라이언트 또는 Cloud SQL 스튜디오를 사용하여 기본 인스턴스에 연결합니다.

  3. 다음 명령어를 실행하여 google_ml_integration 확장 프로그램이 버전 1.4.2로 업데이트되었는지 확인합니다.

        ALTER EXTENSION google_ml_integration UPDATE TO '1.4.2'
    
  4. psql를 사용하여 google_ml_integration 버전 1.4.2 확장 프로그램을 추가합니다.

      CREATE EXTENSION google_ml_integration VERSION '1.4.2';
    
  5. 선택사항: 모델 메타데이터를 관리할 수 있는 권한을 최고 관리자가 아닌 PostgreSQL 사용자에게 부여합니다.

      GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA google_ml TO NON_SUPER_USER;
    

    NON_SUPER_USER를 수퍼가 아닌 PostgreSQL 사용자 이름으로 바꿉니다.

인증 설정

다음 섹션에서는 Google Cloud 내에서 호스팅되는 Vertex AI 모델 엔드포인트 또는 모델 엔드포인트를 추가하기 전에 인증을 설정하는 방법을 보여줍니다.

Vertex AI 인증 설정

Google Vertex AI 모델 엔드포인트를 사용하려면 데이터베이스에 연결하는 데 사용하는 IAM 기반 Cloud SQL 서비스 계정에 Vertex AI 권한을 추가해야 합니다. Vertex AI와의 통합에 관한 자세한 내용은 Vertex AI와 Cloud SQL 통합을 참고하세요.

맞춤 호스팅 모델의 인증 설정

이 섹션에서는 Secret Manager를 사용하는 경우 인증을 설정하는 방법을 설명합니다. Vertex AI 모델 엔드포인트를 제외한 모든 모델의 경우 API 키 또는 보유자 토큰을 Secret Manager에 저장할 수 있습니다.

모델 엔드포인트가 Secret Manager를 통한 인증을 처리하지 않는 경우 이 섹션은 선택사항입니다. 예를 들어 모델 엔드포인트에서 HTTP 헤더를 사용하여 인증 정보를 전달하거나 인증을 전혀 사용하지 않는 경우 이 섹션의 단계를 완료하지 마세요.

API 키 또는 보유자 토큰을 만들고 사용하려면 다음 단계를 완료하세요.

  1. Secret Manager에서 보안 비밀을 만듭니다. 자세한 내용은 보안 비밀 만들기 및 보안 비밀 버전 액세스를 참고하세요.

    보안 비밀 이름과 보안 비밀 경로는 google_ml.create_sm_secret() SQL 함수에 사용됩니다.

  2. Cloud SQL 인스턴스에 보안 비밀에 액세스할 권한을 부여합니다.

      gcloud secrets add-iam-policy-binding SECRET_ID \
          --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \
          --role="roles/secretmanager.secretAccessor"
    

    다음을 바꿉니다.

    • SECRET_ID: Secret Manager의 보안 비밀 ID입니다.
    • SERVICE_ACCOUNT_EMAIL: IAM 기반 Cloud SQL 서비스 계정의 이메일 주소입니다. 이 이메일 주소를 찾으려면 gcloud sql instances describe INSTANCE_NAME 명령어를 사용하고 INSTANCE_NAME을 인스턴스의 이름으로 바꿉니다. serviceAccountEmailAddress 매개변수 옆에 표시되는 값은 이메일 주소입니다.

기본 지원되는 텍스트 임베딩 모델

이 섹션에서는 모델 엔드포인트 관리를 위해 모델 엔드포인트를 등록하는 방법을 보여줍니다.

Vertex AI 임베딩 모델

모델 엔드포인트 관리는 Vertex AI의 모든 버전의 text-embedding-gecko 모델을 기본적으로 지원합니다. 정규화된 이름을 사용하여 모델 버전을 textembedding-gecko@001 또는 textembedding-gecko@002로 설정합니다.

textembedding-geckotextembedding-gecko@001 모델 엔드포인트 ID는 모두 모델 엔드포인트 관리에 사전 등록되어 있으므로 둘 중 하나를 모델 ID로 직접 사용할 수 있습니다. 이러한 모델의 경우 확장 프로그램이 기본 변환 함수를 자동으로 설정합니다.

쿼리하는 Cloud SQL 인스턴스와 Vertex AI 모델이 모두 동일한 리전에 있는지 확인합니다.

textembedding-gecko@002 모델 엔드포인트를 등록하려면 create_model 함수를 호출합니다.

  CALL
    google_ml.create_model(
      model_id => 'textembedding-gecko@002',
      model_provider => 'google',
      model_qualified_name => 'textembedding-gecko@002',
      model_type => 'text_embedding',
      model_auth_type => 'cloudsql_service_agent_iam');

커스텀 호스팅 텍스트 임베딩 모델

이 섹션에서는 Google Cloud 내 네트워크에 호스팅된 맞춤 모델 엔드포인트를 등록하는 방법을 보여줍니다.

맞춤 호스팅 텍스트 삽입 모델 엔드포인트를 추가하려면 변환 함수와 원하는 경우 맞춤 HTTP 헤더를 만들어야 합니다. 반면 맞춤 호스팅된 일반 모델 엔드포인트를 추가하려면 선택적으로 맞춤 HTTP 헤더를 생성하고 모델 요청 URL을 설정해야 합니다.

다음 예에서는 Google Cloud 내에서 호스팅되는 Cymbal에서 호스팅하는 custom-embedding-model 텍스트 임베딩 모델 엔드포인트를 추가합니다. cymbal_text_input_transformcymbal_text_output_transform 변환 함수는 모델의 입력 및 출력 형식을 예측 함수의 입력 및 출력 형식으로 변환하는 데 사용됩니다.

맞춤 호스팅 텍스트 임베딩 모델 엔드포인트를 등록하려면 다음 단계를 완료하세요.

  1. Secret Manager에 저장된 보안 비밀을 호출합니다.

    CALL
      google_ml.create_sm_secret(
        secret_id => 'SECRET_ID',
        secret_path => 'projects/project-id/secrets/SECRET_MANAGER_SECRET_ID/versions/VERSION_NUMBER');
    

    다음을 바꿉니다.

    • SECRET_ID: 설정하고 나중에 모델 엔드포인트를 등록할 때 사용하는 보안 비밀 ID입니다(예: key1).
    • SECRET_MANAGER_SECRET_ID: 보안 비밀을 만들 때 Secret Manager에 설정된 보안 비밀 ID입니다.
    • PROJECT_ID: Google Cloud 프로젝트의 ID입니다.
    • VERSION_NUMBER: 보안 비밀 ID의 버전 번호입니다.
  2. 텍스트 임베딩 모델 엔드포인트의 예측 함수에 관한 다음 서명을 기반으로 입력 및 출력 변환 함수를 만듭니다. 변환 함수를 만드는 방법에 관한 자세한 내용은 변환 함수 예를 참고하세요.

    다음은 custom-embedding-model 텍스트 임베딩 모델 엔드포인트에만 해당하는 변환 함수의 예입니다.

    -- Input Transform Function corresponding to the custom model endpoint
    CREATE OR REPLACE FUNCTION cymbal_text_input_transform(model_id VARCHAR(100), input_text TEXT)
    RETURNS JSON
    LANGUAGE plpgsql
    AS $$
    DECLARE
      transformed_input JSON;
      model_qualified_name TEXT;
    BEGIN
      SELECT json_build_object('prompt', json_build_array(input_text))::JSON INTO transformed_input;
      RETURN transformed_input;
    END;
    $$;
    -- Output Transform Function corresponding to the custom model endpoint
    CREATE OR REPLACE FUNCTION cymbal_text_output_transform(model_id VARCHAR(100), response_json JSON)
    RETURNS REAL[]
    LANGUAGE plpgsql
    AS $$
    DECLARE
      transformed_output REAL[];
    BEGIN
      SELECT ARRAY(SELECT json_array_elements_text(response_json->0)) INTO transformed_output;
      RETURN transformed_output;
    END;
    $$;
    
  3. create model 함수를 호출하여 맞춤 임베딩 모델 엔드포인트를 등록합니다.

    CALL
      google_ml.create_model(
        model_id => 'MODEL_ID',
        model_request_url => 'REQUEST_URL',
        model_provider => 'custom',
        model_type => 'text_embedding',
        model_auth_type => 'secret_manager',
        model_auth_id => 'SECRET_ID',
        model_qualified_name => 'MODEL_QUALIFIED_NAME',
        model_in_transform_fn => 'cymbal_text_input_transform',
        model_out_transform_fn => 'cymbal_text_output_transform');
    

    다음을 바꿉니다.

    • MODEL_ID: 필수 항목입니다. 정의한 모델 엔드포인트의 고유 ID입니다 (예: custom-embedding-model). 이 모델 ID는 모델 엔드포인트가 임베딩을 생성하거나 예측을 호출하는 데 필요한 메타데이터에 대해 참조됩니다.
    • REQUEST_URL: 필수 항목입니다. 맞춤 텍스트 임베딩 및 일반 모델 엔드포인트를 추가할 때의 모델별 엔드포인트입니다(예: https://cymbal.com/models/text/embeddings/v1). 내부 IP 주소를 통해 모델 엔드포인트에 액세스할 수 있는지 확인합니다. 모델 엔드포인트 관리는 외부 IP 주소를 지원하지 않습니다.
    • MODEL_QUALIFIED_NAME: 모델 엔드포인트에서 정규화된 이름을 사용하는 경우 필요합니다. 모델 엔드포인트에 여러 버전이 있는 경우의 정규화된 이름입니다.
    • SECRET_ID: 앞의 google_ml.create_sm_secret() 절차에서 사용한 보안 비밀 ID입니다.

일반 모델

이 섹션에서는 기본 제공되지 않는 Vertex AI Model Garden에서 일반 gemini-pro 모델 엔드포인트를 등록하는 방법을 보여줍니다. Google Cloud 내에서 호스팅되는 모든 일반 모델 엔드포인트를 등록할 수 있습니다.

Cloud SQL은 Vertex AI Model Garden을 통해 사용할 수 있는 모델 엔드포인트와 Google Cloud 내 네트워크에 호스팅된 모델 엔드포인트만 지원합니다.

Gemini 모델

다음 예에서는 Vertex AI Model Garden의 gemini-1.0-pro 모델 엔드포인트를 추가합니다.

gemini-1.0-pro 모델 엔드포인트를 등록하려면 create model 함수를 호출합니다.

```sql
CALL
  google_ml.create_model(
    model_id => 'MODEL_ID',
    model_request_url => 'https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/gemini-1.0-pro:streamGenerateContent',
    model_provider => 'google',
    model_auth_type => 'cloudsql_service_agent_iam');
```

Replace the following:
* <code><var>MODEL_ID</var></code>: a unique ID for the model endpoint that you define (for example,<br> `gemini-1`). This model ID is referenced for metadata that the model endpoint needs to generate embeddings or invoke predictions.
* <code><var>PROJECT_ID</var></code>: the ID of your Google Cloud project.

자세한 내용은 일반 모델 엔드포인트의 예측을 호출하는 방법을 참고하세요.

다음 단계