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 URL을 입력하여 BigQuery 콘솔로 바로 이동합니다.

4. 데이터 준비

이 사용 사례에서는 Google BigQuery 공개 데이터 세트의 github_repos 데이터 세트에 있는 소스 코드 콘텐츠를 사용합니다. 이를 위해 BigQuery 콘솔에서 'github_repos'를 검색하고 Enter 키를 누릅니다. 검색 결과로 나열되는 데이터 세트의 옆에 있는 별표를 클릭합니다. 그런 다음 공개 데이터 세트의 데이터 세트만 표시되도록 '별표표시된 리소스만 표시' 옵션을 클릭합니다.

dc6bf1e2fa6bba8a.png

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

e021c689c56abf22.png

5. BigQuery 데이터세트 만들기

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

'미국' 리전(또는 원하는 리전)에 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 및 원격 함수'를 선택하고 연결 ID로 'llm-conn'을 제공합니다.

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

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

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

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 제품 문서를 참고하세요.