جما در PyTorch

مشاهده در ai.google.dev در Google Colab اجرا شود مشاهده منبع در GitHub

این یک نسخه نمایشی سریع از اجرای استنتاج Gemma در PyTorch است. برای جزئیات بیشتر، لطفاً مخزن Github پیاده سازی رسمی PyTorch را در اینجا بررسی کنید.

توجه داشته باشید که :

  • زمان اجرا رایگان Colab CPU Python و T4 GPU Python برای اجرای مدل‌های Gemma 2B و مدل‌های quantized 7B int8 کافی است.
  • برای موارد استفاده پیشرفته برای سایر GPU یا TPU، لطفاً به README.md در مخزن رسمی مراجعه کنید.

1. دسترسی Kaggle را برای Gemma تنظیم کنید

برای تکمیل این آموزش، ابتدا باید دستورالعمل های راه اندازی را در Gemma setup دنبال کنید، که به شما نشان می دهد چگونه کارهای زیر را انجام دهید:

  • در kaggle.com به Gemma دسترسی پیدا کنید.
  • یک زمان اجرا Colab با منابع کافی برای اجرای مدل Gemma انتخاب کنید.
  • نام کاربری و کلید API 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 یاد گرفته‌اید، می‌توانید بسیاری از کارهای دیگری که Gemma می‌تواند در ai.google.dev/gemma انجام دهد را کشف کنید. این منابع مرتبط دیگر را نیز ببینید:

،

مشاهده در ai.google.dev در Google Colab اجرا شود مشاهده منبع در GitHub

این یک نسخه نمایشی سریع از اجرای استنتاج Gemma در PyTorch است. برای جزئیات بیشتر، لطفاً مخزن Github پیاده سازی رسمی PyTorch را در اینجا بررسی کنید.

توجه داشته باشید که :

  • زمان اجرا رایگان Colab CPU Python و T4 GPU Python برای اجرای مدل‌های Gemma 2B و مدل‌های quantized 7B int8 کافی است.
  • برای موارد استفاده پیشرفته برای سایر GPU یا TPU، لطفاً به README.md در مخزن رسمی مراجعه کنید.

1. دسترسی Kaggle را برای Gemma تنظیم کنید

برای تکمیل این آموزش، ابتدا باید دستورالعمل های راه اندازی را در Gemma setup دنبال کنید، که به شما نشان می دهد چگونه کارهای زیر را انجام دهید:

  • در kaggle.com به Gemma دسترسی پیدا کنید.
  • یک زمان اجرا Colab با منابع کافی برای اجرای مدل Gemma انتخاب کنید.
  • نام کاربری و کلید API 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 یاد گرفته‌اید، می‌توانید بسیاری از کارهای دیگری که Gemma می‌تواند در ai.google.dev/gemma انجام دهد را کشف کنید. این منابع مرتبط دیگر را نیز ببینید: