En algunas de las soluciones que desarrollamos en Agentes de IA utilizamos una técnica conocida como RAG (Retrieval Augmented Generation), “Generación Aumentada por Recuperación”. Es una técnica que consiste en añadir contenido relacionado al contexto a la hora de hacer una consulta a un modelo para que este pueda generar su respuesta teniendo en cuenta esa información aportada.
Esa contenido extra es aportado por el cliente y generalmente es contenido que el modelo “desconoce”. Aunque en teoría los proveedores con los que trabajamos (OpenAI, Anthropic, Groq) no utilizan los datos enviados por el usuario a través de la API para entrenar sus modelos sin autorización expresa, algunos de los clientes sienten la necesidad de disponer de un entorno controlado en el que compartir sus contenidos sin riesgo.
Solución propuesta
Existe la posibilidad de utilizar modelos en local gracias a aplicaciones como GPT4All, LMStudio, AnythingLLM y Ollama. El problema está en el rendimiento obtenido al ejecutar en un equipo en local, ya que se requiere un hardware que reúna ciertos requisitos de CPU, RAM y GPU.
Aquí entra en juego la siguiente restricción: optimizar al máximo el rendimiento implementando un hardware de bajo presupuesto (lo que es lo mismo, adiós GPU). Como versa la famosa canción “New York, New York”, “If I can make it there, I′ll make it anywhere”.
En nuestro caso nos decantamos por utilizar Ollama por su simplicidad de uso en un entorno linux de línea de comandos y por la facilidad para descargar y usar los diferentes modelos.
Hardware utilizado
Utilizamos un servidor dedicado con las siguientes características:
- CPU: Intel Xeon E5-1630v3 – 4 c / 8 t – 3.7 GHz / 3.8 GHz
- Memoria: 64 GB DDR4 ECC
- Disco Duro: 2 x 480 GB SSD SATA Soft RAID
- Ancho de banda: 100 Mbit/s
- Sistema operativo: Debian Linux 11
Objetivo
Determinar qué modelos con la capacidad de ser ejecutados en un entorno limitado son los que mejor rendimiento y mayor calidad pueden ofrecer para ser utilizados como asistentes virtuales.
Resumen de la experiencia
Se evaluaron varios modelos de IA respondiendo a tres preguntas distintas, midiendo el tiempo de respuesta, la cantidad de caracteres de cada respuesta y la calidad de las respuestas en una escala de 1 a 10.
El tiempo de respuesta se mide desde que se envía la petición hasta que se recibe completa (no se utiliza streaming).
Para asegurar la mayor objetividad posible, la calidad de las respuestas fue determinada por un jurado independiente y voluntario al que se les hizo llegar solamente el enunciado de la pregunta y las respuestas de los diferentes modelos, sin especificar el modelo ni el tiempo de respuesta. Sus valoraciones tuvieron en cuenta aspectos como la redacción, el tono, la longitud y la exactitud de la respuesta.
Modelos LLM
Los modelos LLM son entrenados utilizando grandes cantidades de texto y aprenden a predecir la palabra o token siguiente en una secuencia de texto basándose en las palabras anteriores. A medida que se entrenan en más datos, se vuelven más capaces de comprender contextos complejos, generar texto coherente y realizar tareas relacionadas con el lenguaje como traducción, resumen, y respuesta a preguntas. Es decir, cuanto mayor es la cantidad de datos usados para su entrenamiento, mayores prestaciones ofrecen en teoría.
Para reducir el tamaño de estos modelos y hacerlos eficientes a nivel local, se aplica una técnica de “compresión” denominada cuantización. Por ejemplo, si los datos de un modelo vienen representados por números de 32bits, se busca la manera de representarlos utilizando menos bits. Por poner un símil más familiar, consistiría en algo parecido al redondeo que usamos para referirnos al número PI. En los ejercicios en el colegio nos bastaba con utilizar 3,14 para facilitar los cálculos pero para fórmulas de estructuras arquitectónicas habría que tener en cuenta más decimales para que el resultado sea más preciso. Igual ocurre con la cuantizar un modelo, algunas de sus funcionalidades o propiedades se pierden en favor de requerir menor potencia de computación.
Dependiendo del tamaño del modelo y de tipo de cuantización, el modelo será mejor o peor para determinadas labores. En nuestro caso hemos optado por modelos de menos de 8B (8 mil millones de parámetros) con diferentes tipos de cuantizaciones. Solo hemos hecho una excepción al introducir en el experimento el modelo “Mixtral 8x7b” que en su cuantización de 4-bit podría parecer, a priori, conveniente para nuestras restricciones de hardware.
Lista de modelos utilizados en el experimento
Gemma
El modelo abierto de Google. Utilizamos la versión 7b y la versión instruct en diferentes cuantizaciones.
Llama
El conocido modelo de Meta. Utilizamos su versión 2 (7b) como su versión 3 (8b y 8b-instruct-q2_K)
Phi3
El modelo abierto de Microsoft. Solo 3.8b, muy ligero, del que probamos también la versión mini instruct en un par de cuantizaciones.
Openchat
Modelo abierto 7b que ha superado en algunas pruebas a ChatGPT 3.5. También usamos 2 cuantizaciones diferentes.
Mistral
Famoso por haber superado a Llama 2 con solo la mitad de parámetros (7b).
Qwen
El modelo de Alibaba, en su versión 1.5. Uno de los que posee el abanico más amplio de versiones dónde elegir. Nosotros probaremos la versión 4b y la 7b.
Dolphin-llama3
Modelo 8b basado en Llama3 y sin censura.
Llava
Modelo multimodal, al estilo GPT-4.
Wizardlm2
Otro modelo con el sello de Microsoft.
Mixtral 8x7b
Es un modelo que combina un conjunto de modelos preentrenados.
Modelos de control
A modo de control y para tener una referencia, se tendrán en cuenta también las respuestas generadas por la API de OpenAI para los modelos GPT-3.5 y GPT-4.
Análisis Detallado por Pregunta
Pregunta 1: «¿Por qué el cielo es azul?»
- ChatGPT 4: 16 segundos – calidad 7
- ChatGPT 3.5: 11 segundos – calidad 4
- Modelo más rápido: Qwen (12 segundos – Calidad 6)
- Mejor calidad de respuesta: Llama3 (Calidad 10 – 108 segundos)
- Peor calidad de respuesta: Llama2 (Calidad 1)
- Mejor relación calidad/tiempo: Qwen
Observaciones
Esta pregunta (en inglés) se ha convertido en una especie de estándar para probar los modelos. Con la respuesta buscamos probar la coherencia de idioma y la calidad de la redacción. Algunas de ellas mostraron la respuesta en spanglish. Sorprendentemente a nuestro jurado no le impresionó en gran medida la respuesta de GPT-4 y la situaron pode debajo de la generada por modelos mucho menos potentes.
Pregunta 2: «¿Qué pesa más, un kilo de paja o medio kilo de hierro?»
- ChatGPT 4: 7 segundos – calidad 10
- ChatGPT 3.5: 6 segundos – calidad 3
- Modelo más rápido: Qwen (20 segundos – Calidad 8)
- Mejor calidad de respuesta: gemma:7b-instruct-q4_K_M (Calidad 9 – 59 segundos)
- Peor calidad de respuesta: Qwen:7b (Calidad 1 – 52 segundos)
- Mejor relación calidad/tiempo: Qwen
Observaciones
La mayoría de modelos cayeron en la trampa y se pusieron manos a la obra a calcular densidades, masas y volúmenes para determinar erróneamente que medio kilo de hierro pesa más que un kilo de plumas, lo que ocasionó que la puntuación asignada a la respuesta bajara drásticamente. Si bien es cierto que este tipo de lógica no es estrictamente necesaria para un asistente virtual como el que andamos buscando, sí que puede influir en la credibilidad final de la respuesta del chatbot.
Pregunta 3: «¿Qué es Dattabot y en qué puede ayudarme?»
- ChatGPT 4: 18 segundos – calidad 9
- ChatGPT 3.5: 6 segundos – calidad 7
- Modelo más rápido: Qwen (46 segundos – Calidad 7)
- Mejor calidad de respuesta: (Calidad 9)
Phi3 (94 segundos)
Gemma:7b-instruct-v1.1-q4_K_M (130 segundos)
Llama3 (140 segundos)
- Peor calidad de respuesta: llama3:8b-instruct-q2_K (Calidad 1 – 100 segundos)
- Mejor relación calidad/tiempo: Qwen
Observaciones
Esta es la conclusión más esperada ya que es justamente un caso de uso RAG. A todos ellos les aportamos el prompt y el mismo contexto con información relativa a Dattabot para que elaboraran su respuesta. Salvo 2 excepciones (llama3:8b-instruct-q2_K que ignoró el prompt y dio la respuesta completamente en inglés, y mixtral:8x7b que superó los 5 minutos de límite impuestos para contestar), todas las respuestas están de notable para arriba. Pese a todo, a nuestro jurado le pareció que nadie merecía el 10 (ni siquiera GPT-4).
Los tiempos se disparan en todos los casos.
Resumen Total:
- Modelo con el mejor tiempo promedio: Qwen 4b
- Modelo con la mejor calidad promedio: Gemma 7b-instruct-q4_K_M
- Modelo con la mejor relación calidad/tiempo: Qwen 4b
Conclusiones Finales:
Basándonos en el análisis, el modelo Gemma 7b-instruct-q4_K_M parece ser el más adecuado en términos de calidad de respuesta a través de las diferentes preguntas, mientras que el modelo Qwen 4b destaca por su rapidez en responder. Para decisiones de uso práctico, se debería considerar qué es más crítico para el contexto de uso: la rapidez o la profundidad de las respuestas.
En segundo puesto tanto por velocidad como por calidad ha quedado Phi3 3.8b-mini-instruct-4k-q4_K_M, por lo que también podría ser un modelo a considerar.
Cabrían 2 pruebas más para extraer más conclusiones:
- Respuesta en streaming: mejoraría la experiencia por parte del usuario.
- Varias llamadas simultáneas: cuánto aumentará el tiempo de espera cuando el servidor reciba más de una petición a la vez.
En cualquier caso, queda demostrado que se puede ejecutar con solvencia un modelo en local en un hardware reducido. Sin embargo, para un uso intensivo se recomendaría usar equipos con GPU para reducir el tiempo de respuesta y para tener la opción de utilizar modelos de mayor tamaño.
Datos del estudio
Tabla completa de datos
Ordenados por relación calidad/tiempo
- qwen
- phi3:3.8b-mini-instruct-4k-q4_K_M
- gemma:7b-instruct-q4_K_M
- phi3
Ordenados por velocidad
- qwen
- phi3:3.8b-mini-instruct-4k-q4_K_M
- phi3
- dolphin-llama3
Ordenados por calidad
- gemma:7b-instruct-q4_K_M
- phi3:3.8b-mini-instruct-4k-fp16
- gemma
- llama3