¡Hola Devs! ¿Listos para entender los MoE?
Si has seguido el mundo de los LLMs, seguro has visto modelos como DeepSeek R1, Qwen 3.5 o Mixtral-8x7B. Todos usan una arquitectura llamada Mixture of Experts (MoE). ¿La idea? En lugar de usar todos los parámetros para cada token, solo activas un subconjunto de "expertos".
Ejemplo: GPT-OSS-20B tiene 21B parámetros totales, pero solo ~3.6B activos por token. Esto permite ~110 tokens/segundo en hardware de consumo.
Pero aquí viene el problema: las herramientas existentes (Hugging Face transformers, por ejemplo) fueron diseñadas para modelos densos. Cargar los pesos de un MoE, hacer quantización o distribuirlo entre GPUs era un dolor de cabeza. Hasta ahora.

El Refactor del Cargamento de Pesos: De 66s a 10s
El Problema
Imagina que tu checkpoint tiene 256 tensores separados para los expertos:
# DeepSeek-V3: 256 tensores por capa
'model.layers.3.mlp.experts.0.gate_proj.weight'
'model.layers.3.mlp.experts.1.gate_proj.weight'
# ... hasta expert 255
Pero la GPU quiere un solo tensor para hacer grouped GEMM. El código viejo simplemente no podía con eso.
La Solución: WeightConverter
Ahora el cargamento es un pipeline de conversión:
from transformers.models.llama.convert_weights import WeightConverter, MergeModulelist, Concatenate
# Junta todos los expertos en un solo tensor
converter = WeightConverter(
["block_sparse_moe.experts.*.w1.weight", "block_sparse_moe.experts.*.w3.weight"],
"mlp.experts.gate_up_proj",
operations=[
MergeModulelist(dim=0),
Concatenate(dim=1),
]
)
Resultados en Benchmarks
| Versión | Estrategia | Modo | Tiempo |
|---|---|---|---|
| v4.57.6 | device_map="auto" | Threadpool | 66.24s |
| v4.57.6 | TP | — | OOM |
| v5 | device_map="auto" | Async | 20.71s |
| v5 | TP | Async | 10.1s |
6x más rápido. Y no es solo por usar más hilos — es porque el pipeline evita picos de memoria y ya empaca los expertos durante la carga.

Expert Backend: El Motor que Puedes Cambiar
Una vez que los expertos están en un solo tensor, necesitas rutear los tokens eficientemente. El nuevo sistema de Expert Backend te permite elegir la implementación sin tocar el modelo:
from transformers.models.llama.modeling_llama import use_experts_implementation
@use_experts_implementation
class LlamaSparseMoeBlock(nn.Module):
pass # El decorator maneja el dispatch
Tres backends:
- eager: loop simple, para debugging.
- batched_mm: duplica pesos por token, usa
torch.bmm. Rápido para batches pequeños. - grouped_mm: agrupa tokens por expert, usa
torch._grouped_mm. Ideal para batches grandes.
Paralelismo de Expertos: MoE en Varias GPUs
¿Tienes 4 GPUs y un modelo de 120B? Activa expert parallelism con una línea:
from transformers.distributed.configuration_utils import DistributedConfig
distributed_config = DistributedConfig(enable_expert_parallel=True)
model = AutoModelForCausalLM.from_pretrained(
"openai/gpt-oss-120b",
distributed_config=distributed_config,
)
Ejecuta con:
torchrun --nproc-per-node 4 script.py
Cada GPU carga solo sus expertos locales y usa all-reduce para combinar resultados.
Entrenamiento MoE: 12x Más Rápido
Entrenar MoE siempre fue complicado — comunicación distribuida, inestabilidad en el ruteo... La colaboración con Unsloth lo cambió todo:
- 12× más rápido que v4
- >35% menos VRAM
- 6× más contexto
Usan kernels customizados Triton + LoRA sobre el Expert Backend. Guía oficial de Unsloth.
Limitaciones y Cuidados
- Router Collapse: Sin regularización, el router puede mandar todo al mismo expert. ¡Usa load balancing loss!
- Memoria Total: Aunque los parámetros activos son pocos, los totales deben caber en la memoria agregada de tus GPUs.
- Quantización por Expert: Ahora es posible con v5, pero sigue siendo un workflow avanzado.
¿Qué Sigue?
- Prueba cargar un modelo MoE con
transformers>=5.0y mide el tiempo. - Experimenta con los tres backends en tu setup.
- Si entrenas, usa Unsloth para fine-tuning MoE.
Lecturas Recomendadas
- Guía Completa de Pseudo-Elementos CSS para Highlight
- RCCLX: Revolucionando la Comunicación GPU para AMD
Fuente: Blog de Hugging Face - MoE in Transformers

Conclusión
El transformers v5 no es solo una actualización menor — es un rediseño completo que hace que los modelos MoE sean ciudadanos de primera clase. Si antes evitabas los MoE por la complejidad de carga o el overhead de entrenamiento, este es el momento de darle una oportunidad. La comunidad de código abierto en Latinoamérica ya está adoptándolo. ¡Vamos a darle! 🚀