| | | | | |
این راهنما به شما نشان میدهد که چگونه Gemma را با استفاده از چارچوب PyTorch اجرا کنید، از جمله نحوه استفاده از دادههای تصویر برای فراخوانی مدلهای Gemma نسخه ۳ و بالاتر. برای جزئیات بیشتر در مورد پیادهسازی Gemma PyTorch، به مخزن پروژه README مراجعه کنید.
بخشهای بعدی نحوهی راهاندازی محیط توسعه، از جمله نحوهی دسترسی به مدلهای Gemma برای دانلود از Kaggle، تنظیم متغیرهای احراز هویت، نصب وابستگیها و وارد کردن بستهها را توضیح میدهند.
این کتابخانه Gemma Pytorch برای اجرای مدل Gemma به پردازندههای GPU یا TPU نیاز دارد. زمان اجرای استاندارد Colab CPU Python و زمان اجرای T4 GPU Python برای اجرای مدلهای Gemma با اندازههای 1B، 2B و 4B کافی است. برای موارد استفاده پیشرفته برای سایر GPUها یا TPU، لطفاً به README در مخزن Gemma PyTorch مراجعه کنید.
برای تکمیل این آموزش، ابتدا باید دستورالعملهای راهاندازی را در Gemma setup دنبال کنید، که به شما نحوه انجام موارد زیر را نشان میدهد:
- به Gemma در Kaggle دسترسی پیدا کنید.
- یک محیط اجرای 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.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 را توضیح میدهند.
با کپی کردن مخزن Gemma Pytorch، محیط اجرای مدل PyTorch را آماده کنید.
git clone https://github.com/google/gemma_pytorch.gitCloning 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"
با نسخه ۳ و بالاتر 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 بررسی کنید.
همچنین به این منابع مرتبط دیگر مراجعه کنید: