Gemma را با استفاده از PyTorch اجرا کنید

مشاهده در ai.google.dev در گوگل کولب اجرا کنید دویدن در کاگل باز کردن در Vertex AI مشاهده منبع در گیت‌هاب

این راهنما به شما نشان می‌دهد که چگونه 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 در Kaggle دسترسی پیدا کنید

برای تکمیل این آموزش، ابتدا باید دستورالعمل‌های راه‌اندازی را در 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 را توضیح می‌دهند.

آماده‌سازی محیط اجرای PyTorch

با کپی کردن مخزن Gemma Pytorch، محیط اجرای مدل 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"
تولید متن با تصاویر

با نسخه ۳ و بالاتر 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 بررسی کنید.

همچنین به این منابع مرتبط دیگر مراجعه کنید: