Comienza a usar Gemma con KerasNLP

Ver en ai.google.dev Ejecutar en Google Colab Abrir en Vertex AI Ver el 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 última generación creados a partir de la misma investigación y tecnología que se usaron para crear los modelos de Gemini. KerasNLP es una colección de modelos de procesamiento de lenguaje natural (PLN) implementados en Keras que se pueden ejecutar 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, te recomendamos que leas Cómo comenzar a usar Keras antes de empezar, pero no es necesario. 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 de Gemma. Las instrucciones de configuración de Gemma te muestran cómo hacer lo siguiente:

  • Accede a Gemma en kaggle.com.
  • Selecciona un entorno de ejecución de Colab con recursos suficientes para ejecutarlo el modelo Gemma 2B.
  • Generar y configurar un nombre de usuario Kaggle y una clave de API.

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.

Configure las variables de entorno

Configura 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

Instala 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"

Seleccionar un backend

Keras es una API de aprendizaje profundo de varios marcos de alto nivel diseñada para ofrecer simplicidad y facilidad de uso. Keras 3 te permite elegir el backend: TensorFlow, JAX o PyTorch. Las tres opciones funcionarán en este instructivo.

import os

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

Importa paquetes

Importar Keras y KerasNLP.

import keras
import keras_nlp

Crea 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 de lenguaje causal. Un modelo de lenguaje causal predice el siguiente token basándose en los anteriores.

Crea el modelo con el método from_preset:

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

La función GemmaCausalLM.from_preset() crea una instancia del modelo a partir de una arquitectura y pesos preestablecidos. En el código anterior, la cadena "gemma2_2b_en" especifica el ajuste predeterminado del modelo Gemma 2 2B con 2,000 millones de parámetros. También están disponibles los modelos Gemma con parámetros 7B, 9B y 27B. Puedes encontrar las cadenas de código para los modelos de Gemma en sus fichas de Variación del modelo en Kaggle.

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

gemma_lm.summary()

Como puedes ver en el resumen, el modelo tiene 2,600 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 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'

Vuelve a llamar a generate con otra instrucción.

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'

Si ejecutas en backends 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 posteriores son mucho más rápidas.

También puedes proporcionar instrucciones en lotes usando una lista como entrada:

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

Opcional: Prueba con otra muestra

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

Como experimento, intenta establecer una estrategia "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.'

Mientras que el algoritmo codicioso predeterminado siempre elige el token con la mayor probabilidad, el algoritmo Top-K elige de forma aleatoria el siguiente token entre los tokens de probabilidad de Top-K.

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 los muestras disponibles, consulta Samplers.

¿Qué sigue?

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