Comienza a usar Gemma con KerasNLP

Ver en ai.google.dev Ejecutar en Google Colab Abrir en Vertex AI Ver código fuente en GitHub

En este instructivo, se muestra cómo comenzar a usar Gemma con KerasNLP. Gemma es una familia de modelos abiertos, ligeros y de vanguardia, construidos a partir de la misma investigación y tecnología utilizada para crear los modelos Gemini. KerasNLP es una colección de modelos de procesamiento de lenguaje natural (PLN) implementados en Keras y ejecutables en JAX, PyTorch y TensorFlow.

En este instructivo, usarás Gemma para generar respuestas de texto a varias instrucciones. Si es la primera vez que usas Keras, consulta Cómo comenzar a usar Keras antes de comenzar, pero no es necesario que lo hagas. Aprenderás más sobre Keras a medida que trabajes en este instructivo.

Configuración

Configuración de Gemma

Para completar este instructivo, primero deberás completar las instrucciones de configuración en la configuración de Gemma. Las instrucciones de configuración de Gemma te muestran cómo hacer lo siguiente:

  • Obtén acceso a Gemma en kaggle.com.
  • Selecciona un entorno de ejecución de Colab con recursos suficientes para ejecutar el modelo Gemma 2B.
  • Genera y configura un nombre de usuario y una clave de API Kaggle.

Después de completar la configuración de Gemma, continúa con la siguiente sección, en la que establecerás variables de entorno para tu entorno de Colab.

Configura las variables de entorno

Configura las variables de entorno para KAGGLE_USERNAME y 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')

Instala dependencias

Instalar Keras y 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

Selecciona un backend

Keras es una API de aprendizaje profundo de varios frameworks y alto nivel, diseñada para ser simple y fácil de usar. Keras 3 te permite elegir el backend: TensorFlow, JAX o PyTorch. Los tres servirán para este instructivo.

import os

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

Importa paquetes

Importa Keras y KerasNLP.

import keras
import keras_nlp

Crear un modelo

KerasNLP proporciona implementaciones de muchas arquitecturas de modelos populares. En este instructivo, crearás un modelo con GemmaCausalLM, un modelo de Gemma de extremo a extremo para el modelado causal de lenguaje. Un modelo causal de lenguaje predice el siguiente token en función de los tokens anteriores.

Crea el modelo con el método 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 crea una instancia del modelo a partir de una arquitectura y ponderaciones preestablecidas. En el código anterior, la cadena "gemma_2b_en" especifica la arquitectura predeterminada: un modelo Gemma con 2,000 millones de parámetros.

Usa summary para obtener más información sobre el modelo:

gemma_lm.summary()

Como puedes ver en el resumen, el modelo tiene 2,500 millones de parámetros entrenables.

Generar texto

Ahora es el momento de generar algo de texto. El modelo tiene un método generate que genera texto basado en una instrucción. El argumento max_length opcional especifica la longitud máxima de la secuencia generada.

Pruébalo con el mensaje "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'

Intenta volver a llamar a generate con otro mensaje.

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'

Si ejecutas backends de JAX o TensorFlow, notarás que la segunda llamada a generate se muestra casi al instante. Esto se debe a que cada llamada a generate para un tamaño de lote determinado y max_length se compila con XLA. La primera ejecución es costosa, pero las siguientes son mucho más rápidas.

También puedes proporcionar instrucciones por lotes utilizando una lista como entrada:

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

Opcional: Prueba una muestra diferente

Puedes controlar la estrategia de generación de GemmaCausalLM si configuras el argumento sampler en compile(). De forma predeterminada, se usará el muestreo de "greedy".

Como experimento, prueba configurar una estrategia de "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'

Mientras que el algoritmo codicioso predeterminado siempre elige el token con la probabilidad más alta, el algoritmo Top-K elige al azar el siguiente token de los tokens de la probabilidad de K superior.

No es necesario que especifiques una muestra, y puedes ignorar el último fragmento de código si no es útil para tu caso de uso. Si deseas obtener más información sobre las muestras disponibles, consulta Muestras de ejemplo.

Próximos pasos

En este instructivo, aprendiste a generar texto con KerasNLP y Gemma. Estas son algunas sugerencias sobre qué aprender a continuación: