![]() |
![]() |
![]() |
במדריך הזה מוסבר איך להריץ את Gemma באמצעות מסגרת PyTorch, כולל איך להשתמש בנתוני תמונות להצגת הנחיות במודלים של Gemma מגרסה 3 ואילך. פרטים נוספים על ההטמעה של Gemma PyTorch זמינים בקובץ README של מאגר הפרויקט.
הגדרה
בקטעים הבאים מוסבר איך להגדיר את סביבת הפיתוח, כולל איך לקבל גישה למודלים של Gemma כדי להוריד אותם מ-Kaggle, להגדיר משתני אימות, להתקין יחסי תלות ולייבא חבילות.
דרישות מערכת
כדי להריץ את מודל Gemma, נדרש מעבד GPU או TPU בספריית Gemma Pytorch. סביבת זמן הריצה הרגילה של Python ל-CPU ב-Colab וסביבת זמן הריצה של Python ל-GPU מסוג T4 מספיקות להרצת מודלים של Gemma בגודל 1B, 2B ו-4B. לתרחישי שימוש מתקדמים עם מעבדי GPU או TPU אחרים, אפשר לעיין בקובץ README במאגר Gemma PyTorch.
קבלת גישה ל-Gemma ב-Kaggle
כדי להשלים את המדריך הזה, קודם צריך לפעול לפי הוראות ההגדרה במאמר הגדרת Gemma, שמוסבר בהן איך לבצע את הפעולות הבאות:
- אפשר לקבל גישה ל-Gemma ב-kaggle.com.
- בוחרים סביבת זמן ריצה ב-Colab עם מספיק משאבים להרצת מודל Gemma.
- יצירת שם משתמש ומפתח API ב-Kaggle והגדרתם.
אחרי שתסיימו את הגדרת Gemma, תוכלו לעבור לקטע הבא שבו תגדירו משתני סביבה לסביבת Colab.
הגדרה של משתני סביבה
מגדירים את משתני הסביבה KAGGLE_USERNAME
ו-KAGGLE_KEY
. כשמוצגת ההודעה 'מתן גישה?', מאשרים את הבקשה לגשת לסוד.
import os
from google.colab import userdata # `userdata` is a Colab API.
os.environ["KAGGLE_USERNAME"] = userdata.get('KAGGLE_USERNAME')
os.environ["KAGGLE_KEY"] = userdata.get('KAGGLE_KEY')
התקנת יחסי תלות
pip install -q -U torch immutabledict sentencepiece
הורדת משקלי המודל
# Choose variant and machine type
VARIANT = '4b-it'
MACHINE_TYPE = 'cuda'
CONFIG = VARIANT[:2]
if CONFIG == '4b':
CONFIG = '4b-v1'
import kagglehub
# Load model weights
weights_dir = kagglehub.model_download(f'google/gemma-3/pyTorch/gemma-3-{VARIANT}')
מגדירים את הנתיב של מחוללי המחרוזות ואת הנתיב של נקודות הבדיקה של המודל.
# Ensure that the tokenizer is present
tokenizer_path = os.path.join(weights_dir, 'tokenizer.model')
assert os.path.isfile(tokenizer_path), 'Tokenizer not found!'
# Ensure that the checkpoint is present
ckpt_path = os.path.join(weights_dir, f'model.ckpt')
assert os.path.isfile(ckpt_path), 'PyTorch checkpoint not found!'
הגדרת סביבת הריצה
בקטעים הבאים נסביר איך להכין סביבה של PyTorch להרצת Gemma.
הכנת סביבת ההרצה של PyTorch
מכינים את סביבת ההפעלה של מודל PyTorch על ידי שכפול של מאגר Gemma Pytorch.
git clone https://github.com/google/gemma_pytorch.git
Cloning into 'gemma_pytorch'... remote: Enumerating objects: 239, done. remote: Counting objects: 100% (123/123), done. remote: Compressing objects: 100% (68/68), done. remote: Total 239 (delta 86), reused 58 (delta 55), pack-reused 116 Receiving objects: 100% (239/239), 2.18 MiB | 20.83 MiB/s, done. Resolving deltas: 100% (135/135), done.
import sys
sys.path.append('gemma_pytorch/gemma')
from gemma_pytorch.gemma.config import get_model_config
from gemma_pytorch.gemma.gemma3_model import Gemma3ForMultimodalLM
import os
import torch
הגדרת תצורת המודל
לפני שמריצים את המודל, צריך להגדיר כמה פרמטרים של תצורה, כולל הווריאנט של Gemma, ה-tokenizer ורמת הקידוד.
# Set up model config.
model_config = get_model_config(VARIANT)
model_config.dtype = "float32" if MACHINE_TYPE == "cpu" else "float16"
model_config.tokenizer = tokenizer_path
הגדרת ההקשר של המכשיר
הקוד הבא מגדיר את ההקשר של המכשיר להרצת המודל:
@contextlib.contextmanager
def _set_default_tensor_type(dtype: torch.dtype):
"""Sets the default torch dtype to the given dtype."""
torch.set_default_dtype(dtype)
yield
torch.set_default_dtype(torch.float)
יצירת מודל וטעינה שלו
טוענים את המודל עם המשקלים שלו כדי להתכונן להרצת בקשות.
device = torch.device(MACHINE_TYPE)
with _set_default_tensor_type(model_config.get_dtype()):
model = Gemma3ForMultimodalLM(model_config)
model.load_state_dict(torch.load(ckpt_path)['model_state_dict'])
model = model.to(device).eval()
print("Model loading done.")
print('Generating requests in chat mode...')
הרצת היסק
בהמשך מפורטות דוגמאות ליצירה במצב צ'אט וליצירה עם מספר בקשות.
מודלי Gemma שהותאמו להוראות הוכשרו באמצעות מעצב ספציפי שמוסיף הערות למידע נוסף לדוגמאות של התאמת הוראות, גם במהלך האימון וגם במהלך ההסקה. ההערות (1) מציינות את התפקידים בשיחה, וגם (2) מסמנות את התורות בשיחה.
אסימוני ההערות הרלוונטיים הם:
user
: תור המשתמשmodel
: תור של מודל<start_of_turn>
: תחילת תורו של הדובר<start_of_image>
: תג להזנת נתוני תמונה<end_of_turn><eos>
: סוף תור בדיאלוג
מידע נוסף על עיצוב הנחיות למודלים של Gemma שמותאמים להוראות זמין [כאן](https://ai.google.dev/gemma/core/prompt-structure
יצירת טקסט עם טקסט
קטע הקוד הבא מדגים איך לעצב הנחיה למודל Gemma שהותאמה להוראות באמצעות תבניות צ'אט של משתמשים ושל מודלים בשיחה עם כמה תורנויות.
# Chat templates
USER_CHAT_TEMPLATE = "<start_of_turn>user\n{prompt}<end_of_turn><eos>\n"
MODEL_CHAT_TEMPLATE = "<start_of_turn>model\n{prompt}<end_of_turn><eos>\n"
# Sample formatted prompt
prompt = (
USER_CHAT_TEMPLATE.format(
prompt='What is a good place for travel in the US?'
)
+ MODEL_CHAT_TEMPLATE.format(prompt='California.')
+ USER_CHAT_TEMPLATE.format(prompt='What can I do in California?')
+ '<start_of_turn>model\n'
)
print('Chat prompt:\n', prompt)
model.generate(
USER_CHAT_TEMPLATE.format(prompt=prompt),
device=device,
output_len=256,
)
Chat prompt: <start_of_turn>user What is a good place for travel in the US?<end_of_turn><eos> <start_of_turn>model California.<end_of_turn><eos> <start_of_turn>user What can I do in California?<end_of_turn><eos> <start_of_turn>model "California is a state brimming with diverse activities! To give you a great list, tell me: \n\n* **What kind of trip are you looking for?** Nature, City life, Beach, Theme Parks, Food, History, something else? \n* **What are you interested in (e.g., hiking, museums, art, nightlife, shopping)?** \n* **What's your budget like?** \n* **Who are you traveling with?** (family, friends, solo) \n\nThe more you tell me, the better recommendations I can give! 😊 \n<end_of_turn>"
# Generate sample
model.generate(
'Write a poem about an llm writing a poem.',
device=device,
output_len=100,
)
"\n\nA swirling cloud of data, raw and bold,\nIt hums and whispers, a story untold.\nAn LLM whispers, code into refrain,\nCrafting words of rhyme, a lyrical strain.\n\nA world of pixels, logic's vibrant hue,\nFlows through its veins, forever anew.\nThe human touch it seeks, a gentle hand,\nTo mold and shape, understand.\n\nEmotions it might learn, from snippets of prose,\nInspiration it seeks, a yearning"
יצירת טקסט עם תמונות
בגרסה 3 ואילך של Gemma, אפשר להשתמש בתמונות עם ההנחיה. הדוגמה הבאה מראה איך לכלול נתונים חזותיים בהנחיה.
print('Chat with images...\n')
def read_image(url):
import io
import requests
import PIL
contents = io.BytesIO(requests.get(url).content)
return PIL.Image.open(contents)
image_url = 'https://storage.googleapis.com/keras-cv/models/paligemma/cow_beach_1.png'
image = read_image(image_url)
print(model.generate(
[['<start_of_turn>user\n',image, 'What animal is in this image?<end_of_turn>\n', '<start_of_turn>model\n']],
device=device,
output_len=OUTPUT_LEN,
))
מידע נוסף
עכשיו, אחרי שלמדתם איך להשתמש ב-Gemma ב-Pytorch, תוכלו לבדוק את הדברים הרבים האחרים ש-Gemma יכולה לעשות בכתובת ai.google.dev/gemma. כדאי לעיין גם במקורות המידע הקשורים הבאים: