![]() |
![]() |
![]() |
يوضّح لك هذا الدليل كيفية تشغيل Gemma باستخدام إطار عمل PyTorch، بما في ذلك كيفية استخدام بيانات الصور لتقديم الطلبات إلى الإصدار 3 من نماذج Gemma والإصدارات الأحدث. لمزيد من التفاصيل حول تنفيذ Gemma PyTorch، يُرجى الاطّلاع على ملف README في مستودع المشروع.
الإعداد
توضّح الأقسام التالية كيفية إعداد بيئة التطوير، بما في ذلك كيفية الحصول على إذن الوصول إلى نماذج Gemma لتنزيلها من Kaggle، وضبط متغيرات المصادقة، وتثبيت التبعيات، واستيراد الحِزم.
متطلبات النظام
تتطلّب مكتبة Gemma Pytorch توفّر وحدات معالجة الرسومات أو وحدات معالجة الموتّرات لتشغيل نموذج Gemma. إنّ بيئة التشغيل العادية لوحدة المعالجة المركزية في Colab مع Python وبيئة التشغيل لوحدة معالجة الرسومات T4 مع Python كافيتان لتشغيل نماذج بأحجام 1 مليار و2 مليار و4 مليار من Gemma. بالنسبة إلى حالات الاستخدام المتقدّمة لوحدات معالجة الرسومات (GPU) أو وحدات معالجة Tensor (TPU) الأخرى، يُرجى الرجوع إلى ملف README في مستودع Gemma PyTorch.
الحصول على إذن الوصول إلى Gemma على Kaggle
لإكمال هذا البرنامج التعليمي، عليك أولاً اتّباع تعليمات الإعداد الواردة في إعداد Gemma، والتي توضّح لك كيفية تنفيذ ما يلي:
- يمكنك الوصول إلى Gemma على Kaggle.
- اختَر وقت تشغيل Colab يتضمّن موارد كافية لتشغيل نموذج Gemma.
- أنشئ اسم مستخدم ومفتاح واجهة برمجة تطبيقات على 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.split('-')[0]
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، وأداة الترميز، ومستوى التكميم.
# Set up model config.
model_config = get_model_config(CONFIG)
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 المعدّلة لتنفيذ التعليمات هنا.
إنشاء نص باستخدام نص
في ما يلي مقتطف من نموذج رمز برمجي يوضّح كيفية تنسيق طلب لنموذج 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 = read_image(
'https://storage.googleapis.com/keras-cv/models/paligemma/cow_beach_1.png'
)
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=256,
))
مزيد من المعلومات
بعد أن تعرّفت على كيفية استخدام Gemma في Pytorch، يمكنك استكشاف الميزات الأخرى التي توفّرها Gemma على ai.google.dev/gemma.
يمكنك أيضًا الاطّلاع على المراجع الأخرى ذات الصلة التالية: