LLM только для SQL с BigQuery ML с использованием Vertex AI PaLM API

1. Введение

В этом практическом занятии я описал шаги по суммированию исходного кода из репозиториев GitHub и определению языка программирования в репозитории с использованием Vertex AI Large Language Model for text generation ( text-bison ) в качестве удаленной функции в BigQuery. Благодаря проекту GitHub Archive Project у нас теперь есть полный снимок более 2,8 миллионов репозиториев с открытым исходным кодом GitHub в общедоступных наборах данных Google BigQuery . Список используемых сервисов:

  1. BigQuery ML
  2. Vertex AI PaLM API

Что вы построите

Вы создадите

  • Набор данных BigQuery для хранения модели.
  • Модель BigQuery, которая предоставляет API Vertex AI PaLM в качестве удаленной функции.
  • Внешнее соединение для установления связи между BigQuery и Vertex AI.

2. Требования

  • Браузер, например Chrome или Firefox.
  • Проект Google Cloud с включенной функцией выставления счетов.

3. Прежде чем начать

  1. В консоли Google Cloud на странице выбора проекта выберите или создайте проект Google Cloud.
  2. Убедитесь, что для вашего облачного проекта включена функция выставления счетов. Узнайте, как проверить, включена ли функция выставления счетов для проекта.
  3. Убедитесь, что все необходимые API (BigQuery API, Vertex AI API, BigQuery Connection API) включены .
  4. Вы будете использовать Cloud Shell — среду командной строки, работающую в Google Cloud и поставляемую с предустановленным пакетом bq . Для получения информации о командах и использовании gcloud обратитесь к документации.

В консоли Cloud Console нажмите кнопку «Активировать Cloud Shell» в правом верхнем углу:

51622c00acec2fa.png

Если ваш проект не задан, используйте следующую команду для его установки:

gcloud config set project <YOUR_PROJECT_ID>
  1. Перейдите непосредственно в консоль BigQuery , введя в браузере следующий URL-адрес: https://console.cloud.google.com/bigquery

4. Подготовка данных

В данном примере мы используем исходный код из набора данных github_repos в общедоступных наборах данных Google BigQuery . Для этого в консоли BigQuery найдите "github_repos" и нажмите Enter. Щелкните звездочку рядом с набором данных, который отображается в результатах поиска. Затем щелкните параметр "ПОКАЗАТЬ ТОЛЬКО ПОЗВЕЗДОЧНЫЕ", чтобы увидеть только этот набор данных из общедоступных наборов данных.

dc6bf1e2fa6bba8a.png

Разверните таблицы в наборе данных, чтобы просмотреть схему и предварительный просмотр данных. Мы будем использовать таблицу sample_contents, которая содержит только выборку (10%) от полных данных таблицы contents. Вот предварительный просмотр данных:

e021c689c56abf22.png

5. Создание набора данных BigQuery

Набор данных BigQuery представляет собой коллекцию таблиц. Все таблицы в наборе данных хранятся в одном и том же месте . Вы также можете добавить пользовательские элементы управления доступом, чтобы ограничить доступ к набору данных и его таблицам.

Создайте набор данных в регионе "США" (или любом другом регионе по вашему выбору) с именем bq_llm.

c67e9f929629739a.png

В этом наборе данных будет размещена модель машинного обучения, которую мы создадим на следующих этапах. Обычно данные, используемые в приложении машинного обучения, также хранятся в таблице в этом же наборе данных, однако в нашем случае данные уже находятся в общедоступном наборе данных BigQuery, и мы будем ссылаться на него напрямую из нашего нового набора данных по мере необходимости. Если вы хотите выполнить этот проект со своим собственным набором данных, хранящимся в CSV-файле (или любом другом файле), вы можете загрузить свои данные в набор данных BigQuery в таблицу, выполнив команду ниже в терминале Cloud Shell:

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

6. Создание внешнего соединения

Создайте внешнее подключение (включите API подключения BQ, если это еще не сделано) и запишите идентификатор учетной записи службы из сведений о конфигурации подключения:

  1. Нажмите кнопку +ДОБАВИТЬ на панели «Обозреватель BigQuery» (в левой части консоли BigQuery) и выберите «Подключение к внешним источникам данных» в списке популярных источников.
  2. Выберите тип подключения «BigLake и удаленные функции» и укажите «llm-conn» в качестве идентификатора подключения.

6b75042881eaec5f.png

  1. После установления соединения запишите учетную запись службы, сгенерированную в параметрах конфигурации соединения.

7. Предоставить разрешения

На этом этапе мы предоставим учетной записи службы права доступа к сервису Vertex AI:

Откройте IAM и добавьте учетную запись службы, скопированную после создания внешнего подключения, в качестве основного пользователя, затем выберите роль «Пользователь Vertex AI».

ff8e1d730879f972.png

8. Создайте удалённую модель машинного обучения.

Создайте удалённую модель, представляющую собой размещённую большую языковую модель 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');

Эта функция создает модель с именем llm_model в наборе данных bq_llm, которая использует API CLOUD_AI_LARGE_LANGUAGE_MODEL_V1 от Vertex AI в качестве удаленной функции. Выполнение этой операции займет несколько секунд.

9. Сгенерируйте текст, используя модель машинного обучения.

После создания модели используйте её для генерации, обобщения или классификации текста.

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. Атрибуты безопасности представляют собой встроенный фильтр содержимого с регулируемым порогом, который включен в API Vertex AI Palm для предотвращения любых непредвиденных или неожиданных ответов от большой языковой модели — ответ блокируется, если он нарушает порог безопасности.

ML.GENERATE_TEXT — это конструкция, используемая в BigQuery для доступа к Vertex AI LLM для выполнения задач генерации текста.

CONCAT добавляет ваш оператор PROMPT и запись в базу данных.

github_repos — это имя набора данных, а sample_contents — имя таблицы, содержащей данные, которые мы будем использовать в дизайне задания.

Температура — это параметр, позволяющий контролировать случайность реакции: чем ниже температура, тем лучше с точки зрения релевантности.

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. В диалоговом окне введите идентификатор проекта, а затем нажмите «Завершить», чтобы удалить проект.

12. Поздравляем!

Поздравляем! Вы успешно использовали Vertex AI Text Generation LLM программным способом для проведения текстового анализа ваших данных с помощью SQL-запросов. Для получения дополнительной информации о доступных моделях ознакомьтесь с документацией по продукту Vertex AI LLM .