Mixtral 8x7B: Mixture of Experts

Mixtral 8x7B: Mixture of Experts

Para mí, la mejor descripción de mixtral-8x7b es la siguiente imagen

mixtral-gemini

Entre la salida de gemini y la salida de mixtra-8x7b hubo una diferencia de muy pocos días. Los dos primeros días después del lanzamiento de gemini se habló bastante de ese modelo, pero en cuanto salió mixtral-8x7b, gemini se olvidó por completo y toda la comunidad no paró de hablar de mixtral-8x7b.

Y no es para menos, viendo sus benchmarks, podemos ver que está al nivel de modelos como llama2-70B y GPT3.5, pero con la diferencia de que mientras mixtral-8x7b tiene solo 46.7B de parámetros, llama2-70B tiene 70B y GPT3.5 tiene 175B.

mixtral benchmarks

Número de parámetroslink image 1

Como su nombre indica, mixtral-8x7b es un conjunto de 8 modelos de 7B de parámetros, por lo que podríamos pensar que tiene 56B de parámetros (7Bx8), pero no es así. Como explica Andrej Karpathy solo los bloques Feed forward de los transformers se multiplican por 8, el resto de parámetros se comparten entre los 8 modelos. Por lo que al final el modelo tiene 46.7B de parámetros.

Mixture of Experts (MoE)link image 2

Como hemos dicho, el modelo es un conjunto de 8 modelos de 7B de parámetros, de ahí MoE, que significa Mixture of Experts. Cada uno de los 8 modelos se entrena de forma independiente, pero cuando se hace la inferencia un router decide la salida de qué modelo es la que se va a usar.

En la siguiente imagen podemos ver cómo es la arquitectura de un Transformer

transformer

Si no la conoces, no pasa nada. Lo importante es que esta arquitectura consiste en un encoder y un decoder

transformer-encoder-decoder

Los LLMs son modelos que solo tienen el decoder, por lo que no tienen encoder. Puedes ver que en la arquitectura hay tres módulos de atención, uno de ellos de hecho conecta el encoder con el decoder. Pero como los LLMs no tienen encoder, no es necesario el módulo de atención que une el decoder y el decoder

transformer-decoder

Ahora que sabemos cómo es la arquitectura de un LLM, podemos ver cómo es la arquitectura de mixtral-8x7b. En la siguiente imagen podemos ver la arquitectura del modelo

MoE architecture

Como se puede ver, la arquitectura consiste en el decoder de un Transformer de 7B de parámetros, solo que la capa Feed forward consiste en 8 capas Feed forward con un router que elige cuál de las 8 capas Feed forward se va a usar. En la imagen anterior solo se muestran cuatro capas Feed forward, supongo que es para simplificar el diagrama, pero en realidad hay 8 capas Feed forward. También se ven dos caminos para dos palabras distintas, la palabra More y la palabra Parameters y cómo el router elige qué Feed forward se va a usar para cada palabra.

Viendo la arquitectura podemos entender por qué el modelo tiene 46.7B de parámetros y no 56B. Como hemos dicho, solo los bloques Feed forward se multiplican por 8, el resto de parámetros se comparten entre los 8 modelos

Uso de Mixtral-8x7b en la nubelink image 3

Por desgracia, para usar mixtral-8x7b en local es complicado, ya que los requisitos de hardware son los siguientes

  • float32: VRAM > 180 GB, es decir, como cada parámetro ocupa 4 bytes, necesitamos 46.7B * 4 = 186.8 GB de VRAM solo para almacenar el modelo, además a eso hay que sumarle la VRAM que se necesita para almacenar los datos de entrada y salida
  • float16: VRAM > 90 GB, en este caso cada parámetro ocupa 2 bytes, por lo que necesitamos 46.7B * 2 = 93.4 GB de VRAM solo para almacenar el modelo, además a eso hay que sumarle la VRAM que se necesita para almacenar los datos de entrada y salida
  • 8-bit: VRAM > 45 GB, aquí cada parámetro ocupa 1 byte, por lo que necesitamos 46.7B * 1 = 46.7 GB de VRAM solo para almacenar el modelo, además a eso hay que sumarle la VRAM que se necesita para almacenar los datos de entrada y salida
  • 4-bit: VRAM > 23 GB, aquí cada parámetro ocupa 0.5 bytes, por lo que necesitamos 46.7B * 0.5 = 23.35 GB de VRAM solo para almacenar el modelo, además a eso hay que sumarle la VRAM que se necesita para almacenar los datos de entrada y salida

Necesitamos unas GPUs muy potentes para poder ejecutarlo, incluso cuando usamos el modelo cuantizado a 4 bits.

Por tanto, la forma más sencilla de usar Mixtral-8x7B es usandolo ya desplegado en la nube. He encontrado varios sitios donde lo puedes usar

Uso de Mixtral-8x7b en huggingface chatlink image 4

El primero es en huggingface chat. Para poder usarlo hay que darle a la rueda dentada dentro de la caja Current Model y seleccionar Mistral AI - Mixtral-8x7B. Una vez seleccionado, ya puedes empezar a hablar con el modelo.

huggingface_chat_01

Una vez dentro seleccionar mistralai/Mixtral-8x7B-Instruct-v0.1 y por último darle al botón Activate. Ahora podremos probar el modelo

huggingface_chat_02

Como se puede ver, le he preguntado en español qué es MoE y me lo ha explicado

Uso de Mixtral-8x7b en Perplexity Labslink image 5

Otra opción es usar Perplexity Labs. Una vez dentro hay que seleccionar mixtral-8x7b-instruct en un desplegable que hay en la parte inferior derecha

perplexity_labs

Como se puede ver, también le he preguntado en español qué es MoE y me lo ha explicado

Uso de Mixtral-8x7b en local a traves de la API de huggingfacelink image 6

Una manera de usarlo en local, tengas los recursos HW que tengas es a través de la API de huggingface. Para ello hay que instalar la librería huggingface-hub de huggingface

	
< > Input
Python
%pip install huggingface-hub
Copied

Aquí se muestra una implementación con gradio

	
< > Input
Python
from huggingface_hub import InferenceClient
import gradio as gr
client = InferenceClient("mistralai/Mixtral-8x7B-Instruct-v0.1")
def format_prompt(message, history):
prompt = "&lt;s&gt;"
for user_prompt, bot_response in history:
prompt += f"[INST] {user_prompt} [/INST]"
prompt += f" {bot_response}&lt;/s&gt; "
prompt += f"[INST] {message} [/INST]"
return prompt
def generate(prompt, history, system_prompt, temperature=0.9, max_new_tokens=256, top_p=0.95, repetition_penalty=1.0,):
temperature = float(temperature)
if temperature &lt; 1e-2:
temperature = 1e-2
top_p = float(top_p)
generate_kwargs = dict(temperature=temperature, max_new_tokens=max_new_tokens, top_p=top_p, repetition_penalty=repetition_penalty, do_sample=True, seed=42,)
formatted_prompt = format_prompt(f"{system_prompt}, {prompt}", history)
stream = client.text_generation(formatted_prompt, **generate_kwargs, stream=True, details=True, return_full_text=False)
output = ""
for response in stream:
output += response.token.text
yield output
return output
additional_inputs=[
gr.Textbox(label="System Prompt", max_lines=1, interactive=True,),
gr.Slider(label="Temperature", value=0.9, minimum=0.0, maximum=1.0, step=0.05, interactive=True, info="Higher values produce more diverse outputs"),
gr.Slider(label="Max new tokens", value=256, minimum=0, maximum=1048, step=64, interactive=True, info="The maximum numbers of new tokens"),
gr.Slider(label="Top-p (nucleus sampling)", value=0.90, minimum=0.0, maximum=1, step=0.05, interactive=True, info="Higher values sample more low-probability tokens"),
gr.Slider(label="Repetition penalty", value=1.2, minimum=1.0, maximum=2.0, step=0.05, interactive=True, info="Penalize repeated tokens")
]
gr.ChatInterface(
fn=generate,
chatbot=gr.Chatbot(show_label=False, show_share_button=False, show_copy_button=True, likeable=True, layout="panel"),
additional_inputs=additional_inputs,
title="Mixtral 46.7B",
concurrency_limit=20,
).launch(show_api=False)
Copied
Mixtral-8x7B huggingface API

Preguntas frecuentes

¿Por qué Mixtral-8x7B tiene 46.7B de parámetros y no 56B (8×7B)?

Porque, como explicó Andrej Karpathy, en la arquitectura MoE de Mixtral solo se multiplican por 8 los bloques Feed forward del decoder (los 8 "expertos"); el resto de componentes del transformer (atención, embeddings, etc.) se comparten entre los 8. Un router elige, para cada token, cuál de las 8 capas Feed forward se usa, en lugar de sumar 8 modelos independientes completos. Por eso el total real es 46.7B de parámetros y no 7B × 8 = 56B.

¿Cuánta VRAM necesito para cargar Mixtral-8x7B en local en 4-bit?

Como mínimo unos 23 GB de VRAM solo para los pesos: con cuantización a 4-bit cada parámetro ocupa 0.5 bytes, así que 46.7B × 0.5 = 23.35 GB, a lo que hay que sumar la VRAM extra para las activaciones de entrada y salida. Para otras precisiones el post da: float32 (4 bytes/parám.) más de 180 GB, float16 (2 bytes) más de 90 GB, y 8-bit (1 byte) más de 45 GB; por eso el post recomienda usarlo desplegado en la nube (Hugging Face Chat, Perplexity Labs o la API de InferenceClient) en vez de en local.

Seguir leyendo

Últimos posts -->

¿Has visto estos proyectos?

Gymnasia

Gymnasia Gymnasia
Expo
React Native
TypeScript
OpenAI
Anthropic

App de fitness con dos agentes que se ejecutan íntegramente en el dispositivo, sin backend, de forma que los datos del usuario nunca salen del móvil. Un coach conversacional BYOK con adaptadores para OpenAI, Anthropic y Google, 12 tools locales y system prompt remoto con fallback offline, y un subagente de visión que estima macronutrientes a partir de fotos de comida, con lectura de códigos de barras contra OpenFoodFacts.

LangGraph Deep Researcher

LangGraph Deep Researcher LangGraph Deep Researcher
Python
LangGraph
FastAPI
React
TypeScript
Docker

Sistema multiagente de investigación construido con LangGraph. Un supervisor descompone tu pregunta en temas y lanza subagentes de búsqueda en paralelo; cada uno comprime sus hallazgos antes de pasarlos a un agente redactor que escribe el informe final en markdown con sus fuentes. Streaming en vivo por WebSockets, modelo configurable por rol y claves de API propias que nunca se guardan en el servidor.

Tau

Tau Tau
Python
LangChain

Sistema multiagente de tutoría para estudiantes de secundaria, con un agente por asignatura y material de curso elaborado y validado por un equipo de profesores. Llegó a usarse con alumnos reales en un colegio privado en España y en un instituto en Colombia.

Ver todos los proyectos -->
>_ Disponible para proyectos

¿Tienes un proyecto con IA?

Hablemos.

maximofn@gmail.com

Especialista en Machine Learning e Inteligencia Artificial. Desarrollo soluciones con IA generativa, agentes inteligentes y modelos personalizados.

¿Quieres ver alguna charla?

Últimas charlas -->

¿Quieres mejorar con estos tips?

Últimos tips -->

Usa esto en local

Los espacios de Hugging Face nos permite ejecutar modelos con demos muy sencillas, pero ¿qué pasa si la demo se rompe? O si el usuario la elimina? Por ello he creado contenedores docker con algunos espacios interesantes, para poder usarlos de manera local, pase lo que pase. De hecho, es posible que si pinchas en alún botón de ver proyecto te lleve a un espacio que no funciona.

Flow edit

Flow edit Flow edit

Edita imágenes con este modelo de Flow. Basándose en SD3 o FLUX puedes editar cualquier imagen y generar nuevas

FLUX.1-RealismLora

FLUX.1-RealismLora FLUX.1-RealismLora
Ver todos los contenedores -->
>_ Disponible para proyectos

¿Tienes un proyecto con IA?

Hablemos.

maximofn@gmail.com

Especialista en Machine Learning e Inteligencia Artificial. Desarrollo soluciones con IA generativa, agentes inteligentes y modelos personalizados.

¿Quieres entrenar tu modelo con estos datasets?

short-jokes-dataset

HuggingFace

Dataset de chistes en inglés

Uso: Fine-tuning de modelos de generación de texto humorístico

231K filas 2 columnas 45 MB
Ver en HuggingFace →

opus100

HuggingFace

Dataset con traducciones de inglés a español

Uso: Entrenamiento de modelos de traducción inglés-español

1M filas 2 columnas 210 MB
Ver en HuggingFace →

netflix_titles

HuggingFace

Dataset con películas y series de Netflix

Uso: Análisis de catálogo de Netflix y sistemas de recomendación

8.8K filas 12 columnas 3.5 MB
Ver en HuggingFace →
Ver más datasets -->