AlloyDB Omni에서 원격 AI 모델 등록 및 호출

문서 버전을 선택합니다.

모델을 사용하여 예측을 호출하거나 임베딩을 생성하려면 모델 엔드포인트를 모델 엔드포인트 관리에 등록하세요.

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

모델 엔드포인트를 모델 엔드포인트 관리에 등록하기 전에 모델 엔드포인트에 인증이 필요한 경우 google_ml_integration 확장 프로그램을 사용 설정하고 모델 제공업체에 따라 인증을 설정해야 합니다.

postgres 기본 사용자 이름으로 데이터베이스에 액세스해야 합니다.

확장 프로그램 사용 설정

관련 함수를 사용하려면 먼저 google_ml_integration 확장 프로그램을 추가하고 사용 설정해야 합니다. 모델 엔드포인트 관리를 사용하려면 google_ml_integration 확장 프로그램을 설치해야 합니다.

  1. psql를 사용하여 데이터베이스에 연결합니다.

  2. 선택사항: google_ml_integration 확장 프로그램이 이미 설치되어 있는 경우 최신 버전으로 업데이트하도록 변경합니다.

        ALTER EXTENSION google_ml_integration UPDATE;
    
  3. psql을 사용하여 google_ml_integration 확장 프로그램을 추가합니다.

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

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

    NON_SUPER_USER를 최고 관리자가 아닌 PostgreSQL 사용자 이름으로 바꿉니다.

  5. 데이터베이스에서 모델 엔드포인트 관리를 사용 설정합니다.

      ALTER SYSTEM SET google_ml_integration.enable_model_support=on;
      SELECT pg_reload_conf();
    

인증 설정

다음 섹션에서는 Vertex AI 모델 엔드포인트 또는 다른 제공업체의 모델 엔드포인트를 추가하기 전에 인증을 설정하는 방법을 보여줍니다.

Vertex AI 인증 설정

Google Vertex AI 모델 엔드포인트를 사용하려면 AlloyDB Omni를 설치할 때 사용한 서비스 계정에 Vertex AI 권한을 추가해야 합니다. 자세한 내용은 클라우드 기반 모델을 쿼리하도록 AlloyDB Omni 설치 구성을 참고하세요.

다른 모델 제공업체의 인증 설정

Vertex AI 모델을 제외한 모든 모델의 경우 API 키나 Bearer 토큰을 Secret Manager에 저장할 수 있습니다. 모델 엔드포인트에서 Secret Manager를 통한 인증을 처리하지 않으면 이 단계는 선택사항입니다. 예를 들어 모델 엔드포인트에서 HTTP 헤더를 사용하여 인증 정보를 전달하거나 인증을 전혀 사용하지 않는 경우입니다.

이 섹션에서는 Secret Manager를 사용하는 경우 인증을 설정하는 방법을 설명합니다.

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

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

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

  2. AlloyDB 클러스터에 보안 비밀에 액세스할 수 있는 권한을 부여합니다.

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

    다음을 바꿉니다.

    • SECRET_ID: Secret Manager의 보안 비밀 ID
    • SERVICE_ACCOUNT_ID: 이전 단계에서 만든 서비스 계정의 ID입니다. AlloyDB Omni 설치 중에 사용한 계정과 동일한 계정인지 확인합니다. 여기에는 전체 PROJECT_ID.iam.gserviceaccount.com 접미사가 포함됩니다. 예를 들면 my-service@my-project.iam.gserviceaccount.com입니다.

      프로젝트 수준에서 서비스 계정에 이 역할을 부여할 수도 있습니다. 자세한 내용은 ID 및 액세스 관리 정책 바인딩 추가를 참고하세요.

기본 제공 지원이 포함된 텍스트 임베딩 모델

이 섹션에서는 모델 엔드포인트 관리에서 기본 지원을 제공하는 모델 엔드포인트를 등록하는 방법을 보여줍니다.

Vertex AI 임베딩 모델

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

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

textembedding-gecko@002 모델 엔드포인트 버전을 등록하려면 다음 단계를 완료하세요.

AlloyDB Omni의 경우 클라우드 기반 Vertex AI 모델을 쿼리하도록 AlloyDB Omni를 설정해야 합니다.

  1. google_ml_integration 확장 프로그램 만들기 및 사용 설정

  2. psql를 사용하여 데이터베이스에 연결합니다.

  3. google_ml_integration 확장 프로그램 만들기 및 사용 설정

  4. create model 함수를 호출하여 textembedding-gecko@002 모델 엔드포인트를 추가하세요.

    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 => 'alloydb_service_agent_iam');
    
      The request URL that the function generates refers to the project associated with the AlloyDB Omni service account. If you want to refer to another project, then ensure that you specify the `model_request_url` explicitly.
    

Open AI 텍스트 임베딩 모델

모델 엔드포인트 관리는 OpenAI의 text-embedding-ada-002 모델을 기본적으로 지원합니다.google_ml_integration 확장 프로그램은 기본 변환 함수를 자동으로 설정하고 원격 모델에 대한 호출을 호출합니다.

다음 예시에서는 text-embedding-ada-002 OpenAI 모델 엔드포인트를 추가합니다.

  1. psql를 사용하여 데이터베이스에 연결합니다.
  2. google_ml_integration 확장 프로그램 만들기 및 사용 설정
  3. 인증을 위해 OpenAI API 키를 Secret Manager에 보안 비밀로 추가합니다.
  4. 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의 버전 번호
  5. create model 함수를 호출하여 text-embedding-ada-002 모델 엔드포인트를 등록하세요.

      CALL
        google_ml.create_model(
          model_id => 'MODEL_ID',
          model_provider => 'open_ai',
          model_type => 'text_embedding',
          model_qualified_name => 'text-embedding-ada-002',
          model_auth_type => 'secret_manager',
          model_auth_id => 'SECRET_ID');
    

    다음을 바꿉니다.

    • MODEL_ID: 정의한 모델 엔드포인트의 고유 ID입니다. 이 모델 ID는 모델 엔드포인트가 임베딩을 생성하거나 예측을 호출하는 데 필요한 메타데이터에 대해 참조됩니다.
    • SECRET_ID: 앞의 google_ml.create_sm_secret() 절차에서 사용한 보안 비밀 ID

임베딩을 생성하려면 기본 제공 지원이 포함된 모델 엔드포인트의 임베딩을 생성하는 방법을 참고하세요.

기타 텍스트 임베딩 모델

이 섹션에서는 맞춤 호스팅 텍스트 임베딩 모델 엔드포인트 또는 모델 호스팅 제공업체에서 제공하는 텍스트 임베딩 모델 엔드포인트를 등록하는 방법을 보여줍니다. 모델 엔드포인트 메타데이터에 따라 변환 함수를 추가하거나, HTTP 헤더를 생성하거나, 엔드포인트를 정의해야 할 수 있습니다.

맞춤 호스팅 텍스트 임베딩 모델

이 섹션에서는 변환 함수와 원하는 경우 맞춤 HTTP 헤더를 만들어 커스텀 호스팅 모델 엔드포인트를 등록하는 방법을 보여줍니다. AlloyDB Omni는 호스팅 위치와 관계없이 모든 맞춤 호스팅 모델 엔드포인트를 지원합니다.

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

커스텀 호스팅 텍스트 임베딩 모델 엔드포인트를 등록하려면 다음 단계를 완료합니다.

  1. psql를 사용하여 데이터베이스에 연결합니다.

  2. google_ml_integration 확장 프로그램 만들기 및 사용 설정

  3. 선택사항: 인증을 위해 Secret Manager에 API 키를 보안 비밀로 추가

  4. 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의 버전 번호
  5. 텍스트 임베딩 모델 엔드포인트의 예측 함수에 대한 다음 서명을 기반으로 입력 및 출력 변환 함수를 만드세요. 변환 함수를 만드는 방법에 관한 자세한 내용은 변환 함수 예시를 참고하세요.

    다음은 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;
    $$;
    
  6. 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).
    • MODEL_QUALIFIED_NAME: 모델 엔드포인트가 정규화된 이름을 사용하는 경우 필수입니다. 모델 엔드포인트에 버전이 여러 개 있는 경우의 정규화된 이름입니다.
    • SECRET_ID: 앞의 google_ml.create_sm_secret() 절차에서 사용한 보안 비밀 ID

OpenAI Text Embedding 3 Small 및 Large 모델

모델 엔드포인트에 특화된 임베딩 예측 함수와 변환 함수를 사용하여 OpenAI text-embedding-3-smalltext-embedding-3-large 모델 엔드포인트를 등록할 수 있습니다. 다음 예시에서는 OpenAI text-embedding-3-small 모델 엔드포인트를 등록하는 방법을 보여줍니다.

text-embedding-3-small 임베딩 모델 엔드포인트를 등록하려면 다음 단계를 따르세요.

  1. psql를 사용하여 데이터베이스에 연결합니다.
  2. google_ml_integration 확장 프로그램 만들기 및 사용 설정
  3. 인증을 위해 OpenAI API 키를 Secret Manager에 보안 비밀로 추가합니다. 다른 OpenAI 모델의 보안 비밀을 이미 만든 경우 동일한 보안 비밀을 재사용할 수 있습니다.
  4. 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입니다.
    • SECRET_MANAGER_SECRET_ID: 보안 비밀을 만들 때 Secret Manager에 설정된 보안 비밀 ID
    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • VERSION_NUMBER: 보안 비밀 ID의 버전 번호
  5. 텍스트 임베딩 모델의 예측 함수에 대한 다음 서명을 기반으로 입력 및 출력 변환 함수를 만드세요. 변환 함수를 만드는 방법에 관한 자세한 내용은 변환 함수 예시를 참조하세요. OpenAI 모델 엔드포인트에서 예상하는 입력 및 출력 형식에 대해 알아보려면 임베딩을 참고하세요.

    다음은 text-embedding-ada-002, text-embedding-3-small, text-embedding-3-large OpenAI 텍스트 임베딩 모델 엔드포인트의 변환 함수 예시입니다.

    -- Input Transform Function corresponding to openai_text_embedding model endpoint family
    CREATE OR REPLACE FUNCTION openai_text_input_transform(model_id VARCHAR(100), input_text TEXT)
    RETURNS JSON
    LANGUAGE plpgsql
    AS $$
    #variable_conflict use_variable
    DECLARE
      transformed_input JSON;
      model_qualified_name TEXT;
    BEGIN
      SELECT google_ml.model_qualified_name_of(model_id) INTO model_qualified_name;
      SELECT json_build_object('input', input_text, 'model', model_qualified_name)::JSON INTO transformed_input;
      RETURN transformed_input;
    END;
    $$;
    
    -- Output Transform Function corresponding to openai_text_embedding model endpoint family
    CREATE OR REPLACE FUNCTION openai_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->'data'->0->'embedding')) INTO transformed_output;
      RETURN transformed_output;
    END;
    $$;
    
  6. create model 함수를 호출하여 text-embedding-3-small 임베딩 모델 엔드포인트를 등록하세요.

    CALL
      google_ml.create_model(
        model_id => 'MODEL_ID',
        model_provider => 'open_ai',
        model_type => 'text_embedding',
        model_auth_type => 'secret_manager',
        model_auth_id => 'SECRET_ID',
        model_qualified_name => 'text-embedding-3-small',
        model_in_transform_fn => 'openai_text_input_transform',
        model_out_transform_fn => 'openai_text_output_transform');
    

    다음을 바꿉니다.

    • MODEL_ID: 정의한 모델 엔드포인트의 고유 ID(예: openai-te-3-small) 이 모델 ID는 모델 엔드포인트가 임베딩을 생성하거나 예측을 호출하는 데 필요한 메타데이터에 대해 참조됩니다.
    • SECRET_ID: 앞의 google_ml.create_sm_secret() 절차에서 사용한 보안 비밀 ID

자세한 내용은 기타 텍스트 임베딩 모델 엔드포인트의 임베딩 생성 방법을 참고하세요.

일반 모델

이 섹션에서는 Hugging Face, OpenAI, Vertex AI 또는 기타 제공업체와 같은 호스팅 모델 제공업체에서 사용할 수 있는 일반 모델 엔드포인트를 등록하는 방법을 보여줍니다. 이 섹션에서는 Hugging Face에 호스팅된 일반 모델 엔드포인트와 Vertex AI Model Garden의 일반 gemini-pro 모델을 등록하는 예를 보여줍니다. 이러한 모델에는 기본 지원이 없습니다.

입력과 출력이 JSON 형식인 한 일반 모델 엔드포인트를 등록할 수 있습니다. 모델 엔드포인트 메타데이터에 따라 HTTP 헤더를 생성하거나 엔드포인트를 정의해야 할 수 있습니다.

Hugging Face의 일반 모델

다음 예시에서는 Hugging Face에서 호스팅되는 facebook/bart-large-mnli 맞춤 분류 모델 엔드포인트를 추가합니다.

  1. psql를 사용하여 데이터베이스에 연결합니다.
  2. google_ml_integration 확장 프로그램 만들기 및 사용 설정
  3. 인증을 위해 Secret Manager에 베어러 토큰을 보안 비밀로 추가합니다.
  4. Secret Manager에 저장된 보안 비밀을 호출합니다.

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

    다음을 바꿉니다.

    • SECRET_ID: 설정하고 나중에 모델 엔드포인트를 등록할 때 사용하는 보안 비밀 ID입니다.
    • SECRET_MANAGER_SECRET_ID: 보안 비밀을 만들 때 Secret Manager에 설정된 보안 비밀 ID
    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • VERSION_NUMBER: 보안 비밀 ID의 버전 번호
  5. create model 함수를 호출하여 facebook/bart-large-mnli 모델 엔드포인트를 등록하세요.

    CALL
      google_ml.create_model(
        model_id => 'MODEL_ID',
        model_provider => 'custom',
        model_request_url => 'REQUEST_URL',
        model_qualified_name => 'MODEL_QUALIFIED_NAME',
        model_auth_type => 'secret_manager',
        model_auth_id => 'SECRET_ID');
    

    다음을 바꿉니다.

    • MODEL_ID: 정의한 모델 엔드포인트의 고유 ID(예: custom-classification-model) 이 모델 ID는 모델 엔드포인트가 임베딩을 생성하거나 예측을 호출하는 데 필요한 메타데이터에 대해 참조됩니다.
    • REQUEST_URL: 맞춤 텍스트 임베딩 및 일반 모델 엔드포인트를 추가할 때의 모델별 엔드포인트(예: https://api-inference.huggingface.co/models/facebook/bart-large-mnli).
    • MODEL_QUALIFIED_NAME: 모델 엔드포인트 버전의 정규화된 이름입니다(예: facebook/bart-large-mnli).
    • SECRET_ID: 앞의 google_ml.create_sm_secret() 절차에서 사용한 보안 비밀 ID

Gemini 모델

클라우드 기반 Vertex AI 모델을 쿼리하도록 AlloyDB Omni를 설정해야 합니다.

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

  1. psql를 사용하여 데이터베이스에 연결합니다.
  2. google_ml_integration 확장 프로그램 만들기 및 사용 설정
  3. create model 함수를 호출하여 gemini-1.0-pro 모델을 등록합니다.

    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 => 'alloydb_service_agent_iam');
    

    다음을 바꿉니다.

    • MODEL_ID: 정의한 모델 엔드포인트의 고유 ID(예: gemini-1) 이 모델 ID는 모델 엔드포인트가 임베딩을 생성하거나 예측을 호출하는 데 필요한 메타데이터에 대해 참조됩니다.
    • PROJECT_ID: Google Cloud 프로젝트의 ID입니다.

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

다음 단계