Vraponi Gemma-n me Kerasin

Shiko në ai.google.dev Ekzekuto në Google Colab Vraponi në Kaggle Hap në Vertex AI Shiko burimin në GitHub

Gjenerimi i përmbajtjes, përmbledhja dhe analizimi i përmbajtjes janë vetëm disa nga detyrat që mund të kryeni me modelet e hapura të Gemma. Ky tutorial ju tregon se si të filloni të ekzekutoni Gemma duke përdorur Keras, duke përfshirë gjenerimin e përmbajtjes tekstuale me futjen e tekstit dhe imazhit. Keras ofron implementime për ekzekutimin e Gemma dhe modeleve të tjera duke përdorur JAX, PyTorch dhe TensorFlow. Nëse jeni të rinj në Keras, mund të dëshironi të lexoni "Fillimi me Keras" para se të filloni.

Modelet Gemma 3 dhe më të reja mbështesin futjen e tekstit dhe imazhit. Versionet e mëparshme të Gemma mbështesin vetëm futjen e tekstit, përveç disa varianteve, duke përfshirë PaliGemma .

Instaloni paketat Keras

Instaloni paketat Python Keras dhe KerasHub.

pip install -q -U keras keras-hub keras-nlp

Zgjidh një backend

Keras është një API i nivelit të lartë, me shumë korniza, i projektuar për thjeshtësi dhe lehtësi përdorimi. Keras 3 ju lejon të zgjidhni backend-in: TensorFlow, JAX ose PyTorch. Të treja do të funksionojnë për këtë tutorial. Për këtë tutorial, konfiguroni backend-in për JAX pasi zakonisht ofron performancë më të mirë.

import os

os.environ["KERAS_BACKEND"] = "jax"  # Or "tensorflow" or "torch".
os.environ["XLA_PYTHON_CLIENT_MEM_FRACTION"] = "1.00"

Importo paketa

Importoni paketat Keras dhe KerasHub.

import keras
import keras_hub

Modeli i ngarkesës

Keras ofron implementime të shumë arkitekturave të njohura të modeleve . Shkarkoni dhe konfiguroni një model Gemma duke përdorur klasën Gemma4CausalLM për të ndërtuar një implementim modelimi të gjuhës shkakësore nga fillimi në fund për modelet Gemma 4. Krijoni modelin duke përdorur metodën from_preset() , siç tregohet në shembullin e mëposhtëm të kodit:

gemma_lm = keras_hub.models.Gemma4CausalLM.from_preset(
    "gemma4_instruct_2b",
    dtype="bfloat16",
)

Metoda Gemma4CausalLM.from_preset() krijon shembullin e modelit nga një arkitekturë dhe pesha të paracaktuara. Në kodin e mësipërm, vargu "gemma#_xxxxxxx" specifikon një version të paracaktuar dhe madhësinë e parametrit për Gemma. Mund t'i gjeni vargjet e kodit për modelet Gemma në listat e tyre të Variacionit të ModelitKaggle .

Pasi ta keni shkarkuar modelin, përdorni funksionin summary() për të marrë më shumë informacion rreth modelit:

gemma_lm.summary()

Rezultati i përmbledhjes tregon numrin total të parametrave të trajnueshëm të modelit. Për qëllime të emërtimit të modelit, shtresa e ngulitur nuk llogaritet kundrejt numrit të parametrave.

Gjeneroni tekst me tekst

Gjeneroni tekst me një kërkesë teksti duke përdorur metodën generate() të objektit të modelit Gemma që konfiguruat në hapat e mëparshëm. Argumenti opsional max_length specifikon gjatësinë maksimale të sekuencës së gjeneruar. Shembujt e mëposhtëm të kodit tregojnë disa mënyra për të kërkuar modelin.

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

Gjithashtu mund të ofroni kërkesa të grupuara duke përdorur një listë si të dhëna hyrëse:

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
--------------------------------------------------------------------------------

Nëse po përdorni në backend-e JAX ose TensorFlow, duhet të vini re se thirrja e dytë generate() kthen një përgjigje më shpejt. Ky përmirësim i performancës është sepse çdo thirrje për generate() për një madhësi të caktuar batch dhe max_length kompilohet me XLA. Ekzekutimi i parë është i kushtueshëm, por ekzekutimet pasuese janë më të shpejta.

Përdorni një shabllon të shpejtë

Kur ndërtoni kërkesa më komplekse ose ndërveprime në chat me shumë kthesa, përdorni një shabllon për të strukturuar kërkesën tuaj. Kodi i mëposhtëm krijon një shabllon standard për kërkesat e Gemma-s:

PROMPT_TEMPLATE = """<|turn>user
{question}
<turn|>
<|turn>model
"""

Kodi i mëposhtëm tregon se si të përdoret shablloni për të formatuar një kërkesë të thjeshtë:

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|>

Opsionale: Provoni një mostër tjetër

Ju mund të kontrolloni strategjinë e gjenerimit për objektin e modelit duke vendosur argumentin e samplercompile() . Si parazgjedhje, do të përdoret mostrimi "greedy" . Si eksperiment, provoni të vendosni një strategji "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

Ndërsa algoritmi i parazgjedhur lakmitar zgjedh gjithmonë tokenin me probabilitetin më të madh, algoritmi top-K zgjedh rastësisht tokenin tjetër nga tokenët me probabilitet K më të lartë. Nuk keni pse të specifikoni një mostër dhe mund ta injoroni fragmentin e fundit të kodit nëse nuk është i dobishëm për rastin tuaj të përdorimit. Nëse dëshironi të mësoni më shumë rreth mostrave të disponueshme, shihni Mostrat .

Gjeneroni tekst me të dhëna imazhi

Me modelet Gemma 3 dhe më të reja, mund të përdorni imazhe si pjesë të një njoftimi për të gjeneruar rezultate. Kjo aftësi ju lejon të përdorni Gemma për të interpretuar përmbajtjen vizuale ose për të përdorur imazhe si të dhëna për gjenerimin e përmbajtjes.

Krijo funksionin e ngarkuesit të imazheve

Funksioni i mëposhtëm ngarkon një skedar imazhi nga një URL dhe e tokenizon atë për përdorim në Gemma prompt:

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

Ngarko imazhin për një kërkesë

Ngarko imazhin dhe formato të dhënat në mënyrë që modeli të mund t'i përpunojë ato. Përdor funksionin read_image() të përcaktuar në seksionin e mëparshëm, siç tregohet në kodin shembullor më poshtë:

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>

png

Figura 1. Imazh i ushqimit indian Thali në një pjatë metalike.

Ekzekutoni kërkesën me një imazh

Kur i kërkoni modelit Gemma 4 përmbajtje imazhi, përdorni një sekuencë specifike vargjesh, <|image|> , brenda kërkesës suaj për të përfshirë imazhin si pjesë të kërkesës. Përdorni një shabllon kërkese, siç është vargu PROMPT_TEMPLATE i përcaktuar më parë, për të formatuar kërkesën tuaj siç tregohet në kodin e mëposhtëm të kërkesës:

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|>

Nëse po përdorni një GPU më të vogël dhe hasni gabime të mungesës së memories (OOM), mund t'i vendosni max_images_per_prompt dhe sequence_length në vlera më të vogla. Kodi i mëposhtëm tregon se si ta zvogëloni gjatësinë e sekuencës në 768.

gemma_lm.preprocessor.max_images_per_prompt = 2
gemma_lm.preprocessor.sequence_length = 768

Ekzekutoni kërkesa me imazhe të shumta

Kur përdorni më shumë se një imazh në një kërkesë, përdorni shumë tokena <|image|> për secilën imazh të dhënë, siç tregohet në shembullin e mëposhtëm:

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|>

Çfarë vjen më pas

Në këtë tutorial, mësuat se si të gjeneroni tekst duke përdorur Keras dhe Gemma. Ja disa sugjerime se çfarë të mësoni më pas: