14 puntos por GN⁺ 2024-04-02 | 2 comentarios | Compartir por WhatsApp

Mejoras de velocidad de LLaMA en CPU

  • El proyecto llamafile de Mozilla escribió 84 nuevos kernels de multiplicación de matrices
  • Al usar pesos F16 y Q8_0 en CPU, el tiempo de evaluación del prompt es entre 30% y 500% más rápido que en llama.cpp
  • Las mejoras más drásticas se lograron en computadoras ARMv8.2+ (p. ej., RPI 5), Intel (p. ej., Alderlake) y AVX512 (p. ej., Zen 4)
  • Muestra una velocidad 2 veces mayor que MKL para matrices que caben en caché L2
  • La mejora de velocidad funciona mejor con prompts de menos de 1,000 tokens

Contexto

  • llamafile es un proyecto de LLM local iniciado junto con Mozilla en noviembre de 2023
  • Empaqueta llama.cpp como un binario multiplataforma de un solo archivo usando Cosmopolitan Libc
  • Se ejecuta en 6 sistemas operativos para AMD64 y ARM64, con pequeñas modificaciones
  • Creen que al mejorar la tecnología central pueden ofrecer a los usuarios la mejor experiencia posible de llama.cpp y ayudar a que ambos proyectos lleguen a un público más amplio
  • Mozilla ha estado proporcionando recursos para ello

Mejoras de rendimiento en hardware empresarial

  • Cuando se interesó por primera vez en los LLM, su entorno de trabajo era una modesta Hewlett Packard con discos giratorios, RAM lenta, procesador AVX2 y Alpine ejecutándose sin GPU
  • Lo que le gustó de llama.cpp fue que ellos pensaban primero en personas como él
  • Empezó a colaborar como voluntario de tiempo completo y trabajó con personas como Slaren para introducir soporte para mmap(), lo que permitió cargar los pesos al instante mientras reducía a la mitad el uso de RAM
  • En ese momento fue un gran salto para los LLM locales, pero casi no ayudó a mejorar la velocidad de evaluación
  • La mayor parte del código de inferencia fue escrita por el propio Georgi Gerganov y era tan buena que terminó tomando un año más poder mejorarla
  • Ahora que ya la mejoró, propone ver cuánto más rápido se volvió en aquella vieja Hewlett Packard

Mejoras de rendimiento en hardware de hobby

  • Se pueden ejecutar modelos de lenguaje grandes incluso sin una computadora grande
  • Hoy en día, una de las mejores computadoras personales que se pueden conseguir en tienda es la Raspberry Pi
  • Ofrece un rendimiento excelente por un precio bajo y consume muy poca energía
  • Raspberry Pi lanzó hace unos días su quinta generación, que es enormemente más rápida que el modelo anterior
  • También introdujo soporte para la ISA ARMv8.2 dotprod y aritmética fp16, algo muy útil para los LLM
  • Solo esas dos funciones ya permitieron que el año pasado llama.cpp lograra una mejora de rendimiento de 10 veces con pesos f16
  • Esta semana, además, se consiguió otra mejora de 2 veces usando kernels que originalmente estaban pensados para AVX512
  • No esperaba que kernels diseñados para equipos de centro de datos encajaran bien en una Raspberry Pi pequeña y ligera, pero resultó funcionar perfectamente porque ambos CPU tienen 32 registros vectoriales

Mejoras de rendimiento en hardware para gaming

  • Los gamers tienen algunas de las expectativas de calidad más altas entre los consumidores que buscan valor, así que el hardware hecho para ellos normalmente es bastante bueno
  • La industria del aprendizaje automático ha prosperado durante años reutilizando hardware hecho para gamers
  • Sin las contribuciones clave de los gamers, el invierno de la IA probablemente habría durado 10 años más
  • Hace unos meses le pidió a un gamer que armara una computadora que pudiera reemplazar a la vieja Hewlett Packard
  • Considera que Alderlake es un gran CPU, pero parece ser muy malinterpretado, dado que fue fácil aumentar 5 veces el rendimiento de float16
  • A diferencia de ARMv8.2, los kernels de x86 usan internamente tipos de operación float32, así que pudieron hacerlo sin introducir errores de redondeo
  • Eso significa que se pueden crear filtros de spam más inteligentes
  • Ejecutar el script de shell spam.sh toma solo 420 milisegundos, lo que es 7 veces más rápido que una Raspberry Pi 5
  • En cargas pequeñas, este chip puede terminar antes de que CUDA siquiera arranque
  • Los dueños de Alderlake pueden esperar que llamafile tenga especial cuidado en no ejecutarse en los núcleos de eficiencia
  • Esa es una de las cosas que ayuda a que llamafile corra más rápido que llama.cpp
  • También significa que, incluso si se ejecuta un LLM las 24 horas, todavía quedan recursos suficientes para otros programas de la computadora
  • llama.cpp despacha los hilos en lockstep, así que si un núcleo tarda más que otro en completar su trabajo, los otros n núcleos tendrían que quedarse en busy loop hasta que todos terminaran
  • La característica más destacada de este microprocesador es qué tan rápido puede compilar los 2.6 millones de líneas de código del monorepo Cosmopolitan
  • La Hewlett Packard siempre tardaba 64 segundos, pero esta computadora gamer lo hace en 20 segundos
  • Originalmente tardaba 35 segundos, pero se volvió más rápida tras aplicar metal líquido y overclocking con IA
  • Otra razón por la que el código de sistema va tan rápido en Alderlake es que, durante el proceso de creación de este CPU, hubo una pelea feroz entre hackers y científicos, y ganaron los hackers
  • Espera que en el futuro se logre un mejor punto de equilibrio para AVX512, pero en general está muy satisfecho con este chip porque cree que representa un progreso considerable frente al modelo anterior

Mejoras de rendimiento en hardware de Apple

  • Si se habla de computadoras personales de más alto nivel, seguramente sería la Mac Studio
  • Aquí fue más difícil para él tomar la delantera en rendimiento, porque es la plataforma de hardware que más cuidan los desarrolladores de llama.cpp, y por haber elegido usar el compilador de Stallman está trabajando con una desventaja frente a las herramientas propietarias de Apple
  • No sorprendería que el microprocesador M2 convirtiera a llamafile en una tubería de contenidos sintéticos
  • El truco que Apple usó para esto fue aprovechar la integración vertical
  • Si compras una Mac Studio y miras por dentro, descubrirás que pusieron la RAM DIMM dentro del CPU
  • Como el CPU ya no necesita hacer esas llamadas de larga distancia, las tareas sensibles a la latencia, como la generación de tokens, se vuelven mucho más rápidas
  • Sin embargo, en términos de flops puros (medidos como prompt tok/sec), se puede ver que la ISA ARM del M2 Ultra solo expone 30% más cómputo que su computadora Intel mucho más barata
  • Solo es posible acceder a más a través de frameworks propietarios como Metal o Accelerate
  • Si xcode está instalado, llamafile compilará por defecto un pequeño módulo stub que ayuda a colocarse delante de todas las bibliotecas de código cerrado que están entre tú y el silicio
  • Si estás considerando comprar una Mac Studio, algo importante es que, al igual que Windows Executive, XNU hace un trabajo realmente bueno manteniendo estable el escritorio, y eso significa que protege al sistema de ti mismo
  • Debido a todas estas funciones de seguridad, compilar el monorepo Cosmo en una Mac Studio toma 45 segundos, pero parece que incluso si activaras una fork bomb, Netflix no se saltaría ni un solo frame
  • El script spam.sh también corre en 430 ms, así que es más lento que Intel
  • Sin embargo, nada de esto le preocupa porque ha visto cómo Asahi Linux puede sacar todo el potencial del M2

Mejoras de rendimiento en hardware profesional

  • llamafile pone mucho interés en ayudar a quienes no tienen GPU, pero también ofrece una experiencia de primer nivel para el 1% superior
  • El AMD Ryzen Threadripper PRO 7995WX salió hace unos meses y actualmente es el CPU más caro que se puede comprar con dinero
  • Cuesta 10,000 dólares, pero ofrece 96 núcleos con AVX512 basados en la arquitectura Zen4
  • A pesar de costar el doble, la ISA x86 del 7995WX ofrece 7 veces más potencia de cómputo bruta que la ISA ARM del M2 Ultra, y aun así muestra una velocidad de generación de tokens casi igual
  • Es muy probable que esto se deba a sus 384 MB de caché L3
  • Una ventaja de AVX512 es que el modelo Gemma de Google puede resolver acertijos matemáticos en AVX512 pero no en AVX2, porque los vectores más grandes suelen facilitar la reducción de errores de redondeo
  • La instrucción VDPBF16PS ayuda a hacer updot de bf16, de manera similar a VNNI y ARM dotprod
  • Modelos como Mistral y TinyLLaMA distribuyen sus pesos en bfloat16 como formato oficial, así que el soporte nativo para bf16 es bueno
  • Si conviertes bf16 a fp16, solo el 13% de los números posibles puede representarse con exactitud
  • En la práctica eso casi no importa, porque el 99.71% de los números que usa Mistral 7b están dentro de ese 13%
  • Sin embargo, llamafile hace todo lo posible por entregar la cantidad de bits que promete

2 comentarios

 
savvykang 2024-04-02

No hay datos sobre equipos de gama media como un Intel 14600 o un Ryzen 5600. Parece que la intención era mostrar que al menos puede correr en una Raspberry Pi, pero da la impresión de que sería difícil usarlo en la práctica. Aun así, quisiera tomar como consuelo que los requisitos de hardware necesarios para ejecutar un LLM local están bajando poco a poco.

 
GN⁺ 2024-04-02
Opiniones en Hacker News
  • Opinión sobre la implementación de SGEMM en Fortran:

    • Los compiladores modernos de Fortran pueden aplicar optimizaciones AVX y FMA sin cambios adicionales.
    • La optimización de desenrollado de bucles (loop unrolling) puede habilitarse mediante la bandera del compilador (-funroll-all-loops).
    • El compilador de Intel realiza desenrollado de bucles incluso sin una solicitud explícita del usuario.
    • Agregar paralelización a código fuente de Fortran 77 puede ser difícil, pero se pueden añadir directivas OpenMP o usar estructuras de paralelización de Fortran moderno.
    • No hay que subestimar las funciones de Fortran 77. El propósito de Fortran es liberar al desarrollador de los detalles específicos de la plataforma y dejar ese trabajo al compilador.
  • Opinión sobre un reemplazo de cuBLAS:

    • Parece un intento de reescribir cuBLAS dentro de CUDA.
    • El siguiente paso podría ser eliminar la dependencia de CUDA y usar directamente shaders de cómputo de Vulkan o Metal.
  • Opinión sobre la ejecución de LLM (modelo de lenguaje local):

    • Todo el mundo debería poder descargar y ejecutar un LLM localmente incluso con requisitos mínimos.
    • Esto podría servir como respaldo de una gran parte del conocimiento humano.
  • Opinión sobre la medición de rendimiento:

    • Se prefiere usar C++ para definir subrutinas. C++ es más de tres órdenes de magnitud más rápido que Python.
    • Gusta la idea de medir la diferencia de rendimiento en “años de la ley de Moore”.
  • Enlaces relacionados:

  • Opinión sobre el título:

    • El título es confuso. Al principio puede malinterpretarse como si afirmara que el modelo es más rápido en CPU que en GPU.
    • Sería mejor un título más claro, como "Mejoras de rendimiento de LLaMA en CPU".
  • Opinión sobre la mejora de rendimiento frente a MKL-DNN:

    • Hubo una experiencia intentando superar a MKL-DNN para tamaños de matriz limitados, pero fracasó.
    • Esa eficiencia energética en CPU es físicamente imposible.
  • Opinión sobre la ejecución de LLM:

    • Es posible ejecutar modelos grandes de lenguaje sin una computadora grande.
    • Ejecutar un modelo con pocos parámetros también cuenta técnicamente como ejecutar un modelo de lenguaje, pero podría no cumplir con el estándar que la mayoría considera útil.
  • Opinión sobre el uso de CPU en Pixar:

    • Grandes estudios como Pixar usan CPU para renderizado de películas debido a la relación costo/rendimiento y al mayor acceso a RAM.
    • Se proporciona un enlace de noticia relacionado.
  • Opinión sobre AMD Zen4 y AVX512:

    • El ISA x86 del 7995WX cuesta el doble que el ISA ARM del M2 Ultra, pero ofrece 7 veces más potencia de cómputo bruta, mientras que la velocidad de generación de tokens es casi la misma.
    • Esto podría deberse a los 384 MB de caché L3.
    • Se realizó trabajo para hacer que LLaMA corra 2.8 veces más rápido en Zen4 que antes.