5 puntos por GN⁺ 4 시간 전 | 2 comentarios | Compartir por WhatsApp
  • Gemma 4 26B-A4B corre a una velocidad cercana a la de lectura en un servidor de 2016 con un solo Intel Xeon E5-2620 v4, 128GB de DDR3 y sin GPU, gracias a la optimización de ik_llama.cpp
  • En el decoder pass de un LLM, el cuello de botella es el ancho de banda de memoria más que el cómputo, y la CPU pasa mucho tiempo esperando traer los siguientes pesos desde la RAM hacia la caché
  • --spec-type mtp, --cpu-moe, --merge-up-gate-experts, --run-time-repack y otros reducen los cuellos de botella en entornos DDR3 mediante decodificación especulativa MTP, enrutamiento MoE y disposición de memoria amigable con la caché
  • Según los logs, el requerimiento total de memoria es de 82,355MiB y, con el contexto completo de 262K, la caché KV ocupa unos 56GB, más que los ~25GB de pesos
  • Herramientas de caja negra como ollama carecen del soporte de modelos y de los controles finos necesarios; en hardware antiguo hace falta entender a fondo el motor de inferencia y la estructura de memoria para exprimir el rendimiento

Entorno de ejecución y cuello de botella principal

  • El servidor de prueba es equipo reutilizado, con estas especificaciones: Intel Xeon E5-2620 v4 @ 2.10GHz, 8 núcleos, 16 hilos, AVX2, 20MiB de caché L3, 2MiB de L2, 128GB de DDR3 y sin GPU
  • Esta CPU no soporta AVX-512, AVX-VNNI ni BF16, y tampoco tiene GPU integrada
  • En la inferencia de LLM, el decoder pass que genera tokens uno por uno está limitado principalmente por el ancho de banda de memoria, no por la cantidad de cómputo
  • Para calcular el siguiente token, hay que mover continuamente desde la RAM hacia la caché y los núcleos de la CPU los pesos que contienen el conocimiento aprendido del modelo; el procesador pasa más tiempo esperando ese traslado que haciendo la multiplicación de matrices
  • Este tipo de “muro de memoria” (memory wall) funciona como una barrera de rendimiento importante no solo en Xeon, sino también en equipos de alto desempeño como H100

Los controles de ejecución necesarios en lugar de herramientas de caja negra

  • Si simplemente se ejecuta llama-cli en un entorno con DDR3 y sin GPU, será muy lento, y todavía queda mucho espacio de mejora debido a optimizaciones pensadas para casos generales con GPU
  • ollama puede no tener el soporte de modelo necesario y no expone suficientes ajustes detallados como para sacar el rendimiento real en ejecución
  • En la práctica, la ejecución solo fue posible combinando múltiples flags expuestas por ik_llama.cpp
  • El conjunto principal de flags es el siguiente
--spec-type mtp --draft-max 3 --draft-p-min 0.0 --spec-autotune  
-sm graph -smgs -sas -mea 256 --split-mode-f32  
-t 8 --parallel 8  
--cpu-moe --merge-up-gate-experts  
--flash-attn on --mla-use 3  
--mlock --run-time-repack --no-kv-offload  

Decodificación especulativa y optimización de MoE

  • --spec-type mtp --draft-max 3 --draft-p-min 0.0 --spec-autotune usa el verificador 26B junto con un pequeño drafter MTP generado previamente
  • --draft-max 3 fija un máximo de 3 tokens por draft, --draft-p-min 0.0 acepta cualquier probabilidad y --spec-autotune ajusta la longitud de la cadena según la carga de trabajo
  • Al generar cadenas largas de razonamiento, aunque el usuario solo vea una respuesta final corta, cada token de pensamiento oculto requiere un decoder pass completo
  • En CPU, el costo de hacer streaming de los pesos del verificador hacia la caché es alto, y como las capas activas del drafter pequeño caben bien en la caché L3, la ventaja de la decodificación especulativa se vuelve mayor
  • Gemma 4 26B-A4B tiene una estructura MoE donde se activan 8 expertos por token de un total de 128; de unos 25.2B parámetros en total, los parámetros activos son alrededor de 3.8B
  • --cpu-moe ajusta el enrutamiento a la jerarquía de caché de la CPU y reduce el cache thrashing que se produce al saltar constantemente entre 128 expertos, vaciar la caché y volver a traer datos desde la DDR3
  • --merge-up-gate-experts fusiona la up projection y la gate projection dentro de cada experto en una sola multiplicación de matrices, y en los logs se confirma con fused_up_gate = 1
  • -t 8 está ajustado a los 8 núcleos físicos; en una carga limitada por memoria, usar los 16 hilos SMT puede aumentar el costo de planificación más que el throughput

Fijación de memoria, reempaquetado y partición del grafo

  • --run-time-repack reorganiza las matrices de pesos justo antes de la inferencia para adaptarlas al layout de caché de la CPU, y en los logs aparece como Repacked 265 tensors
  • Esta opción paga unos segundos al inicio para reacomodar dentro de la RAM las tablas numéricas a un formato que la CPU pueda leer mejor, y así aprovechar al máximo el ancho de banda de memoria durante la generación real de texto
  • --mlock fija el modelo en RAM para impedir que el sistema operativo lo intercambie a disco
  • Si el límite de memlock del kernel no es suficiente, aparecen advertencias como failed to mlock 27628376064-byte buffer y Try increasing RLIMIT_MEMLOCK; no es un problema del LLM en sí, sino de la configuración base de ulimit
  • --no-kv-offload omite la búsqueda de mover la caché KV a la GPU en entornos sin GPU y la mantiene en la RAM del sistema
  • -sm graph intenta una partición del grafo de cómputo para dividirlo verticalmente y permitir que varios dispositivos de procesamiento o regiones de memoria calculen al mismo tiempo distintas partes de una misma capa
  • En esta ejecución, el log Split mode 'graph' is not supported for Gemma4 external MTP hizo que se degradara de forma segura a una división por capas
  • -sas indica dividir la carga de trabajo entre sockets físicos de CPU o nodos NUMA, y --split-mode-f32 hace que los puntos intermedios que se vuelven a combinar tras la división usen precisión de coma flotante de 32 bits

Attention, uso de memoria y conclusión

  • ikawrakow escribió kernels personalizados para procesar Flash Attention en CPU, permitiendo que funcione sin GPU en contextos pesados
  • --flash-attn on fusiona el softmax de attention y la multiplicación de matrices, evitando escribir físicamente en RAM la matriz completa de attention N×N y calculándola/consumiéndola en la caché en pequeños bloques
  • --mla-use 3 activa Multi-Head Latent Attention para comprimir Key y Value de la caché KV en una representación latente más pequeña
  • En los logs aparecen flash_attn = 1, fused_moe = 1 y fused_up_gate = 1, lo que muestra que esas optimizaciones sí se aplicaron
  • Según el log de memoria, la suma total de todas las capas es de 81,607.46MiB, y la memoria necesaria para tensores del modelo y cachés es de 82,355MiB
  • Con el contexto completo de 262K, los pesos ocupan unos 25GB y la caché KV unos 56GB, así que la caché KV es más grande que el modelo
  • Esta configuración carga un MoE de 25B parámetros y realiza decodificación especulativa con un drafter MTP, generando texto a velocidad de lectura en un Xeon de 2016 con DDR3 y sin GPU
  • La conclusión es que el cuello de botella para ejecutar localmente la IA moderna de pesos abiertos no está solo en el silicio, sino en entender cómo funciona el motor de inferencia y la estructura de memoria; con el fork correcto, una cuantización bien ajustada y comprensión de la arquitectura de memoria, también se puede correr en servidores antiguos

2 comentarios

 
GN⁺ 4 시간 전
Opiniones de Hacker News
  • Escribí esto por la frustración de no tener una buena forma de ejecutar el nuevo modelo Gemma 4 Drafter y de que las herramientas convencionales escondan los puntos de ajuste de rendimiento.
    Al final logré ejecutar a velocidad de lectura un modelo MoE 26B reciente en un viejo servidor reciclado, sin GPU, con solo un Xeon E5-2620 v4 y 128GB de RAM DDR3.
    También dejé enlazado al final un modelo cuantizado, pero no funcionará a menos que uses el fork mencionado de ik_llama-cpp, y para los detalles hay que ver otra publicación.
    No soy ingeniero de machine learning y el servidor además está ocupado haciendo de caché de Nix, pero si hay preguntas puedo responder dentro de lo posible.

    • Me pregunto si, para una carga limitada por ancho de banda de memoria, SMT no sería justamente un caso típico donde sí ayuda.
      Mientras un hilo espera a la DDR3, otro hilo podría ejecutarse.
      Tampoco termino de entender la explicación de --cpu-moe. Si un experto tiene unos 4.0GiB de parámetros y el caché L3 es de solo 20MiB, parecería que ni optimizando el orden de los expertos se pueden cachear los parámetros de forma significativa.
      Además, como ya dijeron otros, solo algunos Intel Xeon E5-2xxx v4 soportaban DDR3, y según la documentación de Intel E5-2620 v4 no es uno de ellos.
    • Es un logro realmente excelente en términos prácticos. Me pregunto si en una workstation Dell T7610 parecida se obtendría un rendimiento similar o mejor.
      Tiene doble Xeon y 128GB DDR3, con 2 × Xeon E5-2697 v2 para un total de 24 núcleos/48 hilos, así que en cantidad de núcleos sale mejor, aunque quizá la diferencia real no sea tan grande.
      Es un equipo que está juntando polvo, así que Gemma a velocidad de lectura suena bastante prometedor.
    • Hace 2 años compré en Amazon un servidor reacondicionado con 2× E5-2690v4, 128GB de RAM y una Dell T7810 por menos de 500 dólares.
      Busca “chia farming” en Amazon, solo que ignorando las chia seeds.
      Ahora el mismo equipo cuesta como 2.5 veces más, pero sigue siendo mucho más barato que una máquina DDR5 de generación actual.
      https://www.amazon.com/dp/B095TRGCSX
    • Dudo mucho que realmente sea DDR3. Tengo dos equipos E5 v4 en casa y ambos usan DDR4, así que no sé si el socket 2011-3 soporta tanto DDR3 como DDR4.
    • Esta configuración parece encajar justo con mi situación.
      Tengo Intel(R) Xeon(R) CPU E5-2680 0 @ 2.70GHz, CPU en línea 0-31 y 128GB de RAM.
      Me pregunto si tener 8 ranuras DIMM realmente mejora el ancho de banda de memoria. Ahora mismo este pobre equipo solo se usa para ver YouTube.
  • Todavía no hemos llegado a ese punto, pero el destino final obvio cuando termine la burbuja actual es que los modelos abiertos ejecutándose en hardware y dispositivos locales serán “lo suficientemente buenos” para la mayoría de los usos.
    Si eso pasa, podría desmoronarse por completo lo que hoy está ocurriendo en la industria tecnológica.

    • En mi caso eso ya pasó. El cambio de precio de CoPilot me llevó a cancelar la suscripción e instalar un modelo local para programación que corre completamente dentro de la VRAM.
      Cuando de verdad me atasque llamaré a la API de Claude, pero parece que un modelo local más tonto puede cubrir el 80% de lo que necesito.
      Los lenguajes y las técnicas de programación no cambian tanto, así que espero poder usarlo al menos 5 años; y cuando optimicen modelos más inteligentes para la misma VRAM, entonces actualizo.
      Me gusta esa dirección.
    • Desde la perspectiva de Amazon, parecería conveniente ejecutar modelos abiertos y vender tiempo por hora a un precio cercano al costo de ejecución.
      Si no lo hacen, mi suposición es que los laboratorios de IA actualmente venden sus modelos con pérdidas enormes, así que para Amazon usar computación de bajo margen quizá resulta menos atractivo que otros productos de alto margen.
      Tal vez ni siquiera haga falta llegar a la ejecución local para que el estado actual colapse. Si a los laboratorios de IA se les acaba el dinero fácil y tienen que vender a precios por encima del costo real de ejecución, cualquiera que tenga capacidad de cómputo tendrá incentivo para ofrecer servicios de modelos abiertos más baratos a precios de mercado generales.
    • OpenAI y Anthropic, en el fondo, se parecen menos a empresas de IA y más a un negocio de infraestructura de cómputo.
      Todo el mundo va a tener modelos y capacidad de ejecutarlos, y por eso la escasez de GPU juega a su favor.
    • Sería el peor escenario posible para las empresas recién nacidas con valuaciones de billones.
      Su esperanza depende de que empresas grandes y pymes muevan todos sus procesos de trabajo a la nube, y de que los empleados compitan por consumir la mayor cantidad posible de tokens.
    • No diría que todo se vaya a derrumbar por completo, pero claramente vamos en esa dirección.
      Un modelo “lo suficientemente bueno” sumado a privacidad y ahorro de costos a largo plazo resulta muy atractivo.
      Irónicamente, cuanto mejor sea el entorno de ejecución general para agentes de programación, menor será el foso defensivo de servicios como Claude. Cuesta creer lo rápido que algunos modelos abiertos alcanzaron a modelos de punta en apenas unos meses.
  • El texto está bueno y además es técnicamente impresionante. Coincido en que hay que entender el pipeline de compilación y poder ejecutar esto en local.
    Aun así, según la tarifa eléctrica, puede no ser económico. Los servidores viejos son poco eficientes energéticamente, y yo pensaba que un servidor Xeon antiguo consumiría unos 200W bajo carga; mientras tanto, ese mismo modelo está disponible en OpenRouter por 0.1/0.3 dólares por millón de tokens, a 76 tokens/segundo y con 262k de contexto.
    Además, estos servidores hacen ruido. Aunque mi estimación de 200W probablemente era demasiado alta; tuve servidores Xeon viejos que sí consumían bastante, pero no recuerdo los modelos exactos.

    • El 2620v4 no es un monstruo que se traga la electricidad. Depende de la placa del servidor, pero no necesariamente es así.
      Los servidores suelen ser ruidosos, aunque eso también depende de la configuración. Hay mucho hosting barato basado en estos chips y, sorprendentemente, son bastante eficientes en consumo.
    • Bajo carga estará más cerca de 85W. Incluso con un cooler barato es muy silencioso y rara vez pasa de 50°C.
    • Estos servidores son ruidosos porque, si los pones en 1U o 2U, necesitas ventiladores de alta velocidad para generar la presión estática necesaria.
      Si corres una configuración parecida en un gabinete 4U con ventiladores lentos de 120mm, queda bastante bien.
  • Me alegra ver que otros también se están dando cuenta de esto. Estoy ejecutando Gemma 26B-A4B Q4 en un contenedor con un Xeon de 2012 y 16~24GB de RAM, y obtengo más o menos 8~12 tokens/seg
    No se puede comparar con contextos grandes ni con ejecución en GPU, y el decodificador de imágenes de llama.cpp también es mucho más lento que en GPU, pero para tareas pequeñas de automatización o preguntas de conocimiento general está bien. Es lo bastante rápido como para poder seguir leyendo mientras responde, así que la espera se siente menor
    La configuración es un build de llama.cpp con OpenBLAS y OpenMP activados, OPENBLAS_NUM_THREADS=4, OMP_NUM_THREADS=4, unsloth/gemma-4-26B-A4B-it-GGUF:UD-Q4_K_XL, caché q8_0 y un contexto de 8192
    Hay que buscar optimizaciones por CPU, como AVX2, y probé MTP un momento, pero no hubo mejora de rendimiento. También se puede ajustar el tamaño del lote de caché/contexto o bajar hasta Q2, y conviene evitar asignar demasiados hilos. Recomiendo empezar por los valores por defecto o con llama-bench

    • Ahora mismo estoy armando un sistema Frankenstein. Tiene una placa X99 china para DDR3, un Xeon v3 de 12 núcleos, 32GB de RAM a 1866MT/s y una 1080 Ti
      Durante las pruebas ejecuté gemma4:e4b-it-q4_K_M, que cabe por completo en 11GB de VRAM, y superó los 50 tokens/seg. Un modelo así de pequeño no sirve mucho para programar, pero puede tener otros usos
      Quiero hacer algo tipo Wake-on-Use para usarlo como un ChatGPT personal. Tal vez se pueda poner una Pi como proxy y hacer que invoque un script de Wake-on-LAN, y algún día podría convertirse en un proyecto divertido de fin de semana
      El LLM que dejo siempre encendido es Gemma4:31b, una versión dense que ni siquiera entra a la mitad en una 2060 de 12GB; va muy lento, pero la calidad es buena, y como lo uso para procesamiento automático en cola, no me quedo mirando la salida. Tengo otra 2060, pero si conecto las dos la PC no logra hacer POST
    • Hablando de llama y computación local, hace unos días Georgi Gerganov tuiteó que está ejecutando localmente Qwen3.6 27B en una Mac M2 Ultra o en una RTX 5090 para ayudar con el desarrollo de llama.cpp
  • Estuve considerando por un tiempo una Mac Studio Pro, pero al final terminé por este camino. Tengo una HP Z620 sin monitor con 192GB de RAM ECC, doble Xeon E5-2680 v2, Optane AIC, dos P102-100 con 10GB de VRAM, un SSD mínimo de arranque con Debian 12.6 y una versión vieja de CUDA fijada para soportar tarjetas Pascal
    La uso de forma remota desde el sótano con AMT/meshcommander, levanto llama.cpp y el frontend, y luego accedo por la red local. He estado probando Talkie, Qwen 3.6 27b y medgemma, y escogiendo una cuantización adecuada, el rendimiento de GGUF en general fue bastante bueno
    El costo total fue de menos de 500 dólares, aunque era un servidor que compré en eBay el año pasado, así que ahora podría ser distinto
    Más adelante, si los LLM ternarios florecen, espero que este hardware viejo pueda en realidad alojar modelos densos de alta compacidad llenos de conocimiento. No importa si se desbordan hacia Optane por ser más grandes que la RAM de GPU, porque me importa más el conocimiento factual general que la velocidad
    El plan final es dejarlo configurado y guardarlo en un bote de basura Faraday en el sótano, como un oráculo para “reconstruir la civilización” cuando el mundo se derrumbe. Claro que en una situación así la energía sería el problema, pero si este hardware es tan barato y la IA moderna ya resulta práctica tantas veces, vale la pena intentarlo

  • Lo más interesante del avance de la IA no es AGI ni el último modelo de cierto unicornio de IA, sino qué se puede ejecutar en local
    Hace 6 años podías correr en una PC gamer potente modelos curiosos pero poco útiles; ahora puedes correr en una laptop M5 algo 100 veces mejor que eso
    Si el mercado responde a la falta de memoria y el avance de Apple silicon sigue a este ritmo, lo que podremos ejecutar en local dentro de 6 años será muy interesante o muy aterrador
    Tampoco sé qué significa eso para la valuación de las empresas de IA. Una vez hice una pregunta parecida a un empleado de una de esas empresas en un evento, y en vez de responder se fue por un cóctel

    • Hay cosas que no se pueden decir en voz alta. En el negocio de modelos de IA no hay un foso tecnológico sostenible y fácil de defender; solo hay ventajas de corto plazo
      El negocio de la IA es intensivo en capital, como una fábrica antigua. Los centros de datos son caros, los modelos consumen mucha electricidad y el hardware interno tiene que reemplazarse cada 3~4 años
      Modelos más pequeños y especializados van comiéndose los márgenes desde abajo. Para transcripción, voz o detección de imágenes no hacen falta modelos gigantes
      No hay motivo para esperar márgenes altos como en el software tradicional, y la mayor parte de las ganancias de la IA termina yéndose al consumidor. Aun así, unas pocas empresas gigantes como Microsoft, Google, Amazon y Meta sí podrían buscar ventaja de costos mediante economías de escala
    • El nivel de lo que se puede correr localmente en hardware de consumo está avanzando bastante bien
      No hace falta una gama altísima como una 5080; con una GPU gamer decente ya puedes ejecutar modelos locales mejores que el estado del arte de inicios de 2025
      Dependiendo de la tarea que quieras, puede que tengas que cambiar de modelo, y los modelos gigantes que sirven para todo siguen siendo terreno de los centros de datos
    • Al final es un tema de conveniencia. Desde Wikipedia hasta redes sociales, correo electrónico o servidores de video, muchas cosas se pueden ejecutar en local
      Pero la mayoría de la gente con trabajo de tiempo completo y dos hijos no tiene ni el tiempo ni la energía para parchear y dar mantenimiento. Los sistemas siguen volviéndose más complejos y también más propensos a errores. Es el viejo intercambio entre libertad y comodidad
    • Probablemente no tenga mucho impacto en la valuación de las empresas de IA
      La mayoría de los usuarios no sabe qué es un LLM ni cómo se ejecuta. Muchos usuarios de LLM simplemente usan lo que les dan en el trabajo, y hasta los usuarios un poco más avanzados parecen estar bien pagando una suscripción a OpenAI o Anthropic
      Habrá una base pequeña pero comprometida de usuarios de modelos abiertos que prefieran LLM locales, pero el resto probablemente seguirá consumiéndolos de grandes proveedores. Podría parecerse a la elección de sistemas operativos hoy: una minoría usa Linux y la gran mayoría usa Windows, macOS o Chrome
    • En software, especialmente en juegos, siempre ha sido así
      Los juegos de hace 5~6 años se pueden comprar mucho más baratos y corren en hardware común. Pero la industria no se queda quieta durante 5 años, así que siguen saliendo programas nuevos que requieren hardware mejor
  • El resultado que el autor original reveló en los comentarios es de aproximadamente 12 tokens/seg
    Es un esfuerzo mucho más impresionante de lo que pensaba que sería posible con este hardware, pero todavía está bastante por debajo del nivel necesario para una sesión interactiva satisfactoria.

    • En particular, estos modelos pequeños son realmente baratos y rápidos en plataformas como OpenRouter.
      Muchas veces cuestan entre 100 y 500 veces menos que los modelos de punta, y en algunos casos también son entre 2 y 5 veces más rápidos en tokens/seg.
    • Me tomó demasiado tiempo encontrar ese resultado. Si consideras que el modelo puede correr incluso en SSD, no sorprende que pueda ejecutarse en RAM lenta.
    • No está tan mal para uso interactivo: https://mikeveerman.github.io/tokenspeed/?rate=12&mode=text
      Para uso en segundo plano, sería más que suficiente.
    • También se puede hacer cifrado RSA con papel, lápiz y una calculadora científica.
      Funciona, pero no tiene el rendimiento necesario para trabajo serio.
  • El E5-2620 v4 es excelente. Lo he usado durante 10 años, e intenté actualizarlo, pero me detuve al ver los precios actuales.
    Le puse 64GB DDR4 y una RX 9060 XT 16GB, y los juegos todavía corren rápido. En DOOM The Dark Ages, el CPU quizá sea un poco cuello de botella, pero a 60fps no hay problema.
    Correr un LLM ligero en la GPU es la opción obvia, y está genial que en CPU también pueda ir bastante bien con algo de ajuste.
    Hace un mes compré un 2667 v4 por 30 dólares y parece que sí habrá una mejora de rendimiento considerable, pero todavía no lo necesitaba. Como en el artículo, si lo fuera a empujar más hacia LLM, probablemente actualizaría, porque el 2667 puede manejar RAM un poco más rápida.

    • Tengo una configuración con doble E5 2667-v4, 256GB DDR4, Z640 y 1080 Ti, y conseguí todo en menos de 500 dólares en la primera mitad de 2025, excepto los SSD.
      Todavía me sorprenden bastante las cosas que se pueden encontrar en el mercado de segunda mano.
      No esperaba que los precios de la RAM y la GPU se dispararan tanto, así que tuve buena suerte con el timing. Incluso he pensado en cazar una 3080 por unos 300 dólares en eBay y vender la 1080 Ti, pero fuera de eso, ha sido una gran actualización.
      Consume electricidad como Coca Cola, pero como workstation funciona de maravilla, así que pienso seguir exprimiéndola hasta que se descomponga.
    • Usar un CPU durante 10 años sí se siente como muchísimo tiempo.
      Antes pensaba que el daño por calor terminaba matando a los CPU después de unos 5 a 7 años, y me pregunto si esa suposición era incorrecta. Quizá los CPU de hoy simplemente sean mucho más resistentes y duraderos que antes.
  • Hace poco hubo otra publicación parecida relacionada con optimización de Xeon antiguos.
    “High-Performance AI on a Budget: Optimizing llama.cpp for Qwen3.5 Inference on a Dual-GPU HP Z440”
    https://news.ycombinator.com/item?id=47320244

  • Sorprendentemente, Itanium también parece encajar bastante bien con los LLM: https://medium.com/@tglozar/running-llama-inference-on-intel...
    Pensándolo bien, tiene sentido

 
cronex 1 시간 전

Qué interesante el contenido. Tengo un sistema Xeon antiguo, así que voy a intentar probarlo.