ai.google.dev adresinde görüntüleyin | Google Colab'da çalıştırma | Kaynağı GitHub'da görüntüleyin |
Bu, Gemma çıkarımının PyTorch'ta çalıştırılmasını gösteren kısa bir demodur. Daha fazla bilgi için lütfen buradan resmi PyTorch uygulamasının GitHub deposuna göz atın.
Unutmayın:
- Ücretsiz Colab CPU Python çalışma zamanı ve T4 GPU Python çalışma zamanı, Gemma 2B modellerini ve 7B int8 ölçülebilir modellerini çalıştırmak için yeterlidir.
- Diğer GPU'lar veya TPU'lar için gelişmiş kullanım alanları için lütfen resmi depoda bulunan README.md dosyasını inceleyin.
1. Gemma için Kaggle erişimini ayarlama
Bu eğitimde yer alan adımları tamamlamak için öncelikle Gemma kurulumu sayfasında bulunan kurulum talimatlarını uygulamanız gerekir. Bu talimatlarda aşağıdakilerin nasıl yapılacağı gösterilmektedir:
- kaggle.com adresinden Gemma'ya erişin.
- Gemma modelini çalıştıracak yeterli kaynağa sahip bir Colab çalışma zamanı seçin.
- Kaggle kullanıcı adı ve API anahtarı oluşturup yapılandırın.
Gemma kurulumunu tamamladıktan sonra bir sonraki bölüme geçin. Burada, Colab ortamınız için ortam değişkenlerini ayarlayabilirsiniz.
2. Ortam değişkenlerini ayarlama
KAGGLE_USERNAME
ve KAGGLE_KEY
için ortam değişkenlerini ayarlayın. "Erişim izni verilsin mi?" mesajlarıyla birlikte, gizli erişim sağlamayı kabul edin.
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')
Bağımlıları yükleme
pip install -q -U torch immutabledict sentencepiece
Model ağırlıklarını indirme
# 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!'
Model uygulamasını indirin
# 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
Modeli ayarlama
# 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()
Çıkarım yap
Aşağıda, sohbet modunda ve birden fazla istekle oluşturma örnekleri verilmiştir.
Talimat ayarlı Gemma modelleri, hem eğitim hem de çıkarım sırasında talimat ayarı örneklerini ek bilgilerle açıklayan belirli bir biçimlendiriciyle eğitildi. Ek açıklamalar (1) bir sohbetteki rolleri gösterir ve (2) sohbetteki konuşma sırasını belirtir.
Alakalı ek açıklama jetonları şunlardır:
user
: kullanıcının sırasımodel
: model dönüşü<start_of_turn>
: diyalog sırasının başlangıcı<end_of_turn><eos>
: diyalog sırasının sonu
Daha fazla bilgi için talimat ayarlı Gemma modelleri için istem biçimlendirmesi hakkındaki bu makaleyi inceleyin.
Aşağıda, çok dönüşlü bir ileti dizisinde kullanıcı ve model sohbet şablonlarını kullanarak talimat ayarlı bir Gemma modeli için bir istemin nasıl biçimlendirileceğini gösteren örnek bir kod snippet'i verilmiştir.
# 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"
Daha fazla bilgi
Gemma'yı Pytorch'ta nasıl kullanacağınızı öğrendiniz. Artık ai.google.dev/gemma adresinde Gemma'nın yapabileceği diğer birçok şeyi keşfedebilirsiniz. Aşağıdaki ilgili kaynaklara da göz atın: