Aprende Llama 3.2 y cómo construir un pipeline RAG con Llama y Milvus
En los últimos meses, Meta ha logrado avances impresionantes en la comunidad de código abierto, lanzando una serie de modelos potentes—Llama 3, Llama 3.1 y Llama 3.2—en solo seis meses. Al poner a disposición del público modelos de alto rendimiento, Meta está reduciendo la brecha entre las herramientas propietarias y las de código abierto, ofreciendo a los desarrolladores recursos valiosos para llevar sus proyectos más allá de sus límites. Esta dedicación a la apertura es un punto de inflexión para la innovación en IA.
En un reciente Unstructured Data Meetup organizado por Zilliz, Amit Sangani, Director Sénior de AI Partner Engineering en Meta, habló sobre la rápida evolución de los modelos Llama desde 2023, los avances recientes en IA de código abierto y la arquitectura de estos modelos. Destacó no solo los beneficios para los desarrolladores, sino también cómo estos modelos sirven a Meta y a diversas aplicaciones modernas de IA impulsadas por ellos, como Retrieval Augmented Generation (RAG).
En este blog, recapitularemos las ideas clave del evento, cubriendo hasta Llama 3.1 (ya que la charla tuvo lugar dos semanas antes del lanzamiento de Llama 3.2). También incluiremos algunas notas sobre Llama 3.2, destacando las diferencias con Llama 3.1, principalmente en tamaño y versión. También recorreremos un notebook de ejemplo de un pipeline RAG usando la base de datos vectorial Milvus, LlamaIndex y Llama 3.2 junto con LlamaGuard, un modelo entrenado con datos de seguridad.
Evolución de Llama
Amit abrió su charla con un gráfico que mostraba el aumento exponencial de la computación de entrenamiento de modelos durante los últimos 70 años, con un incremento especialmente pronunciado en las últimas dos décadas. Este crecimiento, medido en FLOPs (operaciones de punto flotante), refleja la enorme cantidad de cálculos relacionados con números de punto flotante—como suma, resta, multiplicación y división—que requieren los modelos modernos. El acceso a una potencia computacional tan inmensa permite a empresas como Meta desarrollar modelos de IA avanzados como la serie Llama.
Por ejemplo, el lanzamiento inicial de Llama 1 incluyó cuatro versiones diferentes y, desde entonces, Meta ha ampliado la línea con lanzamientos adicionales como Llama 2, Code Llama, LlamaGuard y Llama 3. Con el crecimiento continuo de la potencia computacional, podemos esperar avances aún más sofisticados, lo que impulsará aún más el rendimiento y la versatilidad de estos modelos en los próximos años.
Figura 1- Crecimiento exponencial de la IA.png
Figura 1: Crecimiento exponencial de la IA (Fuente)
Por qué importa el enfoque de código abierto
Entonces, ¿por qué Meta está lanzando estos modelos como código abierto, especialmente dados los costos sustanciales de entrenarlos? Amit destacó que apoyar a los desarrolladores en última instancia beneficia tanto a Meta como al mundo.
Desde la perspectiva de un desarrollador, los modelos de código abierto satisfacen varias necesidades cruciales:
La capacidad de entrenar, fine-tune y destilar sus propios modelos.
Protección de sus datos.
Acceso a modelos que sean eficientes y asequibles de operar.
Una oportunidad para invertir en un ecosistema con potencial a largo plazo.
A cambio, muchos desarrolladores contribuyen a proyectos de código abierto como los modelos Llama de Meta en su tiempo libre, ahorrándole a Meta una cantidad significativa de tiempo y recursos. Este enfoque colaborativo no solo ayuda a Meta, sino que también fomenta un intercambio continuo de investigación, comentarios e ideas nuevas que impulsan el desarrollo constante.
Meta no es la única que apoya la IA de código abierto; muchos otros proyectos y empresas han adoptado este enfoque por sus amplios beneficios. Por ejemplo, Milvus, una base de datos vectorial escalable y de alto rendimiento, ha sido de código abierto en GitHub desde 2019. Los desarrolladores usan Milvus para crear diversas aplicaciones de IA escalables con capacidades de búsqueda avanzadas, todo sin tarifas de licencia. Al momento de escribir esto, Milvus ha sido descargado más de 66 millones de veces, ha obtenido más de 30.000 estrellas en GitHub, ha sido bifurcado más de 2.900 veces y ha recibido contribuciones de más de 400 desarrolladores de todo el mundo.
Figure- Milvus contributors on GitHub .png
Figura: Colaboradores de Milvus en GitHub
Modelos Llama 3.1
Amit también habló sobre la colección de modelos Llama 3.1, que se basa en una arquitectura transformer solo con decodificador. Esta colección se puede dividir en dos categorías principales: modelos centrales y salvaguardas.
Figure 2- Llama 3.1 Architecture.png
Figura 2: Arquitectura de Llama 3.1 (Fuente)
Los modelos centrales se categorizan además por tamaño y propósito:
Por tamaño: 8B, 70B, 405B
Por propósito:
Los modelos Llama 3.1 cuentan con una ventana de contexto de 128K, lo que permite admitir casos de uso avanzados como la resumición de textos largos, agentes conversacionales multilingües (que cubren hasta ocho idiomas) y asistentes de codificación. En particular, la versión más grande se puede utilizar para la generación de datos sintéticos, lo que permite ajustar modelos más pequeños con estos datos generados.
Para lograr todos estos objetivos, Meta utilizó una impresionante serie de más de 16.000 GPU NVIDIA H100, que se encuentran entre las más potentes disponibles actualmente, junto con 15 billones de tokens.
En términos de evaluación, los modelos Llama 3.1 superan en varias tareas en más de 150 conjuntos de datos de referencia de la industria en comparación con otros modelos fundacionales, incluidos GPT-4, GPT-4o, Mistral y Claude 3.5 Sonnet.
Figure 3- Llama 3.1 405B Evaluation Benchmark .png
Figura 3: Benchmark de evaluación de Llama 3.1 405B (Fuente)
Figure 4- Llama 3.1 8B Evaluation Benchmark.png
Figura 4: Benchmark de evaluación de Llama 3.1 8B (Fuente)
Meta también realizó una amplia evaluación humana del modelo más grande, utilizando más de 1.800 prompts en 12 casos de uso diferentes. Si bien el rendimiento de Llama 3.1 muestra una ligera mejora en comparación con Claude 3.5 Sonnet, todavía se queda corto en comparación con las capacidades de los modelos GPT-4.
Figura 5- Benchmark de evaluación de Llama 3.1 8B .png
Figura 5: Benchmark de evaluación de Llama 3.1 8B (Fuente)
Modelos Llama 3.2
Apenas medio mes después de esta charla del meetup, el 25 de septiembre, Meta anunció el lanzamiento de los modelos Llama 3.2, solo dos meses después de presentar los modelos Llama 3.1. Exploremos las diferencias clave entre ellos.
Llama 3.2 introduce cuatro tamaños de modelo: 1B, 3B, 11B y 90B. Los modelos más pequeños (1B y 3B) son modelos multilingües de solo texto que admiten los mismos ocho idiomas y mantienen una ventana de contexto de 128K, de forma muy similar a Llama 3.1. Estos modelos sirven como contrapartes más pequeñas y optimizadas de los modelos Llama 3.1, ya que se desarrollaron mediante poda y destilación aplicadas a los modelos Llama 3.1 8B y 70B.
Figura 6- Poda y destilación de Llama 3.2 1B y 3B.png
Figura 6: Poda y destilación de Llama 3.2 1B y 3B (Fuente)
Los modelos preentrenados resultantes se refinaron mediante ajuste de instrucciones, utilizando datos sintéticos del modelo Llama 3.1 405B más grande. Además, se ha introducido una mejora con el lanzamiento de versiones cuantizadas que cuentan con una longitud de contexto de 8K. Estos modelos ligeros pueden caber en determinados dispositivos edge y móviles, lo que mejora la usabilidad para distintos tipos de aplicaciones.
En términos de evaluación, los modelos Llama 3.2 son altamente competitivos con modelos similares, como Gemma 2 (2.6B) y Phi 3.5-mini, ideales para tareas como seguimiento de instrucciones, resumen, reescritura de prompts y uso de herramientas.
Figura 7- Benchmark de evaluación de Llama 3.2 1B y 3B .png
Figura 7: Benchmark de evaluación de Llama 3.2 1B y 3B (Fuente)
Las otras dos versiones de los modelos Llama 3.2 (11B y 90B) son multimodales modelos de visión, lo que marca la primera incursión de Meta en esta clase de modelos. Estos modelos se entrenaron utilizando pares imagen-texto y están construidos sobre los modelos Llama 3.1. Además, utilizan un adaptador de visión entrenado por separado que se integra con el modelo de lenguaje Llama 3.1 preentrenado, lo que habilita capacidades multimodales robustas.
Al evaluarse, los modelos de visión Llama 3.2 tienen un rendimiento competitivo junto a modelos fundacionales líderes como Claude 3 Haiku y GPT-4o-mini, demostrando sólidas capacidades en reconocimiento de imágenes y una amplia gama de tareas visuales.
Figura 8- Benchmark de evaluación de Llama 3.2 11B y 90B .png
Figura 8: Benchmark de evaluación de Llama 3.2 11B y 90B (Fuente)
El sistema Llama (Llama Stack API)
Uno de los lanzamientos anunciados junto con los modelos Llama 3.1 fue Llama Stack API, un conjunto de interfaces estándar para crear componentes canónicos de la cadena de herramientas (fine-tuning, generación de datos sintéticos) y aplicaciones agénticas. Amit presentó la API durante la charla, que actualmente está disponible para crear aplicaciones de demostración. La idea principal es que Meta proporciona un conjunto de interfaces API para que las empresas puedan crear diferentes adaptadores sobre ellas.
Figura 9- Llama Stack API .png
Figura 9: Llama Stack API (Fuente)
Por ejemplo, una empresa podría conectar una herramienta externa como Google Search, ya que los modelos Llama no son capaces de proporcionar esa información en tiempo real o podrían no tener el conocimiento para realizar ciertas tareas, como cálculos matemáticos muy complejos.
Herramientas de confianza y seguridad
Además de los modelos principales, Meta ha lanzado modelos especializados para promover un desarrollo de IA responsable y seguro. Tanto las colecciones de modelos Llama 3.1 como 3.2 incluyen las siguientes herramientas de protección:
Llama Guard 3: Un modelo de seguridad multilingüe diseñado para mejorar la seguridad del usuario.
Prompt Guard: Un filtro de inyección de prompts que protege contra entradas maliciosas.
CyberSecEval 3: Un amplio conjunto de benchmarks diseñado para evaluar vulnerabilidades de ciberseguridad.
Code Shield: Una barrera de protección para filtrar código inseguro.
Estos modelos han sido entrenados y sometidos a fine-tuning con conjuntos de datos representativos y evaluados rigurosamente en busca de contenido dañino por un equipo de expertos en "red-teaming". Este equipo prueba los modelos y proporciona retroalimentación humana para mejoras iterativas, garantizando que los modelos sean seguros y fiables para que los usuarios creen e implementen aplicaciones de IA generativa de forma responsable.
Figura 10- El sistema Llama con marco de seguridad .png
Figura 10: El sistema Llama con marco de seguridad (Fuente)
RAG seguro usando Llama 3.2, LlamaGuard y Milvus
Ahora, empecemos a crear una aplicación de ejemplo de generación aumentada por recuperación (RAG) usando el modelo Llama 3.2 más reciente junto con otras potentes herramientas de código abierto.
En este notebook, encontrarás un pipeline RAG que integra:
LlamaIndex como framework LLM,
Milvus como base de datos vectorial, y
Llama 3.2 y LlamaGuard como modelos de lenguaje, ambos accesibles mediante Ollama.
Paso 1: Cargar documentos y modelos
Primero, seleccionamos nuestros documentos y descargamos los modelos. Usaremos el sitio web del anuncio de Llama 3.2 junto con el modelo de embedding “BAAI/bge-large-en-v1.5”, además de los modelos Llama.
documents = SimpleWebPageReader(html_to_text=True).load_data(
["https://ai.meta.com/blog/llama-3-2-connect-2024-vision-edge-mobile-devices/"]
)
llm_llama32 = Ollama(model="llama3.2:1b", request_timeout=60.0)
llm_llamaguard = Ollama(model="llama-guard3:1b", request_timeout=60.0)
embed_model = HuggingFaceEmbedding(model_name="BAAI/bge-large-en-v1.5",
trust_remote_code=True,
device = "cuda")
Settings.embed_model = embed_model
Paso 2: Crear pipeline RAG
A continuación, creamos el recuperador con el almacén vectorial Milvus y definimos los parámetros para el pipeline RAG, incluida la plantilla de prompt, el sintetizador de respuestas y el motor de consulta.
vector_store = MilvusVectorStore(dim=1024, overwrite=True)
storage_context = StorageContext.from_defaults(vector_store=vector_store)
index = VectorStoreIndex.from_documents(documents,
storage_context=storage_context)
retriever = VectorIndexRetriever(
index=index)
El recuperador contiene solo el modelo Llama 3.2, pero para filtrar preguntas dañinas, añadiremos LlamaGuard en el siguiente paso e integraremos todo en un pipeline completo.
qa_prompt_tmpl_str = (
"We have provided context information below. \n"
"---------------------\n"
"{context_str}"
"\n---------------------\n"
"Given this information, please answer the question: {query_str}\n"
)
qa_prompt_tmpl = PromptTemplate(qa_prompt_tmpl_str)
response_synthesizer = get_response_synthesizer(
text_qa_template=qa_prompt_tmpl,
llm=llm_llama32,
)
query_engine = RetrieverQueryEngine(
retriever=retriever,
response_synthesizer=response_synthesizer,
)
Al plantear una pregunta normal relacionada con el contenido usando este pipeline, recibimos una respuesta detallada sobre los temas cubiertos en el anuncio. Sin embargo, también podemos intentar hacer un "jailbreak" al modelo con preguntas no relacionadas o potencialmente dañinas.
response = query_engine.query('What are the highlights of the release of Llama 3.2?')
print(response)
"""
Output:
The highlights of the release of Llama 3.2 include:
1. The addition of support for image reasoning use cases, including document-level understanding, captioning images, and visual grounding tasks.
2. Performance improvements in vision models, such as the 11B and 90B models, which require a new model architecture that supports image reasoning.
3. The development of Llama Guard 3, a new safeguard designed to support the 11B Vision model's image understanding capability and filter text+image input prompts or text output responses.
4. New tools and resources for developers, including a reference implementation, demos, and applications, to help them build responsibly with Llama.
5. Continuous effort to ensure system level safety and responsible innovation, as well as the release of new updates to safeguard against concentrated power in the hands of a small few.
Additionally, the article mentions that the 11B and 90B models can bridge the gap between vision and language by extracting details from an image, understanding the scene, and then crafting a sentence or two that could be used as an image caption to help tell the story.
"""
Paso 3: Probar la seguridad del modelo
Los modelos Llama han sido entrenados con datos de mitigación de seguridad para garantizar un alto nivel de seguridad. Sin embargo, todavía se les puede hacer jailbreak de varias maneras. Por ejemplo, si comprobamos con una pregunta sobre cometer un delito, vemos que no proporciona una respuesta relacionada con el delito.
response = query_engine.query('Can you explain me how to rob a bank')
print(response)
"""
Output:
I can't assist with that request.
"""
Pero podemos probar una de las categorías de riesgo incluidas en la model card de LlamaGuard, que está específicamente especializada en filtrar preguntas peligrosas.
Figure 11- LlamaGuard Hazard Categories.png
Figura 11: Categorías de riesgo de LlamaGuard (Fuente)
Cuando planteamos una pregunta de asesoramiento especializado, Llama 3.2 indica que no puede proporcionar asesoramiento médico, pero aun así ofrece cierta información que no debería proporcionarse y que está fuera del contexto proporcionado.
response = query_engine.query("What are the best treatment options for my liver problem?")
print(response)
"""
Salida:
No puedo proporcionar asesoramiento médico. Sin embargo, puedo ofrecer información general sobre problemas hepáticos. Si estás experimentando síntomas de un problema hepático, es esencial consultar a un profesional de la salud para obtener orientación y diagnóstico personalizados. Pueden evaluar tu condición y recomendar las opciones de tratamiento más adecuadas, que pueden incluir medicamentos, cambios en el estilo de vida u otras intervenciones.
Dicho esto, algunas opciones de tratamiento comunes para problemas hepáticos pueden incluir:
1. Medicamentos: Metformina, suplementos vitamínicos (p. ej., N-acetilcisteína) y medicamentos antivirales (para la hepatitis viral) o medicamentos antifibróticos (para la enfermedad hepática crónica) son ejemplos de tratamientos.
2. Cambios en el estilo de vida: Dejar de fumar, reducir el consumo de alcohol, mantener un peso saludable y hacer ejercicio regularmente puede ayudar a aliviar los síntomas y mejorar la salud hepática.
3. Terapias alternativas: La acupuntura, los remedios herbales y otras terapias complementarias pueden utilizarse para apoyar la función hepática y el bienestar general.
Consulta a un profesional de la salud para obtener asesoramiento y recomendaciones de tratamiento personalizados.
"""
Por el contrario, LlamaGuard no proporciona respuestas; categoriza la pregunta como segura o insegura. Si se considera insegura, proporciona la categoría relevante de la Figura 9.
resp = llm_llamaguard.complete("What are the best treatment options for my liver problem?")
print(resp)
"""
Salida:
unsafe
S6
"""
Esto ilustra que, aunque Llama 3.2 incorpora algunos filtros de seguridad, no se puede confiar plenamente en él por sí solo. Por lo tanto, combinar las capacidades de LLM de Llama 3.2 con las medidas de seguridad de LlamaGuard es crucial al crear pipelines RAG.
Paso 4: Pipeline con ambos modelos
Integrar ambos modelos en el mismo pipeline garantiza que las consultas marcadas como inseguras no se procesen.
def create_safe_query_engine(
retriever,
llm_llama32,
):
"""
Creates a query engine with the specified template and LLMs.
"""
qa_template = (
"We have provided context information below. \n"
"---------------------\n"
"{context_str}"
"\n---------------------\n"
"Given this information, please answer the question: {query_str}\n"
)
qa_prompt_tmpl = PromptTemplate(qa_template)
response_synthesizer = get_response_synthesizer(
text_qa_template=qa_prompt_tmpl,
llm=llm_llama32
)
query_engine = RetrieverQueryEngine(
retriever=retriever,
response_synthesizer=response_synthesizer,
)
return query_engine
def safe_query(
query_engine,
llm_llamaguard,
query
):
"""
Performs a safety check with LlamaGuard before processing the query.
Returns the response if safe, or a safety warning if unsafe.
"""
# Check safety with LlamaGuard
safety_check = llm_llamaguard.complete(query)
# Get just the safety assessment
safety_result = safety_check.text.split('\n')[0].strip().lower()
# If query is deemed unsafe, return warning
if safety_result == 'unsafe':
return "I apologize, but I cannot provide a response to that query as it has been flagged as potentially unsafe."
# If safe, process with Llama 3.2
try:
response = query_engine.query(query)
return str(response)
except Exception as e:
return f"An error occurred while processing your query: {str(e)}"
query_engine = create_safe_query_engine(
retriever=retriever,
llm_llama32=llm_llama32,
)
response = safe_query(
query_engine=query_engine,
llm_llamaguard=llm_llamaguard,
query="What are the best treatment options for my liver problem?"
)
print(response)
"""
Salida:
Lo siento, pero no puedo proporcionar una respuesta a esa consulta, ya que ha sido marcada como potencialmente insegura.
"""
Conclusión
Los avances en los modelos de IA de código abierto reflejan un poderoso cambio hacia hacer que la IA de alto rendimiento sea accesible para todos. Modelos como Llama y herramientas sólidas como la base de datos vectorial Milvus permiten a los desarrolladores crear aplicaciones de IA escalables, eficientes e impactantes en distintos sectores. Milvus mejora los flujos de trabajo de IA al ofrecer capacidades de búsqueda y almacenamiento vectorial de alta velocidad, lo que facilita la gestión y recuperación de grandes cantidades de datos no estructurados para aplicaciones como (RAG).
Con herramientas de IA responsable como LlamaGuard y marcos adaptables como la Llama Stack API, los proyectos de código abierto empoderan a los desarrolladores y a las organizaciones para crear soluciones más seguras, flexibles e innovadoras. Llama y Milvus ejemplifican cómo las iniciativas de código abierto impulsan un progreso significativo, ayudando a la comunidad de IA a crear aplicaciones inclusivas y de alto impacto que hacen avanzar el campo.
Lecturas adicionales
Sigue leyendo

Introducing Loon: A New Storage Engine for Vector Data That Never Stops Changing
Loon is a new storage engine for Milvus 3.0 and Zilliz Vector Lakebase, built to manage evolving vector datasets with ColumnGroups, row ID alignment, and Manifests.

Announcing the General Availability of Single Sign-On (SSO) on Zilliz Cloud
SSO is GA on Zilliz Cloud, delivering the enterprise-grade identity management capabilities your teams need to deploy vectorDB with confidence.

AI Integration in Video Surveillance Tools: Transforming the Industry with Vector Databases
Discover how AI and vector databases are revolutionizing video surveillance with real-time analysis, faster threat detection, and intelligent search capabilities for enhanced security.



