GPT-OSS-120B puede ejecutarse muy bien incluso con solo 8 GB de VRAM
(old.reddit.com)- Aprovechando la opción
--cpu-moede llama-cpp, las capas de expertos MOE se procesan en la CPU y solo las capas de atención se descargan a la GPU, logrando un rendimiento rápido de prefill con 5~8 GB de VRAM - En la GPU solo residen los parámetros no expertos, como caché KV, pesos y activaciones de Attention, tablas de enrutamiento, LayerNorm, etc., por lo que el uso de memoria es bajo
- Incluso con una GPU del nivel de una RTX 3060Ti y 64 GB~96 GB de RAM del sistema, es posible ejecutar con soltura el modelo 120B, y el mejor rendimiento se obtiene con GPUs con soporte BF16 (RTX 3000+)
- Con 5 GB de VRAM registró un rendimiento de 8.15 ms por token (122.66 tokens/s), y con 8 GB de VRAM mejoró hasta 7.44 ms por token (134.44 tokens/s)
- La arquitectura 120B está diseñada para hardware de consumo, por lo que puede ejecutarse a alta velocidad incluso en entornos con recursos de GPU limitados
Estructura de CPU-MOE y offloading a GPU
- Con la opción
--cpu-moe, las capas de expertos (MOE) se procesan por completo en la CPU- Ejemplo:
--n-cpu-moe 36→ los 36 bloques MOE se ejecutan completamente en CPU - Si hace falta, se puede mover parte del MOE a la GPU para ajustar el rendimiento
- Ejemplo:
- En la GPU solo se mantienen los siguientes elementos para ahorrar VRAM
- Caché KV (secuencia)
- Pesos y activaciones de Attention
- Tablas de enrutamiento
- LayerNorm y otros parámetros no expertos
- Como los pesos MOE no residen en la GPU, no existe la carga de los grandes parámetros MLP
Requisitos de memoria y hardware
- GPU: 5~8 GB de VRAM son suficientes (por ejemplo, RTX 3060Ti)
- La GPU ofrece el mejor resultado si soporta BF16 (serie RTX 3000 o superior)
- RAM del sistema: mínimo 64 GB, idealmente 96 GB
- Aprovechando
mmapde Linux, aunque el modelo completo no quepa en memoria, las capas de expertos “calientes” se mantienen cargadas
- Aprovechando
Métricas de rendimiento
Entorno con 5 GB de VRAM
- Procesamiento del prompt: 8.15 ms/token (122.66 tokens/s)
- Inferencia: 55.44 ms/token (18.04 tokens/s)
Entorno con 8 GB de VRAM (--n-cpu-moe 36, el resto en GPU)
- Procesamiento del prompt: 7.44 ms/token (134.44 tokens/s)
- Inferencia: 39.03 ms/token (25.62 tokens/s)
Entorno con 22 GB de VRAM (parte del MOE en GPU)
- Procesamiento del prompt: 6.13 ms/token (163.01 tokens/s)
- Inferencia: 32.45 ms/token (30.82 tokens/s)
Conclusión
- El diseño de GPT-OSS-120B está optimizado para ejecutar modelos de gran escala a alta velocidad incluso en hardware de consumo
- Gracias a la estructura CPU-MOE, que reduce el uso de VRAM sin sacrificar velocidad, resulta especialmente adecuado para entornos con recursos de GPU limitados
Preguntas clave y respuestas
P1. ¿Cuánta VRAM se usa realmente con esta configuración?
- Autor original: alrededor de 5 GB de VRAM cuando todo el MOE se ejecuta en CPU, subiendo solo las capas de atención a la GPU
- Explicación adicional: en la GPU solo residen la caché KV, los pesos y activaciones de Attention, las tablas de enrutamiento y LayerNorm
P2. ¿Cuál es la RAM mínima necesaria?
- Autor original: mínimo 64 GB, idealmente se recomiendan 96 GB
- Motivo:
mmapde Linux mantiene en memoria las capas de expertos “calientes”, permitiendo acceso rápido sin cargar el modelo completo
P3. ¿Mover algunas capas MOE a la GPU acelera mucho el rendimiento?
- Autor original: puede acelerar un poco, pero no hay una diferencia grande
- Ejemplo:
- Todo el MOE en CPU: prompt 134 tokens/s, inferencia 25 tokens/s
- 8 MOE en GPU: prompt 163 tokens/s, inferencia 30 tokens/s
- El uso de VRAM aumenta a 22 GB
P4. ¿Qué GPU es adecuada?
- Autor original: con una RTX 3060Ti o superior es suficiente; se recomienda soporte BF16 (RTX 3000+)
- Motivo: todas las capas fuera del MOE funcionan en BF16
P5. ¿Cómo se configura el comando?
- Autor original: se proporciona un ejemplo basado en PR #15157
~/build/llama.cpp/build-cuda/bin/llama-server \ -m $LLAMA_MODEL_DIR/gpt-oss-120b-mxfp4-00001-of-00003.gguf \ --n-cpu-moe 36 \ --n-gpu-layers 999 \ -c 0 -fa \ --jinja --reasoning-format none \ --host 0.0.0.0 --port 8502 --api-key "dummy"
6 comentarios
De hecho lo probé, pero es demasiado lento.
Casi no usa el clock de la GPU,
llena por completo los 8 GB de memoria dedicada de la GPU y los 64 GB de memoria física,
y de los 16 vCores usa solo la mitad.
Más bien hay que darle valor a que simplemente funciona; no era una forma de usar todos los recursos.
Cada consulta tardó entre 6 y 8 minutos.
Creo que también voy a probarlo de forma similar.
Pensé que con 32 GB sería suficiente...
Primero que nada, no corre en lm studio en una M4 Max de 64 GB :(
Como pesa 65 GB... qué lástima 🥲
Opiniones en Hacker News
abliterated finetuneque rastree y elimine las rutas neuronales que provocan respuestas de rechazoArtículo relacionado
Por eso suelo usar más otros modelos como qwen, mistral o gemma
Otras personas ejecutan el modelo 120B con menos VRAM; quizá se deba a la falta de soporte de ROCm y al uso de Vulkan
Aun así, es divertido llevar el hardware al límite
En llama.cpp puedes configurar manualmente cuántas capas se calculan en la GPU, pero ollama lo ajusta automáticamente
Estaría bien poder ajustar dinámicamente la proporción RAM/VRAM según la longitud de la sesión
Eso sí, en llama.cpp el function calling todavía está roto
Planeo alojar un chatbot de IA en mi habitación con una mini PC de $149, y el modelo Qwen3 4B se ve bien
Plan relacionado
Por ejemplo, funcionó en Qwen 3, y puedes definir tú mismo la regex para mover ciertas capas a un dispositivo específico