Данные для генеративного искусственного интеллекта с помощью Spanner и Vertex AI Imagen API

1. Введение

В этой лаборатории кода создайте генератор поз на базе искусственного интеллекта, используя Java, Spring Boot, базу данных Cloud Spanner и API Vertex AI Imagen. Пользователь вводит подсказку, и приложение сгенерирует позу на основе этой подсказки. Мы также будем использовать данные из базы данных Spanner, представленные как REST API. Это интересный и познавательный способ продемонстрировать возможности генеративного искусственного интеллекта с помощью Spring Boot в Google Cloud.

Список используемых услуг:

  1. Облачный гаечный ключ
  2. API изображений Vertex AI
  3. Облачный бег

Блок-схема высокого уровня

60192bcbff4c39de.png

Что ты построишь

Вы создадите

  • Приложение Java Spring Boot для данных Spanner как сервисного API.
  • Приложение Java Spring Boot для варианта использования генерации изображений с использованием Imagen.
  • Интерактивный пользовательский интерфейс для быстрого ввода и ответа.

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

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

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

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

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

51622c00acec2fa.png

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

gcloud config set project <YOUR_PROJECT_ID>
  1. Перейдите на страницу Cloud Spanner с активным проектом Google Cloud, чтобы начать работу.

3. Подготовка данных с помощью Spanner

Прежде чем создавать приложение, давайте завершим настройку базы данных, создав экземпляр Cloud Spanner, базу данных и таблицу. Вы можете обратиться к этому блогу , чтобы узнать подробнее о функциях Cloud Spanner, DDL, DML и многом другом. Вы можете выполнить следующие шаги, чтобы создать объекты базы данных, необходимые для этого проекта:

  1. Создайте экземпляр, нажав СОЗДАТЬ ЭКЗЕМПЛЯР на странице экземпляров.
  2. Введите данные, как показано на следующем изображении, и нажмите СОЗДАТЬ:

f869fcbb922027a5.png

  1. После создания на странице обзора экземпляра нажмите СОЗДАТЬ БАЗА ДАННЫХ.
  2. Укажите имя базы данных как «first-spanner-db», введите следующий DDL в раздел «ШАБЛОНЫ DDL» и нажмите «ОТПРАВИТЬ»:
CREATE TABLE Yoga_Poses(
  Pose_Id   INT64 NOT NULL,
  Name  STRING(1024),
  Breath STRING(1024),
  Description STRING(1024)
) PRIMARY KEY(Pose_Id);

База данных и таблица должны быть созданы в результате последнего шага. Теперь давайте вставим несколько строк в таблицу Yoga_Poses, чтобы мы могли приступить к созданию нашего приложения Spring Boot.

  1. Нажмите Spanner Studio на панели «База данных» слева и откройте новую вкладку редактора запросов, как показано на рисунке ниже:

c86774e8fd32eca0.png

  1. Выполните следующие запросы INSERT:
INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(1, 'STAND', 'INHALE AND EXHALE', 
'STAND WITH YOUR FEET HIP WIDTH APART AND ARMS RESTING BY THE SIDES');

INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(2, 'PLANK', 'INHALE OR EXHALE', 
'PLANT YOUR TOES AND PALMS ON THE MAT WITH BODY PARALLEL TO THE GROUND');

INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(3, 'SIT', 'INHALE AND EXHALE', 
'SIT ON THE FLOOR LEGS CROSSED');

INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(4, 'BEND', 'EXHALE', 
'FOLD FORWARD AS YOU STAND, HANDS REACHING TO THE FLOOR');

INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(5, 'PUSH UP', 'EXHALE', 
'PLANK WITH ELBOWS ON MAT');

INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(6, 'SEATED FORWARD BEND', 'EXHALE', 
'FOLD FORWARD AS YOU SIT, HANDS TRYING TO REACH THE FEET');

INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(7, 'LUNGE', 'EXHALE', 
'ONE LEG TO THE FRONT 90 DEGREES TO THE FLOOR AND THE BACK LEG STRAIGHT');

INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(8, 'COURTESY LUNGE', 'INHALE', 
'ONE LEG TO THE FRONT 90 DEGREES TO THE FLOOR AND THE BACK KNEE TOUCHING THE FLOOR');

INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(9, 'BANK BEND', 'INHALE', 
'STAND WITH ARMS UP AND BODY BENT BACKWARDS, ARCHING YOUR SPINE, LOOKING AT THE SKY');

INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(10, 'BICEP ACTION', 'INHALE AND EXHALE', 
'CURL, PRESS AND WORK YOUR BICEPS');

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

4. Создайте REST API с помощью Spring Boot и Spanner для данных позы.

Чтобы ознакомиться с консолью Spring Boot и Google Cloud, посетите этот блог .

  1. Загрузите приложение Spring Boot. Чтобы загрузить это приложение с нуля, подпишитесь на этот блог . Чтобы клонировать из репозитория и начать действовать, просто запустите приведенную ниже команду в терминале облачной оболочки:
git clone https://github.com/AbiramiSukumaran/spanner-springb

В результате на вашем компьютере с облачной оболочкой должен был быть создан проект spanner-springb. Чтобы разобраться в компонентах приложения, пролистайте блог .

  1. Давайте создадим и запустим приложение. Для этого выполните следующие команды из терминала облачной оболочки:
cd spanner-springb

./mvnw package

./mvnw spring-boot:run
  1. Разверните приложение в Cloud Run, чтобы оно было доступно для приложения генератора поз. Для этого выполните следующую команду из терминала облачной оболочки:
gcloud run deploy –source .

Передайте необходимые параметры и убедитесь, что ваше приложение развернуто. Сгенерированный URL-адрес службы должен содержать список данных, созданных в Spanner.

5. Загрузите приложение-генератор поз с помощью Spring Boot, Spanner и Imagen.

На этом этапе мы завершили верхнюю часть блок-схемы, то есть сделали данные Spanner доступными как услугу (REST API). Теперь давайте создадим клиентское приложение, которое вызывает данные гаечного ключа, вызывает API IMAGEN с приглашением и возвращает строку в кодировке Base64 в виде изображения в пользовательский интерфейс.

  1. К настоящему моменту вы уже знакомы со структурой проекта Spring Boot и ее значением. Итак, мы быстро перейдем к клонированию репозитория на ваш компьютер с облачной оболочкой, выполнив приведенную ниже команду в терминале облачной оболочки:
git clone https://github.com/AbiramiSukumaran/genai-posegen

Это должно было создать проект genai-posegen на вашем компьютере с облачной оболочкой. Клонированная структура проекта отображается в редакторе облачной оболочки следующим образом:

b19a94f895f74c62.png

Java-класс PromptController включает вызов службы базы данных, реализацию бизнес-логики, а также вызов генеративного AI API Imagen. Этот класс взаимодействует с шаблонами Thymeleaf, которые обеспечивают интеграцию данных в пользовательский интерфейс. В этом классе есть 3 метода обслуживания: 1) для получения ввода подсказки, 2) для обработки запроса и вызова API Imagen и 3) для обработки ответа imagen.

Prompt и Yoga — это классы POJO, которые содержат поля, методы получения и установки для взаимодействия с API Imagen API и API сервера данных Spanner соответственно.

HTML-файлы Index и getImage в папке шаблонов содержат шаблоны пользовательского интерфейса и имеют зависимости от сценариев JS и CSS в соответствующих папках.

Интеграция API Vertex AI Imagen Для сценария использования изображения мы используем API Imagen Vertex AI в следующем формате:

https://<<region>>- aiplatform.googleapis.com/v1/projects/ <<your-project-id>>/locations/<<region>>/publishers/google/models/imagegeneration:predict

Подробнее о возможностях Imagen можно прочитать здесь . Он возвращает ответ в строковом формате с кодировкой Base64. Чтобы преобразовать его в изображение, мы использовали метод javascript setattribute (в файле getImage.js) для объекта изображения в файле getImage.HTML следующим образом:

poseImage.setAttribute('src', "data:image/jpg;base64," + baseStr64);

Авторизация Для доступа к API Imagen требуется, чтобы у вас была включена аутентификация токена носителя. В нашем случае я использовал JSON-подход Application Default Credentials. Вы можете реализовать это, выполнив приведенную ниже команду из терминала облачной оболочки и следуя инструкциям, которые следуют в терминале:

gcloud auth application-default login

Введите «Y» для аутентификации под своей учетной записью. Разрешите доступ и скопируйте код авторизации, который отображается во всплывающем окне. Как только вы это сделаете, вы получите учетные данные приложения по умолчанию в файле JSON, сохраненном в примерно таком месте: /tmp/tmp.Fh0Gf4yF0V/application_default_credentials.json.

Загрузите файл или скопируйте содержимое файла JSON, выполнив команду cat (cat /tmp/tmp.Fh0Gf4yF0V/application_default_credentials.json) и используйте его в приложении в методе callImagen() класса PromptController.java. Подробнее об аутентификации можно прочитать здесь .

Пользовательский интерфейс Мы использовали Thymeleaf в качестве механизма шаблонов для анализа и рендеринга данных в файлы шаблонов внешнего интерфейса, а также для добавления элегантного дизайна в пользовательский интерфейс. Он похож на HTML, но поддерживает больше атрибутов для работы с визуализированными данными. Файл index.html содержит компоненты дизайна целевой страницы и позволяет пользователю выбрать тему и добавить переопределяющее приглашение для создания желаемого изображения.

6. Сборка и развертывание

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

cd genai-posegen

./mvnw package

./mvnw spring-boot:run

Разверните приложение в Cloud Run, чтобы оно было доступно в облаке. Для этого выполните следующую команду из терминала облачной оболочки в папке проекта:

gcloud run deploy –source .

Передайте необходимые параметры и убедитесь, что ваше приложение развернуто.

7. Демо

После развертывания приложения вы должны увидеть URL-адрес службы в терминале. Нажмите на ссылку и увидите, как ваше приложение для создания изображений поз работает в Google Cloud без сервера!

92bdb22109b2f756.gif

8. Очистка

Чтобы избежать списания средств с вашей учетной записи Google Cloud за ресурсы, используемые в этом посте, выполните следующие действия:

  1. В консоли Google Cloud перейдите на страницу «Управление ресурсами».
  2. В списке проектов выберите проект, который хотите удалить, и нажмите «Удалить».
  3. В диалоговом окне введите идентификатор проекта и нажмите «Завершить работу», чтобы удалить проект.
  4. Если вы не хотите удалять проект, удалите экземпляр Spanner, перейдя к экземпляру, который вы только что создали для этого проекта, и нажмите кнопку «УДАЛИТЬ ЭКЗЕМПЛЯР» в правом верхнем углу страницы обзора экземпляра.
  5. Вы также можете перейти на страницу служб Cloud Run, выбрать службы, созданные в этом проекте, и нажать кнопку «Удалить», чтобы удалить службы.

9. Поздравления

В этом блоге мы смогли использовать полнофункциональное приложение Spring Boot, которое хранит и обрабатывает данные в Cloud Spanner, для создания поз с помощью Imagen API Google Cloud Vertex AI в интерактивном клиентском приложении, развернутом в Cloud Run. В разделе архитектурных диаграмм этого блога вы видите компонент Cloud Functions (Java), который нам так и не пришлось делать? Это можно получить, если вы хотите внести свой вклад. Вы можете реализовать две облачные функции Java для выполнения двух методов, которые можно найти в файле getimage.html: сохранить позу в базе данных и загрузить методы изображения. Ознакомьтесь с документацией Imagen on Vertex AI , чтобы узнать больше о модели.