Logré ejecutar un modelo de lenguaje de 284 mil millones de parámetros en un portátil con solo 3,2 GB de RAM, utilizando únicamente C99 puro y una unidad NVMe. El truco consistió en realizar streaming de los pesos de los expertos del modelo en lugar de cargar todo el checkpoint de 160 GB en la memoria, demostrando que incluso los modelos de mezcla de expertos (MoE) más grandes pueden comprimirse en hardware de consumo.

Por qué es importante

Los modelos de lenguaje extensos (LLM) impulsan la generación de código, la asistencia en investigación y mucho más, pero su tamaño suele obligar a los usuarios a recurrir a costosos servidores con múltiples GPU o a una cuantización pesada que perjudica la calidad. Demostrar que un modelo MoE de 284 mil millones de parámetros puede ejecutarse con unos pocos gigabytes de RAM abre la puerta a aficionados, pequeñas startups e investigadores con presupuestos limitados para experimentar con modelos de vanguardia sin sacrificar la fidelidad.

El modelo y el cuello de botella del hardware

DeepSeek-V4-Flash almacena 284 mil millones de parámetros distribuidos en 256 expertos por capa de transformador. El checkpoint original ocupa aproximadamente 160 GB en disco, un tamaño que eclipsa los 3,2 GB de RAM de un portátil típico. Los pipelines de inferencia tradicionales intentan mapear todo el checkpoint en la memoria, agotando rápidamente el presupuesto de RAM y provocando el cierre del programa.

Streaming de pesos de expertos: la idea central

Las arquitecturas MoE activan solo un pequeño subconjunto de expertos para cada token. En DeepSeek-V4-Flash, el enrutador selecciona seis expertos de entre 256 por capa. Debido a que el cálculo nunca toca a los expertos inactivos, el motor de inferencia puede omitir su carga.

La implementación trata el checkpoint como una fuente de streaming. Cuando el enrutador decide qué expertos se necesitan para el token actual, el motor extrae esos bloques de pesos de la unidad NVMe hacia una caché LRU (least-recently-used) que reside en la RAM. Si la caché es lo suficientemente grande, los mismos expertos se reutilizan en tokens consecutivos, produciendo aciertos de caché; si la caché es demasiado pequeña, el motor lee del disco con más frecuencia. El resultado es una huella de memoria máxima de 3,23 GB, muy dentro de los límites del portátil, al tiempo que se preservan los pesos de precisión completa y sin necesidad de aceleración por GPU.

Lecciones difíciles de aprender de la implementación

1. Una salida fluida no es prueba de corrección Un kernel con errores aún puede emitir frases que parezcan plausibles, especialmente cuando los patrones de lenguaje del modelo enmascaran los errores numéricos. Validé cada una de las 14 operaciones críticas contra una referencia fresca de PyTorch, comprobando que la diferencia numérica se mantuviera dentro de una tolerancia mínima. Omitir este paso habría permitido que se filtrara una desviación sutil.

2. Los modos de fallo compartidos pueden engañar a tus pruebas Un error de corrupción de memoria colapsó las opciones de enrutamiento en un puñado de expertos, inflando la tasa de aciertos de la caché del 52 % al 95 % y dando la ilusión de una aceleración masiva. Debido a que la suite de pruebas comparaba dos versiones del mismo código con errores, no detectó el problema. La solución es añadir una ruta de referencia independiente —código que no comparta lógica con la implementación principal— para que un fallo compartido no pase desapercibido.

3. Mide antes de optimizar Asumí que una copia de memoria tardaba 1 ms y pasé tiempo optimizándola. El perfilado mostró que la operación en realidad costaba 3,6 ms, o el 22 % del tiempo total de inferencia. La lección: nunca confíes en la intuición para las secciones críticas de rendimiento; la medición precisa es la única guía fiable.

4. Las condiciones térmicas afectan drásticamente al rendimiento Ejecutar las pruebas de rendimiento en un portátil sobrecalentado produjo tiempos de ejecución hasta tres veces más lentos que en una máquina fría. Las temperaturas elevadas limitaron la tasa de transferencia de la unidad NVMe y ralentizaron la CPU, sesgando los resultados. Registra el estado térmico del sistema siempre que publiques cifras de rendimiento.

Cómo se ven los números

  • Tamaño del modelo en disco: ~160 GB
  • Uso máximo de RAM: 3,23 GB
  • Expertos por token: 6 (de 256)
  • Tasa de aciertos de caché: varía según la RAM; con 3,2 GB fluctúa.
  • Sin cuantización: los pesos de precisión completa se transmiten, preservando la calidad del modelo.

Si el presupuesto de RAM cae por debajo de aproximadamente 3,21 GB, la caché nunca se llena y el motor realiza streaming en cada token, lo que provoca una caída drástica del rendimiento.

El código fuente está disponible públicamente en github.com/ronak-create/deepseek-v4-in-c. Existe un canal de discusión de la comunidad en t.me/GyaanSetuAi para cualquiera que desee replicar o ampliar el experimento.

Conclusión

Transmitir únicamente los expertos que un modelo MoE utiliza realmente permite que un LLM de 284 mil millones de parámetros se ejecute en una computadora portátil modesta sin cuantización ni aceleración por GPU. El experimento demuestra que un movimiento de datos ingenioso, una validación rigurosa y una medición disciplinada pueden eludir las limitaciones de hardware que muchos asumen como inmutables.