Saltar al contenido principal

Pila de llamas: Una guía con ejemplos prácticos

Llama Stack es un conjunto de herramientas y API estandarizadas desarrolladas por Meta que simplifican el proceso de creación y despliegue de grandes aplicaciones de modelos lingüísticos.
Actualizado 3 oct 2024  · 8 min de lectura

Aunque IA generativa han ganado tracción masiva, aún queda por resolver el reto de crear aplicaciones eficientes y coherentes y desplegarlas.

Pila Llamaun proyecto de código abierto de Meta, aborda esta complejidad.

Llama Stack introduce un marco estandarizado y API modulares que ofrecen una experiencia de desarrollo más rápida y fluida. Define y normaliza los componentes básicos necesarios para llevar al mercado aplicaciones de IA generativa.

En este artículo, te guiaré para que empieces a utilizar Llama Stack siguiendo instrucciones paso a paso. Si eres un desarrollador que se prepara para desplegar una aplicación de IA en producción, asegúrate de consultar el repositorio Llama Stackya que está en continua evolución.

Desarrollar aplicaciones de IA

Aprende a crear aplicaciones de IA utilizando la API OpenAI.
Empieza a hacer Upskilling gratis

¿Qué es Llama Stack?

Llama Stack es un marco creado para agilizar el desarrollo y despliegue de aplicaciones de IA generativa construidas sobre modelos Llama de Meta. Lo consigue proporcionando una colección de API estandarizadas y componentes para tareas como la inferencia, la seguridad, la gestión de la memoria y las capacidades de los agentes.

He aquí sus objetivos y ventajas:

  • Normalización: El conjunto de API ofrece una interfaz y un entorno de trabajo coherentes para que los desarrolladores los utilicen y adapten rápidamente sus aplicaciones cuando haya nuevos modelos disponibles.
  • Sinergia: Al abstraer funcionalidades complejas en API, permite la colaboración entre varias herramientas y componentes, en favor de la modularidad y la flexibilidad.
  • Desarrollo suave: Llama Stack ofrece peajes para un ciclo de vida de desarrollo simplificado, predefiniendo las funcionalidades básicas y acelerando la implantación.

Distribución de la pila de llamas

Fuente: Meta AI

Componentes y API de Llama Stack

Llama Stack viene con varias API, cada una dirigida a un conjunto específico de tareas en la construcción de una aplicación de IA generativa.

API de inferencia

La API de inferencia se encarga de generación de texto o indicaciones multimodal Llama a variaciones. Sus características principales son:

  • Admite varias estrategias de descodificación, como el muestreo top-k.
  • Gestiona peticiones por lotes y respuestas por flujos, útil para aplicaciones a gran escala.

La API define varias configuraciones que permiten a los desarrolladores controlar el comportamiento del modelo (por ejemplo, FP8 o BF16 cuantización) en función de los requisitos de su aplicación.

Seguridad API

La API de seguridad está pensada para el despliegue responsable de modelos de IA mediante la moderación de contenidos y el filtrado de resultados perjudiciales o potencialmente sesgados. Es configurable para definir niveles de infracción (por ejemplo, INFO, WARN, ERROR) y para devolver mensajes procesables a los usuarios.

API de memoria

La API de Memoria otorga la capacidad de retener y referirse a interacciones pasadas y crear conversaciones más coherentes y conscientes del contexto. La variedad de configuraciones de memoria ofrece a los desarrolladores la posibilidad de elegir los tipos de almacenamiento en función de las necesidades de la aplicación. Sus características principales son:

  • Permite un almacenamiento flexible de la memoria proporcionando múltiples configuraciones, como vector, clave-valor, palabra clave y grafo, que son esencialmente métodos de almacenamiento de memorias de conversación.
  • Permite insertar, consultar, actualizar y eliminar documentos dentro de los bancos de memoria. Los resultados de la consulta se devuelven como trozos con puntuaciones de relevancia.

API Agenética

La API Agentic permite a los LLM utilizar herramientas y funciones externas, permitiéndoles realizar tareas como la búsqueda en la web, la ejecución de código o la recuperación de memoria. La API permite a los desarrolladores configurar agentes con herramientas y objetivos específicos. Admite interacciones multiturno en las que cada turno consta de varios pasos. Sus características principales son:

  • Viene con herramientas integradas como brave_search, wolfram_alpha, photogen y code_interpreter. Podemos utilizar estas herramientas para gestionar peticiones o ejecutar código dentro del contexto del modelo.
  • Funciona con la API de Memoria para recuperar información relevante que mejore el contexto a largo plazo.
  • Los modelos pueden ejecutar tareas a través de múltiples pasos, como la inferencia, la ejecución de herramientas, la recuperación de memoria y las comprobaciones de seguridad.

Otras API

Éstas son las otras API que ofrece Llama Stack: 

Cómo instalar y configurar Llama Stack

Implementaremos un proyecto de ejemplo en Llama Stack para familiarizarnos con la idea general y las capacidades de este framework.

Antes de empezar, ten en cuenta que

  1. Llama Stack evoluciona rápidamente y es de esperar que aparezcan errores mientras implementas tu cliente, por lo que es importante consultar la documentación del repositorio e informar de cualquier posible problema. En el momento de escribir este artículo, por ejemplo, no he podido ejecutar el contenedor Llama Stack en Windows debido a algunos problemas específicos del sistema operativo, en los que el equipo de desarrolladores estará trabajando.
  2. No puedes utilizar Llama Stack en Google Colab, ya que la versión gratuita de la plataforma no admite la construcción de contenedores Docker.

Empecemos por configurar la interfaz de línea de comandos (CLI) de Llama.

1. Llama CLI

La Pila Llama proporciona una Interfaz de Línea de Comandos (CLI) para gestionar distribuciones, instalar modelos y configurar entornos. Estos son los pasos de instalación que debemos seguir:

1. Crea y activa un entorno virtual:

conda create -n llama_stack python=3.10
conda activate llama_stack

2. Clona el repositorio de Llama Stack: ```bash

git clone <https://github.com/meta-llama/llama-stack.git>

cd llama-pila

3. Install the required dependencies:```bash
pip install -r requirements.txt

2. Utilizar contenedores Docker

Los contenedores Docker simplifican el despliegue del servidor Llama Stack y de los proveedores de la API del agente. Hay disponibles imágenes Docker preconstruidas para facilitar la configuración:

docker pull llamastack/llamastack-local-gpu
llama stack build
llama stack configure llamastack-local-gpu

Estos comandos extraen la imagen Docker, la construyen y configuran la pila.

Cómo crear una aplicación con las API de Llama Stack

Vamos a construir un chatbot básico utilizando las API de Llama Stack. Éstos son los pasos que debemos dar:

1. Inicia el servidor Llama Stack

Ejecutaremos el servidor en el puerto 5000. Asegúrate de que el servidor está funcionando antes de trabajar con las API:

llama stack run local-gpu --port 5000

2. Utiliza la API de Inferencia

Tras instalar la Pila Llama, puedes utilizar código cliente para interactuar con sus API. Utiliza la API de Inferencia para generar respuestas basadas en la entrada del usuario:

from llama_stack_client import LlamaStackClient
client = LlamaStackClient(base_url="<http://localhost:5000>")
user_input = "Hello! How are you?"
response = client.inference.chat_completion(
    model="Llama3.1-8B-Instruct",
    messages=[{"role": "user", "content": user_input}],
    stream=False
)
print("Bot:", response.text)

Nota: Sustituye "Llama3.1-8B-Instruct" por el nombre del modelo real disponible en tu configuración.

3. Integrar la API de seguridad

Pon en marcha la API de seguridad para moderar las respuestas y garantizar que son adecuadas:

safety_response = client.safety.run_shield(
    messages=[{"role": "assistant", "content": response.text}],
    shield_type="llama_guard",
    params={}
)
if safety_response.violation:
    print("Unsafe content detected.")
else:
    print("Bot:", response.text)

4. Añade memoria con la API de Memoria

Crea la conciencia de contexto del chatbot almacenando y recuperando el historial de conversaciones:

### building a memory bank that can be used to store and retrieve context.
bank = client.memory.create_memory_bank(
    name="chat_memory",
    config=VectorMemoryBankConfig(
        type="vector",
        embedding_model="all-MiniLM-L6-v2",
        chunk_size_in_tokens=512,
        overlap_size_in_tokens=64,
    )
)

5. Encadena los componentes

Además, podemos combinar las API para construir un chatbot robusto:

  • API de inferencia: Genera respuestas.
  • Seguridad API: Filtra el contenido inapropiado.
  • API de memoria: Mantiene el contexto de la conversación.

Ejemplo completo

Aquí está el código completo después de cubrir todos los pasos:

import uuid
client = LlamaStackClient(base_url="<http://localhost:5000>")
### create a memory bank at the start
bank = client.memory.create_memory_bank(
    name="chat_memory",
    config=VectorMemoryBankConfig(
        type="vector",
        embedding_model="all-MiniLM-L6-v2",
        chunk_size_in_tokens=512,
        overlap_size_in_tokens=64,
    )
)
def get_bot_response(user_input):
    ### retrieving conversation history
    query_response = client.memory.query_documents(
        bank_id=bank.bank_id,
        query=[user_input],
        params={"max_chunks": 10}
    )
    history = [chunk.content for chunk in query_response.chunks]
    ### preparing messages with history
    messages = [{"role": "user", "content": user_input}]
    if history:
        messages.insert(0, {"role": "system", "content": "\\n".join(history)})
       
    ### generate response
    response = client.inference.chat_completion(
        model="llama-2-7b-chat",
        messages=messages,
        stream=False
    )
    bot_response = response.text
    ### safety check
    safety_response = client.safety.run_shield(
        messages=[{"role": "assistant", "content": bot_response}],
        shield_type="llama_guard",
        params={}
    )
    if safety_response.violation:
        return "I'm sorry, but I can't assist with that request."
    ### memory storing
    documents = [
        MemoryBankDocument(
            document_id=str(uuid.uuid4()),
            content=user_input,
            mime_type="text/plain"
        ),
        MemoryBankDocument(
            document_id=str(uuid.uuid4()),
            content=bot_response,
            mime_type="text/plain"
        )
    ]
    client.memory.insert_documents(
        bank_id=bank.bank_id,
        documents=documents
    )
    return bot_response
### putting all together
while True:
    user_input = input("You: ")
    if user_input.lower() == "bye":
        break
    bot_response = get_bot_response(user_input)
    print("Bot:", bot_response)

Ejemplos y contribuciones de Llama Stack

Para ver algunos ejemplos y poner en marcha tu implementación de aplicaciones utilizando Llama Stack, Meta ha proporcionado el archivo llama-stack-apps donde puedes ver algunas aplicaciones de ejemplo. Asegúrate de comprobar y familiarizarte con el marco.

Como proyecto de código abierto, Llama Stack vive de las contribuciones de la comunidad. Las API están evolucionando rápidamente, y el proyecto está abierto a los comentarios y a la participación de los desarrolladores, que ayudarán a dar forma al futuro de la plataforma. Si pruebas Llama Stack, puede ayudar a otros desarrolladores si también compartes tu proyecto como ejemplo, o contribuyes a la documentación.

Conclusión

A lo largo de este artículo, hemos explorado cómo empezar a utilizar Llama Stack mediante instrucciones paso a paso.

A medida que avances en el despliegue de tus aplicaciones de IA, recuerda echar un vistazo al repositorio Llama Stack para conocer las últimas actualizaciones y mejoras.

Para saber más sobre el ecosistema de la llama, consulta los siguientes recursos:


Hesam Sheikh Hassani's photo
Author
Hesam Sheikh Hassani
LinkedIn
Twitter

Estudiante de Máster en Inteligencia Artificial y redactor técnico de IA. Comparto ideas sobre la última tecnología de IA, haciendo accesible la investigación en ML y simplificando los complejos temas de IA necesarios para mantenerte a la vanguardia.

Temas

Aprende IA con estos cursos

Curso

MLOps Deployment and Life Cycling

4 hr
7.7K
In this course, you’ll explore the modern MLOps framework, exploring the lifecycle and deployment of machine learning models.
Ver detallesRight Arrow
Comienza el curso
Ver másRight Arrow
Relacionado

blog

Evaluación de un LLM: Métricas, metodologías y buenas prácticas

Aprende a evaluar grandes modelos lingüísticos (LLM) utilizando métricas clave, metodologías y mejores prácticas para tomar decisiones informadas.
Stanislav Karzhev's photo

Stanislav Karzhev

9 min

Tutorial

RAG Con Llama 3.1 8B, Ollama y Langchain: Tutorial

Aprende a crear una aplicación RAG con Llama 3.1 8B utilizando Ollama y Langchain, configurando el entorno, procesando documentos, creando incrustaciones e integrando un recuperador.
Ryan Ong's photo

Ryan Ong

12 min

Tutorial

Ajuste fino de LLaMA 2: Guía paso a paso para personalizar el modelo de lenguaje grande

Aprende a ajustar Llama-2 en Colab utilizando nuevas técnicas para superar las limitaciones de memoria y computación y hacer más accesibles los grandes modelos lingüísticos de código abierto.
Abid Ali Awan's photo

Abid Ali Awan

12 min

Tutorial

Tutorial sobre cómo crear aplicaciones LLM con LangChain

Explore el potencial sin explotar de los grandes modelos lingüísticos con LangChain, un marco Python de código abierto para crear aplicaciones avanzadas de IA.
Moez Ali's photo

Moez Ali

12 min

Tutorial

Guía introductoria para el ajuste preciso de los LLM

El ajuste preciso de los grandes modelos lingüísticos (LLM) ha revolucionado el procesamiento del lenguaje natural (PLN) y ofrece capacidades sin precedentes en tareas como la traducción lingüística, el análisis del sentimiento y la generación de textos. Este enfoque transformador aprovecha modelos preentrenados como el GPT-2 y mejora su rendimiento en dominios específicos mediante el proceso de ajuste preciso.
Josep Ferrer's photo

Josep Ferrer

11 min

Tutorial

Llama.cpp Tutorial: Una Guía Completa para la Inferencia e Implementación Eficiente del LLM

Esta completa guía sobre Llama.cpp te guiará a través de los aspectos esenciales de la configuración de tu entorno de desarrollo, la comprensión de sus funcionalidades básicas y el aprovechamiento de sus capacidades para resolver casos de uso del mundo real.
Zoumana Keita 's photo

Zoumana Keita

11 min

Ver másVer más