TinyLlama 1.1B - El tamaño no importa

TinyLlama 1.1B – El tamaño no importa

Nodo de origen: 3081711

Introducción

En el panorama en rápido crecimiento de la inteligencia artificial y el aprendizaje automático, TinyLlama 1.1B emerge como un desarrollo digno de mención. En una era en la que las limitaciones computacionales plantean desafíos para ejecutar modelos más complejos, TinyLlama se destaca por desafiar las expectativas. Muestra el notable rendimiento de los modelos compactos.

Este artículo tiene como objetivo proporcionar un análisis de TinyLlama 1.1B, un modelo de lenguaje grande y compacto. Profundizaremos en sus aspectos centrales, como cómo se capacitó en puntos de referencia de desempeño y la implementación práctica utilizando la plataforma Hugging Face. Incluso ejecutaremos este modelo en Google Colab gratuito y probaremos sus habilidades matemáticas y de razonamiento.

Pequeña Llama 1.1B

OBJETIVOS DE APRENDIZAJE

  • Obtenga una comprensión integral de TinyLlama 1.1B
  • Explore el intrincado proceso de capacitación por el que ha pasado el modelo
  • Analizar el rendimiento y comparar los resultados para evaluar su eficacia.
  • Conozca los pasos prácticos para implementar TinyLlama 1.1B usando ejemplos de codificación

Este artículo fue publicado como parte del Blogatón de ciencia de datos.

Tabla de contenidos.

¿Qué es TinyLlama 1.1B?

TinyLlama 1.1B, parte del proyecto Llama más amplio, es un testimonio de los avances en el modelado del lenguaje. Es un modelo con 1.1 millones de parámetros, entrenado en la asombrosa cantidad de 3 billones de tokens, lo que lo coloca en una posición única en el panorama de la IA. A diferencia de sus homólogos más grandes, TinyLlama 1.1B está diseñado para ser más eficiente y manejable, lo que lo convierte en una buena opción para aplicaciones con recursos computacionales limitados.

Este modelo de código abierto democratiza el acceso a tecnología de inteligencia artificial de última generación, lo que permite a muchos desarrolladores e investigadores explorar e innovar en el campo del procesamiento del lenguaje natural. Es un modelo conocido por su capacidad para equilibrar el rendimiento con el consumo de recursos, una consideración crítica en los diversos entornos computacionales actuales.

Proceso de formación de TinyLlama 1.1B

El proceso de formación de TinyLlama 1.1B es fascinante, como el modelo en sí. El entrenamiento de TinyLlama se llevó a cabo solo durante 90 días, en las 16 GPU A100-40G. El entrenamiento previo se realizó en 3 billones de tokens y el equipo de TinyLlama ha publicado el modelo intermedio entre cada medio billón. 

En cuanto a los datos, Slimpajama y Starcoderdata se tomaron con un tamaño de conjunto de datos combinado de 950 mil millones de tokens. La proporción de lenguaje natural a código se mantuvo en 7:3, es decir, el 70% de los datos eran lenguaje natural y el 30% era código. Por lo tanto, para alcanzar la marca de 3 billones de tokens para el ajuste, TinyLlama se sometió a 3 épocas de entrenamiento para este conjunto de datos. 

Incluso se ha lanzado una versión de chat de TinyLlama llamada TinyLlama-Chat. Inicialmente, este modelo se sometió a ajustes en el conjunto de datos UltraChat, que contiene diversas conversaciones sintéticas generadas por ChatGPT. Este paso fue crucial para hacer que el modelo manejara diferentes contextos y estilos conversacionales.

Se logró un mayor refinamiento utilizando DPOTrainer en el conjunto de datos UltraFeedback. Esta fase de capacitación se centró en alinear las respuestas del modelo para alinearse con patrones de conversación similares a los humanos. El resultado es un modelo que no sólo capta información sobre diferentes temas sino que incluso interactúa de forma natural y atractiva.

También puede leer: Primeros pasos con LlaMA 2: una guía para principiantes

Resultados de rendimiento y de referencia

La evaluación del rendimiento de TinyLlama 1.1B revela su capacidad para ofrecer respuestas de alta calidad rápidamente. Su formación le ha dotado de la capacidad de atender aplicaciones multilingües, una característica importante en nuestro mundo globalizado. A pesar de su tamaño más pequeño, TinyLlama 1.1B todavía está alcanzando a sus contrapartes más grandes en cuanto a calidad y velocidad de respuesta, lo que la convierte en una herramienta potente en diferentes aplicaciones de IA.

Los puntos de referencia de TinyLlama 1.1B, aunque menos extensos que los de modelos más grandes, aún demuestran su competencia en el manejo de tareas de lenguaje complejas. Su capacidad para generar respuestas coherentes y contextualmente relevantes en varios idiomas es particularmente impresionante. El modelo fue probado en diferentes puntos de referencia como HellaSwag, WinoGrande, ARC, MMLU y otros. La puntuación media combinada resultó ser 52.99. Esto es mucho mejor que el otro modelo de mil millones de parámetros, es decir, el Pythia 1B, que logró una puntuación media de 1. La tabla muestra las puntuaciones individuales de cada punto de referencia.

Puntuación TinyLlama 1.1B
hellaswag 59.2
Obqá 36.0
WinoGrande 59.12
ARCO_c 30.12
ARCO_e 55.25
boolq 57.83
piqa 73.29
avg 52.9

TinyLlama – Primeros pasos

Aquí, en esta sección, descargaremos la versión cuantificada de TinyLlama Chat y la ejecutaremos en Google Colab. Antes de descargar el modelo, debemos descargar e instalar los siguientes paquetes de Python

!CMAKE_ARGS="-DLLAMA_CUBLAS=on" FORCE_CMAKE=1 pip3 install llama-cpp-python 
!pip3 install huggingface-hub 
  • El proyecto CMAKE_ARGS=”-DLLAMA_CUBLAS=activado” y FORCE_CMAKE=1, permitirá que llama_cpp_python utilice la GPU Nvidia disponible en la versión gratuita de colab.
  • Luego instalamos el llama_cpp_python paquete a través del pip3
  • Incluso descargamos el abrazandoface-hub, con el cual estaremos descargando el Chat cuantizado TinyLlama 1.1B

Para probar el modelo de chat TinyLlama 1.1B, primero debemos descargar la versión cuantificada del mismo. Para descargarlo, ejecutaremos el siguiente código.

from huggingface_hub import hf_hub_download

# specifying the model name
model_name = "TheBloke/TinyLlama-1.1B-Chat-v1.0-GGUF"
# specifying the type of quantization of the model
model_file = "tinyllama-1.1b-chat-v1.0.Q8_0.gguf"

# download the model by specifying the model name and quantized model name
model_path = hf_hub_download(model_name, filename=model_file)

Aquí el abrazando_cara_hub La biblioteca se encargará del proceso de descarga del modelo cuantificado. Para ello importamos el hf_hub_descargar que toma en los siguientes parámetros:

  • nombre del modelo: A esta variable le pasamos el modelo que deseamos descargar. Aquí deseamos descargar el modelo TinyLlama 1.1B Chat GGUF.
  • archivo_modelo: Aquí especificamos el tipo de modelo cuantificado que queremos descargar. Aquí descargaremos la versión cuantificada de 8 bits de TinyLlama 1.1B Chat.
  • Finalmente, pasamos estos parámetros al hf_hub_descargar, que toma estos parámetros y descarga el modelo especificado. Después de la descarga, devuelve la ruta donde se descargó el modelo.
  • Esta ruta devuelta se está guardando en el modelo_ruta variable.

Ahora, podemos cargar este modelo a través del llama_cpp_python biblioteca. El código para cargar el modelo será como el siguiente.

from llama_cpp import Llama
llm = Llama(
    model_path=model_path,
    n_ctx=512,  # the number of i/p tokens the model can take
    n_threads=8, # the number of threads to use
    n_gpu_layers=40# how many layers of the model to offload to the GPU
)

Importamos el Llama clase de la llama_cpp, que toma en los siguientes parámetros

  • ruta_modelo: Esta variable toma la ruta donde está almacenado nuestro modelo. Hemos obtenido la ruta del paso anterior, que proporcionaremos aquí.
  • n_ctx: Aquí, damos la longitud del contexto para el modelo. Por ahora, proporcionamos 512 tokens como longitud del contexto.
  • n_hilos: Aquí mencionamos el número de hilos que utilizará el Llama clase
  • n_gpu_layers: Especificamos esto si tenemos una GPU en ejecución, lo que hacemos en el caso de la colaboración gratuita. A esto le pasamos 40, lo que implica que queremos descargar todo el modelo en la GPU y no queremos que ninguna parte se ejecute en la RAM del sistema.
  • Finalmente, creamos un objeto a partir de esto. Llama clase y se la damos a la variable llm

La ejecución de este código cargará el modelo cuantificado de TinyLlama 1.1B Chat en la GPU y establecerá la longitud de contexto adecuada. Ahora es el momento de realizar algunas inferencias sobre este modelo. Para esto, trabajamos con el siguiente código.

output = llm(
  "<|im_start|>usernWho are you?<|im_end|>n<|im_start|>assistantn", # User Prompt
  max_tokens=512,  # Number of output tokens generated
  stop=["</s>"],   # Token which tells the LLM to stop
)
print(output['choices'][0]['text']) # Model generated text

Para inferir el modelo, pasamos los siguientes parámetros al LLM:

  • plantilla de mensaje/chat: Esta es la plantilla de mensaje necesaria para chatear con el modelo. La plantilla antes mencionada(es decir , ) es el que funciona para el modelo TinyLlama 1.1B Chat. En la plantilla, la oración después del Usuario es el Aviso del usuario y la generación se generará después del Asistente.
  • tokens_max: A esta variable, le pasamos un valor que define la cantidad máxima de tokens que un modelo de lenguaje grande puede generar cuando se proporciona un mensaje. Por ahora, lo limitamos a 512 tokens.
  • parada: A esta variable le pasamos el token de parada. El token de parada le indica al modelo de lenguaje grande que deje de generar más tokens. Para TinyLlama 1.1B Chat, el token de parada es

El texto generado se almacena en la variable de salida cuando ejecutamos esto. El resultado se genera en un formato similar a la llamada a la API de OpenAI. Por lo tanto, podemos acceder a la generación a través de la declaración impresa dada, de manera similar a cómo accedemos a la generación desde las respuestas de OpenAI. El resultado generado se puede ver a continuación.

Pequeña Llama 1.1B

Para un modelo de este tamaño, la respuesta generada es de primer nivel. Esto es inesperado en un modelo de este tamaño; la gramática y el tono se ven perfectamente bien y no hay señales de repetición de oraciones. Intentemos probar las capacidades de razonamiento del modelo.

output = llm(
  "<|im_start|>usernIf all students who study hard get good grades, 
  and John got good grades, can we conclude that John studied hard?
  <|im_end|>n<|im_start|>assistantn",
  max_tokens=512,
  stop=["</s>"],
)


print(output['choices'][0]['text'])
Pequeña Llama 1.1B
output = llm(
  "<|im_start|>usernHow fast can a snake fly?n<|im_end|>n<|im_start|>assistantn",
  max_tokens=512,
  stop=["</s>"],
)


print(output['choices'][0]['text'])
"

Hasta ahora, todo bien. De los ejemplos que hemos visto, el modelo genera buenas respuestas. Pero esto puede no ser cierto en todos los casos porque solo lo probamos en un número limitado de preguntas. Incluso probemos el modelo en sus capacidades de razonamiento matemático.

output = llm(
  "<|im_start|>usernJohn is twice as old as Sarah, and Sarah is three years 
  older than Mary. If Mary is 10 years old, how old is John?n<|im_end|>n<|im_start|>assistantn",
  max_tokens=512,
  stop=["</s>"],
)


print(output['choices'][0]['text'])
"
output = llm(
  "<|im_start|>usernWhat is the missing number in this pattern: 
  1, 4, 9, 16, __, 36?n<|im_end|>n<|im_start|>assistantn",
  max_tokens=512,
  stop=["</s>"],
)


print(output['choices'][0]['text'])
"

De los ejemplos que hemos visto, queda claro que TinyLlamaChat tiene un rendimiento extremadamente pobre al responder preguntas simples de aptitud en matemáticas. Esto es de esperarse porque el modelo no fue entrenado previamente en ningún conjunto de datos matemáticos. La calidad de la generación se puede mejorar ajustándola en el conjunto de datos matemáticos.

En cuanto al ajuste, TinyLlama es una opción ideal para aquellos que tienen restricciones de hardware y desean ajustar modelos de lenguaje grandes en su conjunto de datos específico.

Posibles casos de uso y aplicaciones

Dado el tamaño compacto de TinyLlama, que cuenta con 1.1 millones de parámetros, sus aplicaciones se adaptan principalmente a entornos donde los modelos más grandes podrían no ser tan viables debido a limitaciones de hardware o una mayor eficiencia. A continuación se muestran algunos casos de uso específicos teniendo en cuenta su tamaño:

Aplicaciones móviles: El tamaño más pequeño de TinyLlama lo convierte en una buena opción para integrarse en aplicaciones móviles donde es necesario el procesamiento en el dispositivo. Esto incluye aplicaciones de traducción de idiomas, funciones de asistente personal y chatbots que pueden funcionar de manera eficiente en teléfonos inteligentes.

Sistemas integrados en dispositivos IoT: En el campo del Internet de las cosas (IoT), los recursos informáticos suelen ser limitados; TinyLlama se puede utilizar para agregar capacidades de procesamiento inteligente del lenguaje a diferentes equipos, como asistentes domésticos inteligentes, tecnología portátil y otros equipos conectados similares.

Computación de borde: Para aplicaciones que se benefician del procesamiento de datos más cerca de la fuente en lugar de en un entorno de nube centralizado, TinyLlama se puede emplear de manera efectiva. Esto incluye el procesamiento del lenguaje en tiempo real en sistemas automotrices, equipos de fabricación y otros dispositivos de vanguardia.

Investigación sobre idiomas de bajos recursos: Debido a su tamaño más pequeño y menores requisitos computacionales, TinyLlama puede ser una herramienta valiosa en la investigación lingüística, especialmente para lenguajes de escasos recursos donde el entrenamiento con modelos a gran escala no es factible.

Herramientas educativas: En entornos educativos, especialmente aquellos con acceso limitado a recursos informáticos de alta gama, TinyLlama se puede utilizar para desarrollar aplicaciones de aprendizaje de idiomas, herramientas educativas interactivas y otras ayudas para el aprendizaje.

Generación de contenidos para pequeñas empresas: Las pequeñas empresas con recursos limitados pueden utilizar TinyLlama para generar contenido, como descripciones de productos, textos de marketing y correspondencia con los clientes, sin la necesidad de una gran potencia informática.

Creación de prototipos y experimentación: Los desarrolladores e investigadores que deseen experimentar con modelos de lenguaje pero no tengan acceso a recursos informáticos de alta potencia pueden utilizar TinyLlama para crear prototipos y desarrollar nuevas aplicaciones de PNL.

Análisis de datos eficiente: TinyLlama se puede utilizar para análisis de texto y extracción de datos en escenarios donde se necesita un procesamiento rápido y eficiente, como analizar comentarios de clientes, respuestas a encuestas o interacciones en redes sociales.

Conclusión

TinyLlama 1.1B es un testimonio de los avances en el campo de la IA y el procesamiento del lenguaje natural. Su desarrollo y disponibilidad generalizada son vitales para crear modelos de lenguaje de inferencia más eficientes, pequeños y rápidos. Al equilibrar una huella de parámetros más pequeña con un rendimiento sólido, TinyLlama 1.1B aborda la necesidad crítica de modelos potentes y prácticos para una amplia gama de aplicaciones. Su capacidad para comprender y generar lenguaje de manera humana y al mismo tiempo ser lo suficientemente liviano para diferentes entornos informáticos lo convierte en una opción ideal para las personas que luchan por ejecutar modelos de lenguaje grandes en sus máquinas. El modelo se puede ajustar fácilmente en un conjunto de datos y se puede entrenar con recursos informáticos limitados. 

Las conclusiones clave de este artículo incluyen

  • Diseñado para ser eficiente, TinyLlama 1.1B está disponible para una audiencia más amplia, incluidos aquellos con recursos computacionales limitados, lo que lo hace adecuado para varias aplicaciones.
  • El modelo se sometió a un extenso proceso de capacitación, que incluyó capacitación en 3 billones de tokens durante 90 días utilizando 16 GPU A100-40G.
  • A pesar de su tamaño más pequeño, TinyLlama 1.1B ofrece respuestas contextualmente relevantes y de alta calidad en varios idiomas, lo que lo convierte en un modelo a considerar.
  • Es una buena opción para aplicaciones móviles, equipos de IoT, herramientas educativas y más; su tamaño compacto y su eficiencia permiten una amplia gama de aplicaciones.
  • Sus menores requisitos computacionales lo convierten en una herramienta valiosa en la investigación lingüística, especialmente para lenguas de escasos recursos.
  • El modelo es una buena opción para quienes experimentan con modelos de lenguaje o desarrollan nuevas aplicaciones de PNL, principalmente en entornos con potencia computacional limitada.

Preguntas frecuentes

Q1. ¿Qué es TinyLlama 1.1B?

A. TinyLlama 1.1B es un modelo de lenguaje grande compacto y eficiente con 1.1 mil millones de parámetros, entrenado en 3 billones de tokens, adecuado para aplicaciones con recursos computacionales limitados.

Q2. ¿Cómo se entrenó TinyLlama 1.1B?

A. Se entrenó durante 90 días utilizando 16 GPU A100-40G en conjuntos de datos que incluyen Slimpajama y Starcoderdata, con una relación de lenguaje natural a código de 7:3.

Q3. ¿Cuáles son los puntos de referencia de rendimiento de TinyLlama 1.1B?

A. TinyLlama 1.1B muestra sus habilidades en el manejo de tareas lingüísticas complejas, con una puntuación promedio de 52.99 en puntos de referencia como HellaSwag, MMLU y WinoGrande.

Q4. ¿Cuáles son algunos casos de uso potenciales de TinyLlama 1.1B?

A. Es adecuado para aplicaciones donde el tamaño y la velocidad son una cuestión importante. Estos incluyen aplicaciones móviles, equipos de IoT como dispositivos de automatización del hogar, generación de contenido para pequeñas empresas y análisis de datos eficiente.

Q5. ¿TinyLlama 1.1B es adecuado para desarrolladores con recursos limitados?

A. Absolutamente, es una opción perfecta para desarrolladores e investigadores que carecen de acceso a recursos informáticos de alta potencia para crear prototipos y desarrollar nuevas aplicaciones de PNL. El modelo TinyLlama puede incluso ejecutarse en una máquina Raspberry Pi.

Q6. ¿Cómo se desempeña TinyLlama 1.1B en tareas de razonamiento matemático?

A. Si bien realmente sobresale en diferentes tareas lingüísticas, muestra limitaciones en el razonamiento matemático, que pueden mejorarse ajustando los conjuntos de datos relevantes.

Los medios que se muestran en este artículo no son propiedad de Analytics Vidhya y se utilizan a discreción del autor.

Sello de tiempo:

Mas de Analítica Vidhya