Nxitje me imazhe dhe tekst duke përdorur bibliotekën Gemma

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

Përdorimi i imazheve për të nxitur modelet Gemma hap një gamë të tërë mundësish të reja për të kuptuar botën tuaj dhe për të zgjidhur problemet me të dhënat vizuale. Duke filluar me Gemma 3 në madhësitë 4B dhe më të larta, ju mund të përdorni të dhënat e imazheve si pjesë të nxitjes suaj për të pasur një kontekst më të pasur dhe për të zgjidhur detyra më komplekse.

Ky tutorial ju tregon se si ta nxitni Gemma-n me imazhe duke përdorur bibliotekën Gemma për JAX. Biblioteka Gemma është një paketë Python e ndërtuar si një zgjerim i JAX , duke ju lejuar të përdorni avantazhet e performancës së kornizës JAX me kod shumë më pak.

Konfigurimi

Për të përfunduar këtë tutorial, së pari duhet të plotësoni udhëzimet e konfigurimit në Gemma setup . Udhëzimet e konfigurimit të Gemma ju tregojnë se si të bëni sa vijon:

  • Merrni qasje në Gemma në kaggle.com .
  • Zgjidh një kohë ekzekutimi Colab me burime të mjaftueshme për të ekzekutuar modelin Gemma.
  • Gjeneroni dhe konfiguroni një emër përdoruesi dhe çelës API të Kaggle.

Pasi të keni përfunduar konfigurimin e Gemma-s, kaloni në seksionin tjetër, ku do të caktoni variablat e mjedisit për mjedisin tuaj Colab.

Instalo libraritë

Instaloni bibliotekën Gemma.

pip install -q gemma

Vendos variablat e mjedisit

Hyni me llogarinë tuaj 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.

Cakto mjedisin JAX që të përdorë hapësirën e plotë të memories GPU.

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

Importo paketa

Importoni bibliotekën Gemma dhe bibliotekat shtesë mbështetëse.

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

# Gemma imports
from gemma import gm

Konfiguro një model

Zgjidhni dhe konfiguroni një model Gemma për përdorim, duke përfshirë një tokenizer, arkitekturën e modelit dhe pikat e kontrollit. Biblioteka Gemma mbështet të gjitha versionet zyrtare të Google të modelit. Ju duhet të përdorni Gemma3Tokenizer dhe një model Gemma 3 ose më të ri për të qenë në gjendje të përpunoni imazhe si pjesë të kërkesës suaj.

Për të konfiguruar modelin, ekzekutoni kodin e mëposhtëm:

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.

Gjeneroni tekst me tekst

Filloni duke dhënë udhëzime me tekst. Biblioteka Gemma ofron një funksion Sampler për udhëzime të thjeshta.

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'

Ndrysho kërkesën dhe ndrysho numrin maksimal të tokenëve për të gjeneruar rezultate të ndryshme.

Gjeneroni tekst me imazhe

Pasi të keni aktivizuar një kërkesë teksti, mund të shtoni imazhe në kërkesën tuaj. Sigurohuni që të keni konfiguruar një model Gemma 3 ose më të ri që është 4B ose më i lartë, dhe të keni konfiguruar Gemma3Tokenizer .

Ngarko një imazh

Ngarko një imazh nga një burim të dhënash ose një skedar lokal. Kodi i mëposhtëm tregon se si të ngarkosh një imazh nga një burim të dhënash 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

Përgatitja e një prompti me të dhënat e imazhit

Kur ju kërkoni me të dhëna imazhi, ju përfshini një etiketë specifike <start_of_image> , për të përfshirë imazhin me tekstin e kërkesës suaj. Pastaj ju e kodoni kërkesën me të dhënat e imazhit duke përdorur objektin tokenizer për ta përgatitur atë për ta ekzekutuar atë me modelin.

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

<start_of_image>

<end_of_turn>
<start_of_turn>model
"""

Nëse doni të dërgoni një kërkesë me më shumë se një imazh, duhet të përfshini një etiketë <start_of_image> për secilën imazh të përfshirë në kërkesën tuaj.

Ekzekutoni kërkesën me të dhënat e imazhit

Pasi të keni përgatitur të dhënat e imazhit dhe kërkesën me etiketat e imazhit, mund ta ekzekutoni kërkesën dhe të gjeneroni rezultate. Kodi i mëposhtëm tregon se si të përdorni funksionin Sampler për të ekzekutuar kërkesën:

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>

Si alternativë, mund të përdorni funksionin gm.text.ChatSampler() për të gjeneruar një përgjigje pa kërkuar etiketat <start_of_turn> . Për më shumë detaje, shihni bibliotekën Gemma për dokumentacionin JAX .

Hapat e ardhshëm

Biblioteka Gemma ofron shumë më tepër funksionalitete shtesë. Shihni këto burime shtesë për më shumë informacion:

Biblioteka Gemma për JAX ofron funksionalitete shtesë, duke përfshirë LoRA, Sharding, Quantization dhe më shumë. Për më shumë detaje, shihni dokumentacionin e bibliotekës Gemma . Nëse keni ndonjë reagim ose keni probleme me përdorimin e bibliotekës Gemma, dërgojini ato përmes ndërfaqes së Problemeve të repozitorit.