Wprowadzenie do Gemma przy użyciu KerasNLP

Zobacz na ai.google.dev Uruchom w Google Colab Otwórz w Vertex AI Wyświetl źródło na GitHubie

Z tego samouczka dowiesz się, jak zacząć korzystać z Gemmy przy użyciu KerasNLP. Gemma to rodzina lekkich, nowoczesnych otwartych modeli stworzonych na podstawie tych samych badań i technologii, które są wykorzystywane do tworzenia modeli Gemini. KerasNLP to zbiór modeli przetwarzania języka naturalnego (NLP) zaimplementowanych w Keras i uruchamianych w JAX, PyTorch i TensorFlow.

W tym samouczku będziesz używać Gemma do generowania odpowiedzi tekstowych na kilka promptów. Jeśli dopiero zaczynasz korzystać z Keras, możesz najpierw przeczytać artykuł Wprowadzenie do Keras, ale nie musisz. W trakcie tego samouczka dowiesz się więcej o Keras.

Konfiguracja

Konfiguracja Gemma

Aby ukończyć ten samouczek, najpierw musisz wykonać instrukcje konfiguracji opisane w artykule Konfiguracja Gemma. Instrukcje konfiguracji Gemma pokazują, jak:

  • Uzyskaj dostęp do Gemma na kaggle.com.
  • Wybierz środowisko wykonawcze Colab z wystarczającą ilością zasobów, by uruchomić model Gemma 2B.
  • Wygeneruj i skonfiguruj nazwę użytkownika i klucz interfejsu API Kaggle.

Po zakończeniu konfigurowania Gemma przejdź do następnej sekcji, w której skonfigurujesz zmienne środowiskowe dla środowiska Colab.

Ustawianie zmiennych środowiskowych

Ustaw zmienne środowiskowe dla KAGGLE_USERNAME i KAGGLE_KEY.

import os
from google.colab import userdata

# Note: `userdata.get` is a Colab API. If you're not using Colab, set the env
# vars as appropriate for your system.
os.environ["KAGGLE_USERNAME"] = userdata.get('KAGGLE_USERNAME')
os.environ["KAGGLE_KEY"] = userdata.get('KAGGLE_KEY')

Instalowanie zależności

Instalowanie Keras i KerasNLP.

# Install Keras 3 last. See https://keras.io/getting_started/ for more details.
pip install -q -U keras-nlp
pip install -q -U keras>=3

Wybierz backend

Keras to interfejs API do deep learningu z wieloma ramkami zaprojektowany z myślą o łatwości obsługi. W Keras 3 możesz wybrać backend: TensorFlow, JAX lub PyTorch. W tym samouczku będą działać wszystkie trzy.

import os

os.environ["KERAS_BACKEND"] = "jax"  # Or "tensorflow" or "torch".
os.environ["XLA_PYTHON_CLIENT_MEM_FRACTION"] = "0.9"

Importowanie pakietów

Importuj Keras i KerasNLP.

import keras
import keras_nlp

Tworzenie modelu

KerasNLP udostępnia implementacje wielu popularnych architektur modeli. W tym samouczku utworzysz model przy użyciu GemmaCausalLM, czyli kompleksowego modelu Gemma do modelowania językowego przyczynowo-skutkowego. przyczynowy model językowy przewiduje następny token na podstawie poprzednich tokenów,

Utwórz model, korzystając z metody from_preset:

gemma_lm = keras_nlp.models.GemmaCausalLM.from_preset("gemma_2b_en")
Attaching 'config.json' from model 'keras/gemma/keras/gemma_2b_en/1' to your Colab notebook...
Attaching 'config.json' from model 'keras/gemma/keras/gemma_2b_en/1' to your Colab notebook...
Attaching 'model.weights.h5' from model 'keras/gemma/keras/gemma_2b_en/1' to your Colab notebook...
Attaching 'tokenizer.json' from model 'keras/gemma/keras/gemma_2b_en/1' to your Colab notebook...
Attaching 'assets/tokenizer/vocabulary.spm' from model 'keras/gemma/keras/gemma_2b_en/1' to your Colab notebook...

from_preset tworzy instancję modelu na podstawie gotowej architektury i wag. W powyższym kodzie ciąg "gemma_2b_en" określa gotową architekturę – model Gemma z 2 miliardami parametrów.

Użyj narzędzia summary, aby uzyskać więcej informacji o modelu:

gemma_lm.summary()

Jak widać w podsumowaniu, model zawiera 2,5 miliarda parametrów do trenowania.

Generowanie tekstu

Teraz czas wygenerować tekst. Model zawiera metodę generate, która generuje tekst na podstawie promptu. Opcjonalny argument max_length określa maksymalną długość wygenerowanej sekwencji.

Wypróbuj, wykonując polecenie "What is the meaning of life?".

gemma_lm.generate("What is the meaning of life?", max_length=64)
'What is the meaning of life?\n\nThe question is one of the most important questions in the world.\n\nIt’s the question that has been asked by philosophers, theologians, and scientists for centuries.\n\nAnd it’s the question that has been asked by people who are looking for answers to their own lives'

Spróbuj ponownie zadzwonić pod numer generate, używając innego promptu.

gemma_lm.generate("How does the brain work?", max_length=64)
'How does the brain work?\n\nThe brain is the most complex organ in the human body. It is responsible for controlling all of the body’s functions, including breathing, heart rate, digestion, and more. The brain is also responsible for thinking, feeling, and making decisions.\n\nThe brain is made up'

Jeśli używasz backendów JAX lub TensorFlow, drugie wywołanie generate zwraca niemal natychmiast. Wynika to z faktu, że każde wywołanie generate dla danego rozmiaru wsadu i max_length jest kompilowane w środowisku XLA. Pierwsze uruchomienie jest kosztowne, ale kolejne są znacznie szybsze.

Możesz też przesyłać zbiorcze prompty, korzystając z listy jako danych wejściowych:

gemma_lm.generate(
    ["What is the meaning of life?",
     "How does the brain work?"],
    max_length=64)
['What is the meaning of life?\n\nThe question is one of the most important questions in the world.\n\nIt’s the question that has been asked by philosophers, theologians, and scientists for centuries.\n\nAnd it’s the question that has been asked by people who are looking for answers to their own lives',
 'How does the brain work?\n\nThe brain is the most complex organ in the human body. It is responsible for controlling all of the body’s functions, including breathing, heart rate, digestion, and more. The brain is also responsible for thinking, feeling, and making decisions.\n\nThe brain is made up']

Opcjonalnie: wypróbuj inny kompilator

Możesz kontrolować strategię generowania elementu GemmaCausalLM, ustawiając argument sampler w kolumnie compile(). Domyślnie używane jest próbkowanie "greedy".

W ramach eksperymentu spróbuj ustawić strategię "top_k":

gemma_lm.compile(sampler="top_k")
gemma_lm.generate("What is the meaning of life?", max_length=64)
'What is the meaning of life? That was a question I asked myself as I was driving home from work one night in 2012. I was driving through the city of San Bernardino, and all I could think was, “What the heck am I doing?”\n\nMy life was completely different. I'

Domyślny algorytm zachłanności zawsze wybiera token o największym prawdopodobieństwie, a algorytm górnego K losowo wybiera następny token spośród tokenów o najwyższym prawdopodobieństwie K.

Nie musisz określać kodu próbkowania i możesz zignorować ostatni fragment kodu, jeśli nie jest przydatny w Twoim przypadku. Jeśli chcesz dowiedzieć się więcej o dostępnych próbkach, przeczytaj artykuł Sample.

Co dalej

Z tego samouczka dowiesz się, jak generować tekst za pomocą narzędzi KerasNLP i Gemma. Oto kilka sugestii, o których warto przeczytać: