الاطّلاع على ai.google.dev | التنفيذ في Google Colab | عرض المصدر على GitHub |
هذا عرض توضيحي سريع لتنفيذ استنتاج Gemma في PyTorch. لمزيد من التفاصيل، يُرجى الاطّلاع على مستودع GitHub الخاص بتنفيذ PyTorch الرسمي هنا.
يُرجى العلم أنّه:
- إنّ بيئة التشغيل المجانية لـ Python على وحدة المعالجة المركزية في Colab وبيئة التشغيل المجانية لـ Python على وحدة معالجة الرسومات T4 كافية لتشغيل نماذج Gemma 2B والنماذج المحوَّلة إلى 7B int8.
- بالنسبة إلى حالات الاستخدام المتقدّمة لوحدات معالجة الرسومات أو وحدات TPU الأخرى، يُرجى الرجوع إلى README.md في المستودع الرسمي.
1. إعداد إمكانية الوصول إلى Kaggle لـ "جيما"
لإكمال هذا الدليل التعليمي، عليك أولاً اتّباع تعليمات الإعداد في إعداد Gemma، والتي توضّح لك كيفية تنفيذ ما يلي:
- يمكنك الوصول إلى Gemma على kaggle.com.
- اختَر وقت تشغيل Colab يتضمّن موارد كافية لتشغيل نموذج Gemma.
- إنشاء وتكوين اسم مستخدم ومفتاح واجهة برمجة تطبيقات Kaggle.
بعد إكمال إعداد Gemma، انتقِل إلى القسم التالي الذي ستضبط فيه متغيّرات البيئة لبيئة Colab.
2. ضبط متغيّرات البيئة
اضبط متغيّرات البيئة لكلّ من 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 = '2b-it'
MACHINE_TYPE = 'cuda'
CONFIG = VARIANT[:2]
if CONFIG == '2b':
CONFIG = '2b-v2'
import os
import kagglehub
# Load model weights
weights_dir = kagglehub.model_download(f'google/gemma-2/pyTorch/gemma-2-{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!'
تنزيل تنفيذ النموذج
# NOTE: The "installation" is just cloning the repo.
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')
from gemma.config import GemmaConfig, get_model_config
from gemma.model import GemmaForCausalLM
from gemma.tokenizer import Tokenizer
import contextlib
import os
import torch
إعداد النموذج
# Set up model config.
model_config = get_model_config(CONFIG)
model_config.tokenizer = tokenizer_path
model_config.quant = 'quant' in VARIANT
# Instantiate the model and load the weights.
torch.set_default_dtype(model_config.get_dtype())
device = torch.device(MACHINE_TYPE)
model = GemmaForCausalLM(model_config)
model.load_weights(ckpt_path)
model = model.to(device).eval()
تنفيذ الاستنتاج
في ما يلي أمثلة للإنشاء في وضع المحادثة وإنشاء المحتوى باستخدام طلبات متعددة.
تم تدريب نماذج Gemma المحسَّنة بالتعليمات باستخدام أداة تنسيق معيّنة تُضيف تعليقات توضيحية على أمثلة ضبط التعليمات باستخدام معلومات إضافية، سواء أثناء التدريب أو الاستنتاج. تشير التعليقات التوضيحية (1) إلى الأدوار في المحادثة، و (2) توضح الأدوار في المحادثة.
الرموز المميزة للتعليقات التوضيحية ذات الصلة هي:
user
: دور المستخدمmodel
: تغيير الطراز<start_of_turn>
: بداية دور في الحوار<end_of_turn><eos>
: نهاية دور الحوار
لمزيد من المعلومات، يمكنك الاطّلاع على كيفية تنسيق الطلبات لنموذج Gemma الذي تم ضبطه وفقًا للتعليمات هنا.
في ما يلي نموذج لمقتطف رمز يوضّح كيفية تنسيق طلب إلى نموذج Gemma المضبوط وفقًا للتعليمات باستخدام نماذج المحادثات المخصّصة للمستخدم والنموذج في محادثة متعددة الأدوار.
# Generate with one request in chat mode
# 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=128,
)
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"
مزيد من المعلومات
الآن بعد أن تعلمت كيفية استخدام Gemma في Pytorch، يمكنك استكشاف الأشياء الأخرى العديدة التي يمكن أن تفعلها جيما في ai.google.dev/gemma. يمكنك أيضًا الاطّلاع على المراجع الأخرى ذات الصلة التالية: