Задание с изображениями и текстом, созданное с использованием библиотеки Gemma.

Посмотреть на ai.google.dev Запустить в Google Colab Запуск в Kaggle Открыть в Vertex AI Посмотреть исходный код на GitHub

Использование изображений в качестве подсказок для моделей Gemma открывает совершенно новые возможности для понимания окружающего мира и решения задач с помощью визуальных данных. Начиная с Gemma 3 в размерах 4B и выше, вы можете использовать данные изображений в качестве части подсказок для получения более богатого контекста и решения более сложных задач.

В этом руководстве показано, как запрашивать изображения у Gemma с помощью библиотеки Gemma для JAX. Библиотека Gemma — это пакет Python, созданный как расширение JAX , позволяющий использовать преимущества производительности фреймворка JAX со значительно меньшим количеством кода.

Настраивать

Для завершения этого руководства вам сначала необходимо выполнить инструкции по настройке Gemma, размещенные на странице настройки Gemma . Инструкции по настройке Gemma показывают, как выполнить следующие действия:

  • Получите доступ к Джемме на kaggle.com .
  • Выберите среду выполнения Colab с достаточными ресурсами для запуска модели Gemma.
  • Сгенерируйте и настройте имя пользователя Kaggle и ключ API.

После завершения настройки Gemma перейдите к следующему разделу, где вы установите переменные среды для вашей среды Colab.

Установите библиотеки

Установите библиотеку Gemma.

pip install -q gemma

Установите переменные среды

Войдите в систему, используя свою учетную запись Kaggle.

# This will prompt you to enter your Kaggle API token
import kagglehub
kagglehub.login()
VBox(children=(HTML(value='<center> <img\nsrc=https://www.kaggle.com/static/images/site-logo.png\nalt=\'Kaggle…
Kaggle credentials set.
Warning: Looks like you're using an outdated `kagglehub` version (installed: 0.3.13), please consider upgrading to the latest version (0.4.1).
Kaggle credentials successfully validated.

Настройте среду JAX на использование всего пространства памяти графического процессора.

import os
os.environ["XLA_PYTHON_CLIENT_MEM_FRACTION"]="1.00"

Импорт пакетов

Импортируйте библиотеку Gemma и дополнительные вспомогательные библиотеки.

# Common imports
import os
import jax
import jax.numpy as jnp
import tensorflow_datasets as tfds

# Gemma imports
from gemma import gm

Настройте модель

Выберите и настройте модель Gemma для использования, включая токенизатор, архитектуру модели и контрольные точки. Библиотека Gemma поддерживает все официальные версии модели от Google. Для обработки изображений в рамках вашего запроса необходимо использовать Gemma3Tokenizer и модель Gemma 3 или более поздней версии.

Для настройки модели выполните следующий код:

tokenizer = gm.text.Gemma3Tokenizer()

model = gm.nn.Gemma3_4B()

params = gm.ckpts.load_params(gm.ckpts.CheckpointPath.GEMMA3_4B_IT)
WARNING:absl:Provided metadata contains unknown key custom. Adding it to custom_metadata.

Сгенерировать текст с помощью текста

Начните с ввода текста в качестве подсказки. Библиотека Gemma предоставляет функцию Sampler для простого ввода текста в подсказку.

sampler = gm.text.Sampler(
    model=model,
    params=params,
    tokenizer=tokenizer,
)

sampler.sample('Roses are red.', max_new_tokens=30)
'\nViolets are blue.\nI love you,\nAnd I want you too.\n\n---\n\nThis is a classic, simple, and'

Измените подсказку и максимальное количество токенов, чтобы получить другой результат.

Генерация текста с изображениями

После того, как текстовая подсказка заработает, вы сможете добавлять к ней изображения. Убедитесь, что вы настроили Gemma 3 или более позднюю модель (4B или выше) и настроили Gemma3Tokenizer .

Загрузить изображение

Загрузка изображения из источника данных или локального файла. Следующий код показывает, как загрузить изображение из источника данных TensorFlow:

ds = tfds.data_source('oxford_flowers102', split='train')
image = ds[0]['image']

# display the image
image
WARNING:absl:Variant folder /root/tensorflow_datasets/oxford_flowers102/2.1.1 has no dataset_info.json
Downloading and preparing dataset Unknown size (download: Unknown size, generated: Unknown size, total: Unknown size) to /root/tensorflow_datasets/oxford_flowers102/2.1.1...
Dl Completed...: 0 url [00:00, ? url/s]
Dl Size...: 0 MiB [00:00, ? MiB/s]
Extraction completed...: 0 file [00:00, ? file/s]
Generating splits...:   0%|          | 0/3 [00:00<?, ? splits/s]
Generating train examples...: 0 examples [00:00, ? examples/s]
Shuffling /root/tensorflow_datasets/oxford_flowers102/incomplete.2TXIHE_2.1.1/oxford_flowers102-train.array_re…
Generating test examples...: 0 examples [00:00, ? examples/s]
Shuffling /root/tensorflow_datasets/oxford_flowers102/incomplete.2TXIHE_2.1.1/oxford_flowers102-test.array_rec…
Generating validation examples...: 0 examples [00:00, ? examples/s]
Shuffling /root/tensorflow_datasets/oxford_flowers102/incomplete.2TXIHE_2.1.1/oxford_flowers102-validation.arr…
Dataset oxford_flowers102 downloaded and prepared to /root/tensorflow_datasets/oxford_flowers102/2.1.1. Subsequent calls will reuse this data.

png

Подготовьте запрос с использованием данных изображения.

При вводе данных изображения в качестве запроса, вы добавляете специальный тег <start_of_image> , чтобы включить изображение вместе с текстом запроса. Затем вы кодируете запрос данными изображения, используя объект tokenizer , чтобы подготовить его к запуску с моделью.

prompt = """<start_of_turn>user
Describe the contents of this image.

<start_of_image>

<end_of_turn>
<start_of_turn>model
"""

Если вы хотите использовать в подсказке более одного изображения, необходимо добавить тег <start_of_image> для каждого изображения, включенного в подсказку.

Запустите командную строку с данными изображения.

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

sampler = gm.text.Sampler(
    model=model,
    params=params,
    tokenizer=tokenizer,
)

out = sampler.sample(prompt, images=image, max_new_tokens=500)
print(out)
/usr/local/lib/python3.12/dist-packages/jax/_src/ops/scatter.py:108: FutureWarning: scatter inputs have incompatible types: cannot safely cast value from dtype=float32 to dtype=bfloat16 with jax_numpy_dtype_promotion='standard'. In future JAX releases this will result in an error.
  warnings.warn(
Here's a description of the image's contents:

**Subject:** The image features a close-up shot of a water lily in full bloom.

**Details:**

*   **Flower:** The lily is predominantly white with a delicate pink hue at the base of the petals. It has a striking, star-like shape with pointed petals that curve upwards.
*   **Center:** The flower's center is a vibrant yellow, with prominent stamens extending outwards. There are a few water droplets clinging to the petals.
*   **Stem and Pads:** The lily is resting on a dark, textured stem and broad, paddle-shaped pads that are characteristic of water lilies.
*   **Background:** The background is completely black, creating a dramatic contrast and isolating the flower, making it the clear focal point.

**Overall Impression:** The image has a serene and elegant feel, emphasizing the beauty and detail of the water lily. The dark background and lighting create a sense of depth and highlight the flower's form.<end_of_turn>

В качестве альтернативы вы можете использовать функцию gm.text.ChatSampler() для генерации ответа без необходимости использования тегов <start_of_turn> . Для получения более подробной информации см. документацию библиотеки Gemma для JAX .

Следующие шаги

Библиотека Gemma предоставляет гораздо больше дополнительных функций. Для получения более подробной информации см. следующие дополнительные ресурсы:

Библиотека Gemma для JAX предоставляет дополнительные возможности, включая LoRA, шардинг, квантование и многое другое. Более подробную информацию см. в документации библиотеки Gemma . Если у вас есть какие-либо отзывы или проблемы с использованием библиотеки Gemma, отправьте их через интерфейс Issues в репозитории.