Wprowadzenie do Gemma przy użyciu KerasNLP

Ten samouczek pokazuje, jak zacząć korzystać z Gemma przy użyciu KerasNLP. Gemma to rodzina lekkich, otwartych modeli najnowszej generacji, które powstały na podstawie tych samych badań i technologii, co modele Gemini. KerasNLP to zbiór modeli przetwarzania języka naturalnego (NLP) zaimplementowanych w Keras i możliwych do uruchomienia w JAX, PyTorch i TensorFlow.

W tym samouczku użyjesz Gemma do generowania tekstowych odpowiedzi na kilka promptów. Jeśli dopiero zaczynasz korzystać z Keras, możesz przeczytać artykuł Początkujący: pierwsze kroki z Keras, ale nie jest to konieczne. Więcej informacji o Keras znajdziesz w tym samouczku.

Konfiguracja

Konfiguracja Gemma

Aby wykonać ten samouczek, musisz najpierw wykonać instrukcje konfiguracji dostępne na stronie Konfiguracja Gemma. Instrukcje konfiguracji Gemma pokazują, jak:

  • Uzyskaj dostęp do Gemma na kaggle.com.
  • Wybierz środowisko Colab z wystarczającymi zasobami do uruchomienia modelu Gemma 2B.
  • Wygeneruj i skonfiguruj nazwę użytkownika oraz klucz 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 KAGGLE_USERNAMEKAGGLE_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

Zainstaluj 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 głębokiego uczenia się na wysokim poziomie, który obsługuje wiele frameworków i został zaprojektowany z myślą o prostocie i łatwości obsługi. Keras 3 umożliwia wybranie backendu: TensorFlow, JAX lub PyTorch. W tym samouczku możesz użyć dowolnego z nich.

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

Utwórz model

KerasNLP udostępnia implementacje wielu popularnych architektur modeli. W tym samouczku utworzysz model za pomocą GemmaCausalLM, kompleksowego modelu Gemma do modelowania języka przyczynowego. Model językowy oparty na przyczynowości przewiduje następny token na podstawie poprzednich tokenów.

Utwórz model za pomocą metody from_preset:

gemma_lm = keras_nlp.models.GemmaCausalLM.from_preset("gemma2_2b_en")

Funkcja GemmaCausalLM.from_preset() tworzy instancję modelu na podstawie wstępnie zdefiniowanej architektury i wag. W powyższym kodzie ciąg "gemma2_2b_en" określa wstępnie ustawiony model Gemma 2 2B z 2 miliardami parametrów. Dostępne są też modele Gemma z parametrami 7B, 9B i 27B. Ciągi znaków kodu modeli Gemma można znaleźć w opisach wariacji modelu na stronie Kaggle.

Aby uzyskać więcej informacji o modelu, kliknij summary:

gemma_lm.summary()

Jak widać z podsumowania, model ma 2,6 mld parametrów do trenowania.

Generuj tekst

Czas na wygenerowanie tekstu. Model ma metodę generate, która generuje tekst na podstawie promptu. Opcjonalny argument max_length określa maksymalną długość wygenerowanej sekwencji.

Wypróbuj to za pomocą prompta "what is keras in 3 bullet points?".

gemma_lm.generate("what is keras in 3 bullet points?", max_length=64)
'what is keras in 3 bullet points?\n\n[Answer 1]\n\nKeras is a high-level neural networks API, written in Python and capable of running on top of TensorFlow, CNTK, Theano, or PlaidML. It is designed to be user-friendly and easy to extend.\n\n'

Spróbuj zadzwonić do użytkownika generate ponownie, używając innego prompta.

gemma_lm.generate("The universe is", max_length=64)
'The universe is a vast and mysterious place, filled with countless stars, planets, and galaxies. But what if there was a way to see the universe in a whole new way? What if we could see the universe as it was when it was first created? What if we could see the universe as it is now'

Jeśli używasz backendów JAX lub TensorFlow, zauważysz, że wywołanie funkcji generate zwraca wynik niemal natychmiast. Dzieje się tak, ponieważ każde wywołanie funkcji generate o danej wielkości partii i wartości max_length jest kompilowane za pomocą XLA. Pierwsze uruchomienie jest kosztowne, ale kolejne są znacznie szybsze.

Możesz też podać prompty zbiorcze, podając listę jako dane wejściowe:

gemma_lm.generate(
    ["what is keras in 3 bullet points?",
     "The universe is"],
    max_length=64)
['what is keras in 3 bullet points?\n\n[Answer 1]\n\nKeras is a high-level neural networks API, written in Python and capable of running on top of TensorFlow, CNTK, Theano, or PlaidML. It is designed to be user-friendly and easy to extend.\n\n',
 'The universe is a vast and mysterious place, filled with countless stars, planets, and galaxies. But what if there was a way to see the universe in a whole new way? What if we could see the universe as it was when it was first created? What if we could see the universe as it is now']

Opcjonalnie: spróbuj użyć innego próbnika

Strategię generowania wartości GemmaCausalLM możesz kontrolować, ustawiając argument sampler na wartość 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("The universe is", max_length=64)
'The universe is a big place, and there are so many things we do not know or understand about it.\n\nBut we can learn a lot about our world by studying what is known to us.\n\nFor example, if you look at the moon, it has many features that can be seen from the surface.'

Domyślny algorytm zachłanny zawsze wybiera token o największym prawdopodobieństwie, natomiast algorytm top-K losowo wybiera kolejny token spośród tokenów o największym prawdopodobieństwie.

Nie musisz określać próbnika i możesz zignorować ostatni fragment kodu, jeśli nie jest on przydatny w Twoim przypadku. Więcej informacji o dostępnych próbkach znajdziesz w artykule Próbki.

Co dalej?

Z tego samouczka dowiesz się, jak generować tekst za pomocą KerasNLP i Gemma. Oto kilka sugestii, co warto się nauczyć: