JAX ve Keten kullanılarak Gemma ile çıkarım

ai.google.dev'de görüntüleyin Google Colab'de çalıştır Vertex AI'da aç Kaynağı GitHub'da görüntüleyin

Genel bakış

Gemma, Google DeepMind Gemini araştırmasına ve teknolojisine dayanan, hafif ve son teknoloji ürünü açık büyük dil modellerinden oluşan bir ailedir. Bu eğitimde, JAX (yüksek performanslı sayısal bilgi işlem kitaplığı), Flax (JAX tabanlı nöral ağ kitaplığı), Orbax (JAX tabanlı nöral ağ kitaplığı), Orbax (kontrol noktası gibi eğitim yardımcı programları için JAX-tabanlı bir kitaplık){/11SenterPatoken kitaplığıyla yazılmış Google DeepMind'ın gemma kitaplığını kullanarak Gemma 2B Talimatlar modeliyle nasıl temel örnekleme/çıkarım yapılacağı gösterilmektedir.SentencePiece Bu not defterinde doğrudan kullanılmasa da, Gemma'yı oluşturmak için Flax kullanıldı.

Bu not defteri, ücretsiz T4 GPU ile Google Colab'de çalışabilir (Düzenle > Not defteri ayarları'na gidin > Donanım hızlandırıcı'nın altında T4 GPU'yu seçin).

Kurulum

1. Gemma için Kaggle erişimini ayarlama

Bu eğiticiyi tamamlamak için önce Gemma kurulumu sayfasındaki kurulum talimatlarını uygulamanız gerekir. Bu talimatlarda, aşağıdakilerin nasıl yapılacağı gösterilir:

  • kaggle.com adresinden Gemma'ya erişin.
  • Gemma modelini çalıştırmak için yeterli kaynağa sahip bir Colab çalışma zamanı seçin.
  • Bir Kaggle kullanıcı adı ve API anahtarı oluşturun ve yapılandırın.

Gemma kurulumunu tamamladıktan sonra, Colab ortamınız için ortam değişkenlerini belirleyeceğiniz bir sonraki bölüme geçin.

2. Ortam değişkenlerini ayarlama

KAGGLE_USERNAME ve KAGGLE_KEY için ortam değişkenlerini ayarlayın. "Erişim izni verilsin mi?" iletileriyle karşılaştığınızda 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')

3. gemma kitaplığını yükle

Bu not defteri, ücretsiz bir Colab GPU kullanmaya odaklanmıştır. Donanım hızlandırmayı etkinleştirmek için Düzenle > Not defteri ayarları'nı tıklayın > T4 GPU > Kaydet'i seçin.

Ardından, github.com/google-deepmind/gemma kaynağından Google DeepMind gemma kitaplığını yüklemeniz gerekir. "pip'in bağımlılık çözümleyicisi" ile ilgili bir hata alırsanız genellikle bu hatayı yoksayabilirsiniz.

pip install -q git+https://github.com/google-deepmind/gemma.git

Gemma modelini yükleme ve hazırlama

  1. Üç bağımsız değişken alan kagglehub.model_download ile Gemma modelini yükleyin:
  • handle: Kaggle'daki model herkese açık kullanıcı adı
  • path: (İsteğe bağlı dize) Yerel yol
  • force_download: (İsteğe bağlı boole) Modeli yeniden indirmeye zorlar
GEMMA_VARIANT = '2b-it' # @param ['2b', '2b-it'] {type:"string"}
import kagglehub

GEMMA_PATH = kagglehub.model_download(f'google/gemma/flax/{GEMMA_VARIANT}')
Downloading from https://www.kaggle.com/api/v1/models/google/gemma/flax/2b-it/2/download...
100%|██████████| 3.67G/3.67G [00:35<00:00, 110MB/s]
Extracting model files...
print('GEMMA_PATH:', GEMMA_PATH)
GEMMA_PATH: /root/.cache/kagglehub/models/google/gemma/flax/2b-it/2
  1. Model ağırlıklarının ve belirteçleştiricinin konumunu kontrol edin, ardından yol değişkenlerini ayarlayın. Jeton oluşturucu dizini, modeli indirdiğiniz ana dizindeyken, model ağırlıkları bir alt dizinde yer alır. Örneğin:
  • tokenizer.model dosyası /LOCAL/PATH/TO/gemma/flax/2b-it/2 içinde olacaktır).
  • Model kontrol noktası /LOCAL/PATH/TO/gemma/flax/2b-it/2/2b-it içinde olacaktır).
CKPT_PATH = os.path.join(GEMMA_PATH, GEMMA_VARIANT)
TOKENIZER_PATH = os.path.join(GEMMA_PATH, 'tokenizer.model')
print('CKPT_PATH:', CKPT_PATH)
print('TOKENIZER_PATH:', TOKENIZER_PATH)
CKPT_PATH: /root/.cache/kagglehub/models/google/gemma/flax/2b-it/2/2b-it
TOKENIZER_PATH: /root/.cache/kagglehub/models/google/gemma/flax/2b-it/2/tokenizer.model

Örnekleme/çıkarım yapma

  1. Gemma modeli kontrol noktasını gemma.params.load_and_format_params yöntemiyle yükleme ve biçimlendirme:
from gemma import params as params_lib

params = params_lib.load_and_format_params(CKPT_PATH)
  1. sentencepiece.SentencePieceProcessor kullanılarak oluşturulan Gemma belirteç oluşturucuyu yükleyin:
import sentencepiece as spm

vocab = spm.SentencePieceProcessor()
vocab.Load(TOKENIZER_PATH)
True
  1. Gemma modeli kontrol noktasından doğru yapılandırmayı otomatik olarak yüklemek için gemma.transformer.TransformerConfig değerini kullanın. cache_size bağımsız değişkeni, Gemma Transformer önbelleğindeki adım sayısıdır. Daha sonra, Gemma modelini gemma.transformer.Transformer ile transformer olarak örnekleyin (flax.linen.Module öğesinden devralır).
from gemma import transformer as transformer_lib

transformer_config = transformer_lib.TransformerConfig.from_params(
    params=params,
    cache_size=1024
)

transformer = transformer_lib.Transformer(transformer_config)
  1. Gemma modeli kontrol noktası/ağırlıklarının ve jeton oluşturucunun üzerinde gemma.sampler.Sampler ile bir sampler oluşturun:
from gemma import sampler as sampler_lib

sampler = sampler_lib.Sampler(
    transformer=transformer,
    vocab=vocab,
    params=params['transformer'],
)
  1. input_batch dilinde bir istem yazın ve çıkarım yapın. total_generation_steps üzerinde ince ayar yapabilirsiniz (bir yanıt oluşturulurken gerçekleştirilen adım sayısı). Bu örnekte, ana makine belleğini korumak için 100 kullanılmaktadır.
prompt = [
    "\n# What is the meaning of life?",
]

reply = sampler(input_strings=prompt,
                total_generation_steps=100,
                )

for input_string, out_string in zip(prompt, reply.text):
    print(f"Prompt:\n{input_string}\nOutput:\n{out_string}")
Prompt:

# What is the meaning of life?
Output:


The question of what the meaning of life is one that has occupied the minds of philosophers, theologians, and individuals for centuries. There is no single, universally accepted answer, but there are many different perspectives on this complex and multifaceted question.

**Some common perspectives on the meaning of life include:**

* **Biological perspective:** From a biological standpoint, the meaning of life is to survive and reproduce.
* **Existential perspective:** Existentialists believe that life is not inherently meaningful and that
  1. (İsteğe bağlı) Not defterini tamamladıysanız ve başka bir istem denemek istiyorsanız bellekte yer açmak için bu hücreyi çalıştırın. Ardından, 3. adımda sampler örneğini tekrar oluşturabilir ve 4. adımdaki istemi özelleştirip çalıştırabilirsiniz.
del sampler

Daha fazla bilgi