Connect with us
Cómo implementar Mixture of Experts con Ollama para especialización por dominio Cómo implementar Mixture of Experts con Ollama para especialización por dominio

Desarrolladores

Cómo implementar Mixture of Experts con Ollama para especialización por dominio

Published

on

Los modelos de lenguaje con arquitectura Mixture of Experts (MoE) permiten combinar la capacidad de modelos masivos con la eficiencia de modelos más pequeños, activando solo los “expertos” necesarios para cada tarea. Plataformas como Z.AI utilizan esta técnica para ofrecer respuestas especializadas sin sobrecargar los recursos. Con Ollama, es posible replicar este enfoque de manera local, ya sea utilizando modelos que ya incorporan MoE en su diseño o creando un sistema de enrutamiento personalizado en Python.

Este artículo explora dos enfoques prácticos: el uso de modelos MoE nativos en Ollama y la implementación de un router de expertos por dominio. Ambos métodos permiten aprovechar la especialización sin depender de servicios en la nube, ideal para desarrolladores y entusiastas de la inteligencia artificial local.

Diferencias entre MoE interno y MoE orquestado

Antes de elegir una implementación, es importante entender las diferencias entre ambos enfoques:

MoE interno se refiere a modelos que ya incluyen una arquitectura de enrutamiento dentro de su diseño. En estos modelos, una red interna decide qué subredes (expertos) se activan para cada token, lo que permite manejar un gran número de parámetros totales (por ejemplo, 744 mil millones) activando solo una fracción (como 40 mil millones) por inferencia. Esto optimiza el uso de recursos sin sacrificar calidad.

Advertisement

MoE orquestado, por otro lado, es un patrón de arquitectura a nivel de aplicación. Un modelo ligero actúa como router, redirigiendo cada consulta al modelo especializado más adecuado dentro de un conjunto de modelos de lenguaje. Este enfoque ofrece mayor flexibilidad para definir expertos por dominio, pero requiere más recursos de memoria al cargar múltiples modelos.

Uso de modelos MoE nativos en Ollama

La forma más sencilla de implementar MoE es utilizando modelos que ya incorporan esta arquitectura. Ollama soporta varios modelos MoE nativos, que pueden descargarse y ejecutarse directamente sin configuración adicional. El enrutamiento interno se encarga de activar los expertos necesarios para cada consulta.

Modelos MoE disponibles para Ollama

Estos son algunos de los modelos MoE compatibles con Ollama, junto con sus requisitos de hardware:

Modelo Parámetros activos Parámetros totales VRAM mínima (cuantización Q4)
mixtral:8x7b ~13 mil millones ~47 mil millones 26 GB
mixtral:8x22b ~39 mil millones ~141 mil millones 60 GB
qwen3:30b-a3b 3 mil millones 30 mil millones 6 GB
glm4:9b ~9 mil millones ~9 mil millones 8 GB
deepseek-r1:7b 7 mil millones 7 mil millones 8 GB

Para equipos con recursos limitados, qwen3:30b-a3b es una excelente opción: activa solo 3 mil millones de parámetros por inferencia sobre un modelo de 30 mil millones, ofreciendo un buen equilibrio entre calidad y eficiencia con solo 6 GB de VRAM.

Para descargar y ejecutar un modelo MoE nativo en Ollama, usa los siguientes comandos:

Advertisement
# Descargar e iniciar un modelo MoE nativo
ollama pull qwen3:30b-a3b
ollama run qwen3:30b-a3b

# Alternativamente, para Mixtral
ollama pull mixtral:8x7b
ollama run mixtral:8x7b

Nota sobre hardware: Los modelos MoE cargan todos los expertos en memoria (RAM/VRAM), aunque solo activen algunos por token. Ollama gestiona esto con un sistema de caché LRU, lo que permite un intercambio eficiente en sistemas con suficiente RAM pero VRAM limitada.

Implementación de un router de expertos por dominio en Python

Si buscas un mayor control sobre la especialización por dominio, puedes implementar un router de nivel de aplicación. Este enfoque utiliza un modelo ligero para clasificar cada consulta y redirigirla al experto más adecuado dentro de un conjunto de modelos especializados.

A continuación, se muestra un ejemplo de implementación en Python que utiliza la API REST de Ollama para enrutar consultas a diferentes modelos según el dominio:

import requests

# Modelo ligero como enrutador
ROUTER_MODEL = "llama3.2:3b"

# Mapa de expertos por dominio
EXPERTS = {
    "code":          "qwen2.5-coder:7b",
    "reasoning":     "deepseek-r1:7b",
    "general":       "llama3.1:8b",
    "multilingual":  "aya:8b"
}

OLLAMA_URL = "http://localhost:11434/api/generate"

def route_query(query: str) -> str:
    """Clasifica la consulta y selecciona el experto adecuado."""
    prompt = (
        "Clasifica esta consulta en UNA categoría: "
        "code, reasoning, general, multilingual.\n"
        f"Consulta: {query}\n"
        "Responde solo con la categoría, sin explicación:"
    )
    response = requests.post(OLLAMA_URL, json={
        "model": ROUTER_MODEL,
        "prompt": prompt,
        "stream": False
    })
    category = response.json()["response"].strip().lower()
    return EXPERTS.get(category, EXPERTS["general"])

def ask_expert(query: str) -> str:
    """Enruta la consulta al experto correcto y retorna la respuesta."""
    expert_model = route_query(query)
    print(f"[Router] → Experto seleccionado: {expert_model}")

    response = requests.post(OLLAMA_URL, json={
        "model": expert_model,
        "prompt": query,
        "stream": False
    })
    return response.json()["response"]

# Ejemplo de uso
if __name__ == "__main__":
    consultas = [
        "Escribe una función en Python para ordenar una lista de diccionarios por una clave específica.",
        "Explica las diferencias filosóficas entre el utilitarismo y la ética deontológica.",
        "Traduce este texto al portugués brasileño: 'The model is running locally'.",
    ]
    for q in consultas:
        print(f"\n[Consulta] {q}")
        print(f"[Respuesta] {ask_expert(q)}\n{'─'*60}")

Este enfoque, conocido como MoE a nivel de aplicación o enrutamiento de modelos de lenguaje, permite definir claramente los dominios de especialización. A diferencia del MoE interno, aquí los “expertos” son modelos independientes completos, lo que brinda mayor flexibilidad pero requiere más memoria RAM del sistema, ya que cada modelo ocupa su propio espacio.

Integración con pipelines de agentes como OpenClaw

Si ya trabajas con un pipeline en herramientas como OpenClaw, puedes integrar el router como un nodo personalizado. Este nodo recibiría el prompt del usuario, ejecutaría la lógica de enrutamiento y devolvería la respuesta del experto seleccionado, todo mediante llamadas a la API local de Ollama en localhost:11434.

Advertisement

A continuación, se muestra un ejemplo de cómo crear un modelo personalizado en Ollama utilizando un archivo Modelfile para definir un experto técnico especializado:

# Ejemplo de Modelfile para crear un experto técnico personalizado
FROM qwen3:30b-a3b

SYSTEM """
Eres un asistente técnico especializado en:
- Arquitecturas de inteligencia artificial y modelos de lenguaje (MoE, RAG, agentes)
- Desarrollo en Python, Node.js y APIs REST
- Infraestructura en la nube y contenedores Docker
- Ciberseguridad y convergencia IT/OT

Responde siempre con precisión técnica. Si la consulta no es de tu dominio, indícalo claramente en lugar de especular.
"""

PARAMETER temperature 0.3
PARAMETER top_p 0.9
PARAMETER num_ctx 32768

Para crear y ejecutar este modelo personalizado, usa los siguientes comandos:

# Crear y ejecutar el modelo personalizado
ollama create mi-experto-tecnico -f Modelfile
ollama run mi-experto-tecnico

¿Cuál opción elegir?

La elección entre MoE nativo y MoE orquestado depende de tus recursos y necesidades específicas:

Criterio MoE nativo (Opción 1) Router de expertos (Opción 2)
Facilidad de configuración ⭐⭐⭐⭐⭐ Muy simple ⭐⭐⭐ Requiere código
Especialización por dominio Implícita (router interno) Explícita y personalizable
Uso de VRAM Un solo modelo Múltiples modelos (RAM del sistema)
Control del enrutamiento Ninguno (caja negra) Total (lógica propia)
Latencia por consulta Baja (1 llamada) Moderada (2 llamadas: router + experto)
Similitud con Z.AI Alta Conceptual

Para la mayoría de los usuarios con hardware de consumo (16–24 GB de VRAM), la mejor opción es comenzar con Qwen3:30b-a3b como modelo MoE nativo en Ollama. Este modelo ofrece un buen equilibrio entre calidad y eficiencia. El router de expertos en Python es más adecuado cuando se requiere una especialización clara por dominios, como separar consultas de programación de aquellas sobre razonamiento filosófico o traducción multilingüe.

Advertisement

Curiosidades

Suyu 0.0.4 introduce recompilación estática en la emulación de Nintendo Switch

Published

on

Suyu 0.0.4 introduce recompilación estática en la emulación de Nintendo Switch
La emulación de Nintendo Switch en PC sumó un movimiento técnico relevante con Suyu 0.0.4, la última versión pública del proyecto. Su novedad principal es la incorporación de Recompiler mode, un enfoque de recompilación estática que busca reducir parte de la sobrecarga habitual de la emulación tradicional, especialmente en escenarios donde la CPU condiciona el rendimiento. (más…)

Continue Reading

Arte y Cultura

ChatGPT Imágenes 2.5: más detalles edición precisa y generación un 50% más rápida

Published

on

ChatGPT Imágenes 2.5: más detalles edición precisa y generación un 50% más rápida

OpenAI lanza ChatGPT Imágenes 2.5, su modelo de generación de imágenes con mayor fidelidad, edición precisa y un 50% menos de latencia, para revolucionar la creación visual en usuarios y desarrolladores.

(más…)

Continue Reading

Audio

Nemotron 3.5 ASR: el modelo de NVIDIA para transcribir 40 locales de idioma en tiempo real

Published

on

Nemotron 3.5 ASR: el modelo de NVIDIA para transcribir 40 locales de idioma en tiempo real

NVIDIA ha lanzado Nemotron 3.5 ASR Streaming 0.6B, un modelo de reconocimiento automático de voz (ASR) con 600 millones de parámetros diseñado para transcripción multilingüe en streaming. Disponible en Hugging Face, este modelo admite 40 locales de idioma desde un solo checkpoint, integra puntuación y capitalización en la salida, y permite ajustar la latencia desde 80 milisegundos hasta 1.12 segundos, según la configuración elegida.

(más…)

Continue Reading

Lo más reciente

Lo más popular

Subscribete a nuestro Podcast

Trending