Vertex AI PaLM API를 사용하는 BigQuery ML과 SQL 전용 LLM

1. 소개

이 Codelab에서는 텍스트 생성을 위한 Vertex AI 대규모 언어 모델 ( text-bison)을 BigQuery에서 호스팅된 원격 함수로 사용하여 GitHub 저장소의 소스 코드를 요약하고 저장소의 프로그래밍 언어를 식별하는 단계를 나열했습니다. GitHub Archive Project 덕분에 이제 Google BigQuery 공개 데이터 세트에 280만 개 이상의 오픈소스 GitHub 저장소에 대한 전체 스냅샷이 생겼습니다. 사용되는 서비스 목록은 다음과 같습니다.

  1. BigQuery ML
  2. Vertex AI PaLM API

빌드할 항목

생성할 항목:

  • 모델을 포함할 BigQuery 데이터 세트
  • Vertex AI PaLM API를 원격 함수로 호스팅하는 BigQuery 모델
  • BigQuery와 Vertex AI 간의 연결을 설정하기 위한 외부 연결

2. 요구사항

  • 브라우저(Chrome 또는 Firefox 등)
  • 결제가 사용 설정된 Google Cloud 프로젝트

3. 시작하기 전에

  1. Google Cloud 콘솔의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.
  2. Cloud 프로젝트에 결제가 사용 설정되어 있어야 하므로 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.
  3. 필요한 모든 API (BigQuery API, Vertex AI API, BigQuery Connection API)가 사용 설정되어 있는지 확인합니다.
  4. bq가 사전 로드되어 제공되는 Google Cloud에서 실행되는 명령줄 환경인 Cloud Shell을 사용합니다. gcloud 명령어 및 사용법은 문서를 참조하세요.

Cloud 콘솔에서 오른쪽 상단에 있는 Cloud Shell 활성화를 클릭합니다.

51622c00acec2fa.png

프로젝트가 설정되지 않은 경우 다음 명령어를 사용하여 설정합니다.

gcloud config set project <YOUR_PROJECT_ID>
  1. 브라우저에 https://console.cloud.google.com/bigquery를 입력하여 직접 BigQuery 콘솔로 이동합니다.

4. 데이터 준비

이 사용 사례에서는 Google BigQuery 공개 데이터 세트의 github_repos 데이터 세트에 있는 소스 코드 콘텐츠를 사용합니다. 이를 사용하려면 BigQuery 콘솔에서 'github_repos'를 검색합니다. Enter를 누릅니다 검색 결과로 나열되는 데이터 세트의 옆에 있는 별표를 클릭합니다. 그런 다음 '별표표시된 항목만 표시'를 클릭합니다. 공개 데이터 세트의 데이터 세트만 볼 수 있습니다.

dc6bf1e2fa6bba8a.png

데이터 세트의 테이블을 확장하여 스키마와 데이터 미리보기를 확인합니다. 여기서는 콘텐츠 테이블의 전체 데이터에서 샘플(10%)만 포함하는 sample_contents를 사용합니다. 데이터의 미리보기는 다음과 같습니다.

e021c689c56abf22.png

5. BigQuery 데이터세트 만들기

BigQuery 데이터 세트는 테이블의 모음입니다. 데이터 세트의 모든 테이블은 동일한 데이터 위치에 저장됩니다. 커스텀 액세스 제어를 연결하여 데이터 세트 및 해당 테이블에 대한 액세스를 제한할 수도 있습니다.

'US' 리전에 데이터 세트 만들기 (또는 원하는 리전으로 지정)을 bq_llm으로 지정할 수 있습니다.

c67e9f929629739a.png

이 데이터 세트에는 다음 단계에서 만들 ML 모델이 있습니다. 또한 일반적으로 ML 애플리케이션에서 사용하는 데이터를 이 데이터 세트 자체의 테이블에 저장합니다. 하지만 사용 사례에서는 데이터가 이미 BigQuery 공개 데이터 세트에 있으므로 필요에 따라 새로 만든 데이터 세트에서 직접 참조하겠습니다. CSV (또는 다른 파일)에 있는 자체 데이터 세트에서 이 프로젝트를 수행하려면 Cloud Shell 터미널에서 아래 명령어를 실행하여 데이터를 BigQuery 데이터 세트에 테이블로 로드하면 됩니다.

bq load --source_format=CSV --skip_leading_rows=1 bq_llm.table_to_hold_your_data \
./your_file.csv \ text:string,label:string

6. 외부 연결 생성 중

외부 연결을 만들고 (아직 설정하지 않은 경우 BQ Connection API를 사용 설정) 연결 구성 세부정보에서 서비스 계정 ID를 기록해 둡니다.

  1. BigQuery 탐색기 창 (BigQuery 콘솔 왼쪽)에서 +추가 버튼을 클릭하고 '외부 데이터 소스에 연결'을 클릭합니다. 목록에 나온 인기 매체에서
  2. 연결 유형을 'BigLake 및 원격 함수'로 선택합니다. 'llm-conn'을 제공합니다. 연결 ID로

6b75042881eaec5f.png

  1. 연결이 생성되면 연결 구성 세부정보에서 생성된 서비스 계정을 기록해 둡니다.

7. 권한 부여

이 단계에서는 서비스 계정에 Vertex AI 서비스에 액세스할 수 있는 권한을 부여합니다.

IAM을 열고 외부 연결을 주 구성원으로 만든 후 복사한 서비스 계정을 추가한 다음 'Vertex AI 사용자'를 선택합니다. 역할

ff8e1d730879f972.png

8. 원격 ML 모델 만들기

호스팅된 Vertex AI 대규모 언어 모델을 나타내는 원격 모델을 만듭니다.

CREATE OR REPLACE MODEL bq_llm.llm_model
  REMOTE WITH CONNECTION `us.llm-conn`
  OPTIONS (remote_service_type = 'CLOUD_AI_LARGE_LANGUAGE_MODEL_V1');

Vertex AI의 CLOUD_AI_LARGE_LANGUAGE_MODEL_V1 API를 원격 함수로 활용하는 bq_llm 데이터 세트에 llm_model이라는 모델을 만듭니다. 완료되는 데 몇 초 정도 걸릴 수 있습니다.

9. ML 모델을 사용하여 텍스트 생성

모델이 생성되면 이 모델을 사용하여 텍스트를 생성, 요약 또는 분류합니다.

SELECT
  ml_generate_text_result['predictions'][0]['content'] AS generated_text,
  ml_generate_text_result['predictions'][0]['safetyAttributes']
    AS safety_attributes,
  * EXCEPT (ml_generate_text_result)
FROM
  ML.GENERATE_TEXT(
    MODEL `bq_llm.llm_model`,
    (
  SELECT
        CONCAT('Can you read the code in the following text and generate a summary for what the code is doing and what language it is written in:', content)
        AS prompt from `bigquery-public-data.github_repos.sample_contents`
          limit 5
    ),
    STRUCT(
      0.2 AS temperature,
      100 AS max_output_tokens));

**설명:

ml_generate_text_result** 는 콘텐츠와 안전 속성을 모두 포함하는 JSON 형식의 텍스트 생성 모델의 응답입니다. a. 콘텐츠는 생성된 텍스트 결과 b를 나타냅니다. 안전 속성은 대규모 언어 모델에서 의도하지 않거나 예상치 못한 응답을 방지하기 위해 Vertex AI Palm API에서 사용 설정된 조정 가능한 기준점이 있는 기본 제공 콘텐츠 필터를 나타냅니다. 안전 기준점을 위반하면 응답이 차단됩니다.

ML.GENERATE_TEXT는 텍스트 생성 작업을 수행하기 위해 BigQuery에서 Vertex AI LLM에 액세스하는 데 사용하는 구조입니다.

CONCAT는 PROMPT 문과 데이터베이스 레코드를 추가합니다.

github_repos는 데이터 세트 이름이고 sample_contents는 프롬프트 설계에 사용할 데이터가 저장된 테이블의 이름입니다.

Temperature는 응답의 무작위성을 제어하기 위한 프롬프트 매개변수로, 관련성 측면에서는 낮을수록 좋습니다.

Max_output_tokens는 응답을 포함할 단어의 수입니다.

쿼리 응답은 다음과 같습니다.

1156f6eecb548cd5.png

10. 쿼리 결과 평면화

쿼리에서 JSON을 명시적으로 디코딩할 필요가 없도록 결과를 평면화해 보겠습니다.

SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `bq_llm.llm_model`,
    (
  SELECT
        CONCAT('Can you read the code in the following text and generate a summary for what the code is doing and what language it is written in:', content)
        AS prompt from `bigquery-public-data.github_repos.sample_contents`
          limit 5
        ),
    STRUCT(
      0.2 AS temperature,
      100 AS max_output_tokens,
      TRUE AS flatten_json_output));

**설명:

Flatten_json_output** 은 불리언을 나타내며, true로 설정되면 JSON 응답에서 추출된 이해 가능한 평면적 텍스트를 반환합니다.

쿼리 응답은 다음과 같습니다.

3b662ef7d3ba9263.png

11. 삭제

이 게시물에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 단계를 따르세요.

  1. Google Cloud 콘솔에서 리소스 관리 페이지로 이동합니다.
  2. 프로젝트 목록에서 삭제하려는 프로젝트를 선택한 후 '삭제'를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 후 '종료'를 클릭하여 프로젝트를 삭제합니다.

12. 축하합니다

축하합니다. Vertex AI 텍스트 생성 LLM을 프로그래매틱 방식으로 사용하여 SQL 쿼리만 사용하는 데이터에 대한 텍스트 분석을 수행했습니다. Vertex AI LLM 제품 문서에서 사용 가능한 모델에 대해 자세히 알아보세요.