| | Запустить в Google Colab | | | Посмотреть исходный код на GitHub |
Генерация контента, его обобщение и анализ — это лишь некоторые из задач, которые можно выполнить с помощью открытых моделей Gemma. В этом руководстве показано, как начать работу с Gemma, используя Keras, включая генерацию текстового контента с текстовыми и графическими входными данными. Keras предоставляет реализации для запуска Gemma и других моделей с использованием JAX, PyTorch и TensorFlow. Если вы новичок в Keras, перед началом работы вам может быть полезно прочитать раздел «Начало работы с Keras» .
В Gemma 3 и более поздних моделях поддерживается ввод текста и изображений. Более ранние версии Gemma поддерживали только ввод текста, за исключением некоторых вариантов, включая PaliGemma .
Установите пакеты Keras.
Установите пакеты Python Keras и KerasHub.
pip install -q -U keras keras-hub keras-nlpВыберите бэкэнд
Keras — это высокоуровневый API для глубокого обучения, поддерживающий множество фреймворков и разработанный для простоты и удобства использования. Keras 3 позволяет выбрать бэкенд: TensorFlow, JAX или PyTorch. Все три подойдут для этого руководства. Для этого руководства настройте бэкенд JAX, поскольку он обычно обеспечивает лучшую производительность.
import os
os.environ["KERAS_BACKEND"] = "jax" # Or "tensorflow" or "torch".
os.environ["XLA_PYTHON_CLIENT_MEM_FRACTION"] = "1.00"
Импорт пакетов
Импортируйте пакеты Keras и KerasHub.
import keras
import keras_hub
Модель нагрузки
Keras предоставляет реализации многих популярных архитектур моделей . Загрузите и настройте модель Gemma, используя класс Gemma4CausalLM , чтобы создать сквозную реализацию причинно-следственного языкового моделирования для моделей Gemma 4. Создайте модель, используя метод from_preset() , как показано в следующем примере кода:
gemma_lm = keras_hub.models.Gemma4CausalLM.from_preset(
"gemma4_instruct_2b",
dtype="bfloat16",
)
Метод Gemma4CausalLM.from_preset() создает экземпляр модели на основе предустановленной архитектуры и весов. В приведенном выше коде строка "gemma#_xxxxxxx" указывает предустановленную версию и размер параметров для Gemma. Строки кода для моделей Gemma можно найти в списках вариантов моделей на Kaggle .
После загрузки модели используйте функцию summary() для получения дополнительной информации о модели:
gemma_lm.summary()
В сводке отображается общее количество обучаемых параметров модели. Для целей именования модели слой встраивания не учитывается в общем количестве параметров.
Сгенерировать текст с помощью текста
Сгенерируйте текст с текстовой подсказкой, используя метод generate() объекта модели Gemma, который вы настроили на предыдущих шагах. Необязательный аргумент max_length задает максимальную длину генерируемой последовательности. Следующие примеры кода показывают несколько способов отправки подсказки модели.
output = gemma_lm.generate("what is keras in 3 bullet points?", max_length=64)
print(output)
what is keras in 3 bullet points? * **A Deep Learning Framework:** Keras is a high-level API that makes it easy to build and train deep learning models by providing a user-friendly interface. * **User-Friendly and Fast:** It abstracts away complex mathematical details, allowing users to
Также можно отправлять пакетные запросы, используя список в качестве входных данных:
output = gemma_lm.generate(
["what is keras in 3 bullet points?",
"The universe is"],
max_length=64)
for item in output:
print(item)
print("-"*80)
what is keras in 3 bullet points? * **A Deep Learning Framework:** Keras is a high-level API that makes it easy to build and train deep learning models by providing a user-friendly interface. * **User-Friendly and Fast:** It abstracts away complex underlying computations, allowing users to -------------------------------------------------------------------------------- The universe is vast and mysterious. It stretches beyond our comprehension, filled with wonders we are only beginning to uncover. From the swirling galaxies to the silent depths of the ocean, the universe whispers secrets of existence, inviting us to explore, to question, and to marvel at the sheer scale of it all. This --------------------------------------------------------------------------------
Если вы используете бэкенды JAX или TensorFlow, вы заметите, что второй вызов generate() возвращает ответ быстрее. Это улучшение производительности обусловлено тем, что каждый вызов generate() для заданного размера пакета и max_length компилируется с помощью XLA. Первый запуск является ресурсоемким, но последующие выполняются быстрее.
Используйте шаблон подсказки
При создании более сложных запросов или многоэтапных взаимодействий в чате используйте шаблон запроса для структурирования вашего запроса. Следующий код создает стандартный шаблон для запросов Gemma:
PROMPT_TEMPLATE = """<|turn>user
{question}
<turn|>
<|turn>model
"""
Следующий код демонстрирует, как использовать шаблон для форматирования простого запроса:
question = """what is keras in 3 bullet points?"""
prompt = PROMPT_TEMPLATE.format(question=question)
output = gemma_lm.generate(prompt)
print(output)
<|turn>user what is keras in 3 bullet points? <turn|> <|turn>model Here are three bullet points explaining what Keras is: * **High-Level API for Deep Learning:** Keras is a user-friendly, high-level neural networks API that allows developers to quickly build, train, and evaluate deep learning models with minimal code. * **Abstraction and Flexibility:** It provides a flexible and modular interface, making it easy to define complex network architectures (like CNNs or RNNs) without getting bogged down in the low-level mathematical details of frameworks like TensorFlow. * **Backend Agnostic:** Keras acts as a consistent interface that can run on top of various powerful deep learning backends (most commonly TensorFlow, but also others), allowing users to switch frameworks easily.<turn|>
Дополнительно: Попробуйте другой пробник.
Стратегию генерации объекта модели можно контролировать, задав аргумент sampler в compile() . По умолчанию будет использоваться "greedy" выборка. В качестве эксперимента попробуйте установить стратегию "top_k" :
gemma_lm.compile(sampler="top_k")
output = gemma_lm.generate("The universe is", max_length=64)
print(output)
The universe is vast. The stars glitter like scattered diamonds on a black velvet canvas. Nebulae swirl in vibrant hues, painting cosmic masterpieces, whispering tales of ancient creation. Galaxies spin in majestic dances, their arms reaching out into the void, a breathtaking spectacle for the eyes. Everywhere, there, in
В то время как алгоритм жадного выбора по умолчанию всегда выбирает токен с наибольшей вероятностью, алгоритм top-K случайным образом выбирает следующий токен из токенов с наибольшей вероятностью. Вам не обязательно указывать сэмплер, и вы можете игнорировать последний фрагмент кода, если он не подходит для вашего случая. Если вы хотите узнать больше о доступных сэмплерах, см. раздел «Сэмплеры» .
Сгенерировать текст на основе данных изображения.
В моделях Gemma 3 и более поздних версиях можно использовать изображения в качестве части запроса для генерации выходных данных. Эта возможность позволяет использовать Gemma для интерпретации визуального контента или использовать изображения в качестве данных для генерации контента.
Создать функцию загрузки изображений
Следующая функция загружает файл изображения по URL-адресу и разбивает его на токены для использования в командной строке Gemma:
import numpy as np
import PIL
def read_image(url):
"""Reads image from URL as NumPy array."""
image_path = keras.utils.get_file(origin=url)
image = PIL.Image.open(image_path)
image = np.array(image)
return image
Загрузите изображение для получения подсказки.
Загрузите изображение и отформатируйте данные так, чтобы модель могла их обработать. Используйте функцию read_image() , определенную в предыдущем разделе, как показано в приведенном ниже примере кода:
from matplotlib import pyplot as plt
image = read_image(
"https://ai.google.dev/gemma/docs/images/thali-indian-plate.jpg"
)
plt.imshow(image)
<matplotlib.image.AxesImage at 0x7ebbf41738f0>


Рисунок 1. Изображение индийского блюда «Тхали» на металлической тарелке.
Выполнить запрос с изображением
При запросе изображения к модели Gemma 4 используйте определенную последовательность строк <|image|> в своем запросе, чтобы включить изображение в текст запроса. Используйте шаблон запроса, например, строку PROMPT_TEMPLATE определенную ранее, чтобы отформатировать запрос, как показано в следующем коде запроса:
question = """Which cuisine is this: <|image|>?
Identify the food items present. Which macros is the meal
high and low on? Keep your answer short.
"""
output = gemma_lm.generate(
{
"images": image,
"prompts": PROMPT_TEMPLATE.format(question=question),
},
)
print(output)
<|turn>user Which cuisine is this: <|image>? Identify the food items present. Which macros is the meal high and low on? Keep your answer short. <turn|> <|turn>model Based on the image, here is the analysis: **Cuisine:** The food items strongly suggest **Indian cuisine** or South Asian cuisine. **Food Items Present:** * **Flatbread:** Likely Roti, Chapati, or Naan. * **Rice:** Plain steamed white rice. * **Dips/Condiments:** A white sauce (like raita or yogurt-based sauce), and several curries/sauces (one appears to be a lentil/vegetable curry, another a tomato/onion-based curry, and others green/spicy sauces). **Macros Analysis (General Estimate):** * **High on:** Carbohydrates (from rice and flatbread) and Fats (depending on how the flatbread was cooked and the richness of the sauces/curries). * **Low on:** Protein (unless a significant amount of meat/legumes is present in the unseen curries) and Fiber (unless the curries are vegetable-heavy).<turn|>
Если вы используете менее мощный графический процессор и сталкиваетесь с ошибками нехватки памяти (OOM), вы можете установить значения параметров max_images_per_prompt и sequence_length на меньшие значения. Следующий код показывает, как уменьшить длину последовательности до 768.
gemma_lm.preprocessor.max_images_per_prompt = 2
gemma_lm.preprocessor.sequence_length = 768
Выполнение запросов с несколькими изображениями
При использовании нескольких изображений в запросе используйте несколько токенов <|image|> для каждого предоставленного изображения, как показано в следующем примере:
photo_a = read_image("https://raw.githubusercontent.com/google-gemma/cookbook/refs/heads/main/apps/sample-data/GoldenGate.png")
photo_b = read_image("https://raw.githubusercontent.com/google-gemma/cookbook/refs/heads/main/apps/sample-data/surprise.png")
question = """I have two images:
Photo A: <|image|>
Photo B: <|image|>
Tell me a bit about these.
Keep it short.
"""
output = gemma_lm.generate(
{
"images": [photo_a, photo_b],
"prompts": PROMPT_TEMPLATE.format(question=question),
},
)
print(output)
<|turn>user I have two images: Photo A: <|image> Photo B: <|image> Tell me a bit about these. Keep it short. <turn|> <|turn>model Photo A is a picture of the **Golden Gate Bridge** in San Francisco, California, with water and hills in the background. Photo B is a close-up portrait of a **cat** with black and white markings and striking green eyes.<turn|>
Что дальше?
В этом уроке вы научились генерировать текст с помощью Keras и Gemma. Вот несколько рекомендаций, что можно изучить дальше:
- Узнайте, как выполнить тонкую настройку модели Gemma .
- Узнайте, как выполнять распределенную тонкую настройку и вывод результатов для модели Gemma .
- Узнайте об интеграции Gemma с Vertex AI.
- Узнайте, как использовать модели Gemma с Vertex AI .
Запустить в Google Colab
Посмотреть исходный код на GitHub