Inizia a utilizzare Gemma con KerasNLP

Questo tutorial mostra come iniziare a utilizzare Gemma con KerasNLP. Gemma è una famiglia di modelli aperti leggeri e all'avanguardia creati sulla base della stessa ricerca e tecnologia utilizzata per creare i modelli Gemini. KerasNLP è una raccolta di modelli di elaborazione del linguaggio naturale (NLP) implementati in Keras ed eseguibili su JAX, PyTorch e TensorFlow.

In questo tutorial utilizzerai Gemma per generare risposte di testo a diversi prompt. Se non hai mai utilizzato Keras, ti consigliamo di leggere l'articolo Introduzione a Keras prima di iniziare, ma non è obbligatorio. Scoprirai di più su Keras man mano che svolgi questo tutorial.

Configurazione

Configurazione di Gemma

Per completare questo tutorial, devi prima seguire le istruzioni di configurazione riportate nella pagina Configurazione di Gemma. Le istruzioni di configurazione di Gemma mostrano come:

  • Accedi a Gemma su kaggle.com.
  • Seleziona un runtime Colab con risorse sufficienti per eseguire il modello Gemma 2B.
  • Genera e configura un nome utente e una chiave API Kaggle.

Dopo aver completato la configurazione di Gemma, vai alla sezione successiva, dove imposterai le variabili di ambiente per il tuo ambiente Colab.

Imposta le variabili di ambiente

Imposta le variabili di ambiente per KAGGLE_USERNAME e 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')

Installa le dipendenze

Installa Keras e 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"

Seleziona un servizio di backend

Keras è un'API di deep learning multi-framework ad alto livello progettata per la semplicità e la facilità d'uso. Keras 3 ti consente di scegliere il backend: TensorFlow, JAX o PyTorch. Tutti e tre sono adatti per questo tutorial.

import os

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

Importare i pacchetti

Importa Keras e KerasNLP.

import keras
import keras_nlp

Creare un modello

KerasNLP fornisce implementazioni di molte architetture di modelli molto diffuse. In questo tutorial creerai un modello utilizzando GemmaCausalLM, un modello Gemma end-to-end per la creazione di modelli linguistici causali. Un modello linguistico causale prevede il token successivo in base ai token precedenti.

Crea il modello utilizzando il metodo from_preset:

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

La funzione GemmaCausalLM.from_preset() esegue l'inizializzazione del modello da un'architettura e da pesi preimpostati. Nel codice precedente, la stringa "gemma2_2b_en" specifica il modello Gemma 2 2B preimpostato con 2 miliardi di parametri. Sono disponibili anche i modelli Gemma con parametri 7B, 9B e 27B. Puoi trovare le stringhe di codice per i modelli Gemma nelle relative schede Model Variation su Kaggle.

Utilizza summary per visualizzare ulteriori informazioni sul modello:

gemma_lm.summary()

Come puoi vedere dal riepilogo, il modello ha 2,6 miliardi di parametri addestrabili.

Genera testo

Ora è il momento di generare del testo. Il modello ha un metodo generate che genera testo in base a un prompt. L'argomento facoltativo max_length specifica la lunghezza massima della sequenza generata.

Prova con il prompt "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'

Prova a chiamare di nuovo generate con un altro prompt.

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'

Se esegui l'esecuzione su backend JAX o TensorFlow, noterai che la seconda chiamata generate viene restituita quasi istantaneamente. Questo perché ogni chiamata a generate per una determinata dimensione del batch e max_length viene compilata con XLA. La prima esecuzione è costosa, ma quelle successive sono molto più veloci.

Puoi anche fornire prompt raggruppati utilizzando un elenco come input:

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']

(Facoltativo) Prova un altro campionatore

Puoi controllare la strategia di generazione per GemmaCausalLM impostando l'argomento sampler su compile(). Per impostazione predefinita, verrà utilizzato il campionamento "greedy".

Come esperimento, prova a impostare una strategia "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.'

Mentre l'algoritmo greedy predefinito sceglie sempre il token con la probabilità più alta, l'algoritmo Top-K sceglie in modo casuale il token successivo tra i token con le prime K probabilità.

Non è necessario specificare un campionatore e puoi ignorare l'ultimo snippet di codice se non è utile per il tuo caso d'uso. Per scoprire di più sui sampler disponibili, consulta Sampler.

Passaggi successivi

In questo tutorial hai imparato a generare testo utilizzando KerasNLP e Gemma. Ecco alcuni suggerimenti su cosa imparare dopo: