Comparativa Llama-3 y Phi-3 utilizando RAG

Comparativa Llama-3 y Phi-3 utilizando RAG

Hoy os comparto instrucciones de como montar Llama-3 y Phi-3 en la nube para poder usar ambos a través de un interfaz gráfico amigable.

Plataforma para la comparativa

Esto es lo que uso habitualmente para montar sistemas de IA en la nube (y que tengo comprobado que funciona):

  • Ollama para servir localmente un LLM (Llama-3): WEB y Github.
  • Llama_Index para la orquestación. LlamaIndex conecta LLMs con tus datos. WEB y Github.
  • Streamlit para construir la interfaz de usuario. Streamlit es un framework en Python de código abierto para que los científicos de datos y los ingenieros de IA/ML desarrollen aplicaciones de datos dinámicas en tan solo unas líneas de código: WEB.
  • LightningAI para el desarrollo y alojamiento. La plataforma de desarrollo de IA: de la idea a la IA en un abrir y cerrar de ojos: WEB.

Arquitectura

La arquitectura que se presenta a continuación ilustra algunos de los componentes clave y cómo interactúan entre sí.

Arquitectura de la comparativa de Phi-3 y Llama-3 con RAG
Arquitectura de la comparativa de Phi-3 y Llama-3 con RAG

Carga de la base de conocimientos (pasos 1 y 2)

Una base de conocimientos es una colección de información relevante y actualizada que sirve de base para RAG. En nuestro caso son los documentos almacenados en una carpeta.

Así los puedes cargar como objetos documento en LlamaIndex:

Cargar documentos almacenados en una carpeta con LlamaIndex para tener la base del RAG.
Cargar documentos almacenados en una carpeta con LlamaIndex para tener la base del RAG.

El modelo de inserción (paso 3)

La inserción es una representación significativa del texto en forma de números.

El modelo se encarga de crear inseciones para los trozos de documentos y las consultas de los usuarios.

La inserción es una representación significativa del texto en forma de números.

Indexación y almacenamiento (paso 4)

Las inserciones creadas por el modelo se guardan en un almacén de vectores que ofrece una rápida recuperación y búsqueda de similitudes mediante la creación de un índice sobre nuestros datos.

Por defecto, LlamaIndex proporciona un almacén vectorial en memoria que es ideal para la experimentación rápida.

Las inserciones creadas por el modelo se guardan en un almacén de vectores que ofrece una rápida recuperación y búsqueda de similitudes mediante la creación de un índice sobre nuestros datos.

Crear una plantilla de instrucciones (paso 5)

Una plantilla personalizada de prompt se utiliza para refinar la respuesta de LLM e incluir también el contexto:

Configuración de un motor de consulta (pasos 6 y 7)

El motor de consulta toma una cadena de consulta y la utiliza para obtener el contexto relevante y luego envía ambos como un prompt al LLM para generar una respuesta final en lenguaje natural.

A continuación se explica cómo configurarlo:

El motor de consulta toma una cadena de consulta y la utiliza para obtener el contexto relevante y luego envía ambos como un prompt al LLM para generar una respuesta final en lenguaje natural.

La interfaz de Chat (paso 8)

Creamos una interfaz de usuario utilizando Streamlit para proporcionar una interfaz de chat para nuestra aplicación RAG.

Creamos una interfaz de usuario utilizando Streamlit para proporcionar una interfaz de chat para nuestra aplicación RAG.

Compara los dos modelos con Lightning.AI en la nube

Esto está montado con LightningAI ⚡️ Studio.

Para probarlo, clona el estudio completo con código y entorno. El ejemplo en inglés está aquí: Compare Llama-3 and Phi-3 using RAG. Yo lo tengo traducido y modificado en castellano pero es un «work in progress» que modifico 20 veces al día.

OPEN IN STUDIO: "Compare Llama-3 and Phi-3 using RAG"
OPEN IN STUDIO: «Compare Llama-3 and Phi-3 using RAG»

Antes de ejecutar nada, mata todos los procesos

Nota: Cada vez que ejecutes la aplicación, asegúrate de que la GPU está libre e intenta matar otros procesos que utilicen la GPU si es necesario.

Dentro de tu terminal haz lo siguiente:

# obtener identificadores de proceso utilizando la GPU
nvidia-smi

# matar un proceso
kill -9 process_id
Cada vez que ejecutes la aplicación, asegúrate de que la GPU está libre e intenta matar otros procesos que utilicen la GPU si es necesario.

Interfaz de usuario de Lightning.AI

Interfaz de usuario de Lightning.AI

¿Dónde está el código? En el archivo main.ipynb

¿Dónde está el código? En el archivo main.ipynb

Ejecutamos el modelo

Ejecutamos el modelo

Ejecutamos Streamlit para tener una interfaz amigable

Ejecutamos Streamlit para tener una interfaz amigable
Streamlit
Streamlit: New App
Streamlit: New App
Ejecutamos app.py en Streamlit
Ejecutamos app.py en Streamlit

Y ya podemos chatear con los modelos

Streamlit: Ready to chat
Streamlit: Ready to chat

Cambiando el modelo se pueden comparar las respuestas:

Seleccionar el SLM en la interfaz: Phi-3 o Llama-3
Seleccionar el SLM en la interfaz: Phi-3 o Llama-3

¿Quieres saber más sobre la inteligencia artificial generativa de Microsoft? En DQS/ te asesoramos. ¿Por qué no nos preguntas cómo podemos ayudarte?

Información basada en la publicación de Twitter/X de Akshay Pachaar (AI Engineering @LightningAI) y el modelo «Compare Llama-3 and Phi-3 using RAG» publicado en Lightning.ai.

Publicaciones Similares

¿Te ha parecido interesante? ¿Tienes dudas sobre el contenido?
Para cualquier pregunta ponte en contacto conmigo.