14 points par GN⁺ 2024-04-02 | 2 commentaires | Partager sur WhatsApp

Accélération de LLaMA sur CPU

  • Le projet llamafile de Mozilla a écrit 84 nouveaux noyaux de multiplication de matrices
  • Lors de l’utilisation de poids F16 et Q8_0 sur CPU, le temps d’évaluation des prompts est de 30 % à 500 % plus rapide que dans llama.cpp
  • Les améliorations les plus spectaculaires ont été obtenues sur des machines ARMv8.2+ (par ex. RPI 5), Intel (par ex. Alderlake) et AVX512 (par ex. Zen 4)
  • Pour les matrices tenant dans le cache L2, les performances sont 2 fois supérieures à MKL
  • Le gain de vitesse fonctionne le mieux pour les prompts de moins de 1 000 tokens

Contexte

  • llamafile est un projet local de LLM lancé avec Mozilla en novembre 2023
  • Il empaquette llama.cpp en un binaire multiplateforme monofichier à l’aide de Cosmopolitan Libc
  • Il fonctionne sur 6 OS pour AMD64 et ARM64, avec quelques ajustements
  • L’idée est qu’en améliorant les technologies de base, on peut offrir aux utilisateurs la meilleure expérience possible avec llama.cpp et aider les deux projets à toucher un public plus large
  • Mozilla a fourni des ressources pour cela

Gains de performance sur du matériel d’entreprise

  • Lorsqu’il s’est intéressé pour la première fois aux LLM, son environnement de travail était un frugal Hewlett Packard faisant tourner Alpine, avec disque dur mécanique, RAM lente, processeur AVX2 et sans GPU
  • Ce qu’il aimait chez llama.cpp, c’est qu’ils pensaient d’abord aux gens comme lui
  • Il a commencé à contribuer bénévolement à plein temps et a collaboré avec des personnes comme Slaren pour introduire le support de mmap(), ce qui a permis de réduire de moitié l’usage de la RAM tout en chargeant instantanément les poids
  • C’était à l’époque un grand bond en avant pour les LLM locaux, mais cela n’a presque rien apporté en matière de vitesse d’évaluation
  • L’essentiel du code d’inférence a été écrit par Georgi Gerganov lui-même et il était si bon qu’il a fallu une année supplémentaire avant de pouvoir l’améliorer
  • Maintenant que c’est fait, voyons à quel point l’ancien Hewlett Packard est devenu plus rapide

Gains de performance sur du matériel de loisir

  • Il n’est pas nécessaire d’avoir un gros ordinateur pour exécuter de grands modèles de langage
  • L’un des meilleurs ordinateurs personnels actuellement disponibles en magasin est le Raspberry Pi
  • Il offre d’excellentes performances pour un prix bas, avec une consommation électrique très faible
  • Le Raspberry Pi a sorti sa 5e génération il y a quelques jours, et elle est énormément plus rapide que le modèle précédent
  • Elle apporte aussi la prise en charge des ISA ARMv8.2 dotprod et fp16 arithmetic, très utiles pour les LLM
  • À elles seules, ces deux fonctionnalités ont déjà permis à llama.cpp de multiplier par 10 les performances sur les poids f16 l’an dernier
  • Cette semaine, cela a encore permis d’obtenir un gain de performance de 2x supplémentaire en utilisant des noyaux initialement pensés pour AVX512
  • Il n’était pas attendu que des noyaux conçus pour du matériel de datacenter conviennent à un petit Raspberry Pi léger, mais c’est en réalité parfaitement tombé juste, car les deux CPU disposent de 32 registres vectoriels

Gains de performance sur du matériel gaming

  • Les gamers ont les attentes de qualité les plus élevées parmi les consommateurs attentifs au rapport qualité-prix, si bien que le matériel conçu pour eux est généralement très bon
  • L’industrie du machine learning prospère depuis des années en détournant du matériel destiné aux gamers
  • Sans la contribution importante des gamers, l’hiver de l’IA aurait probablement duré dix ans de plus
  • Il y a quelques mois, il a demandé à un gamer de lui assembler un ordinateur capable de remplacer son ancien Hewlett Packard
  • Il considère Alderlake comme un excellent CPU, mais il semble largement sous-estimé, puisqu’il a été possible d’augmenter presque facilement les performances float16 de 5x
  • Contrairement à ARMv8.2, les noyaux x86 utilisent en interne des opérations en float32, ce qui a permis de le faire sans introduire d’erreurs d’arrondi
  • Cela signifie qu’il est possible de créer des filtres anti-spam plus intelligents
  • L’exécution du script shell spam.sh ne prend que 420 millisecondes, soit 7 fois plus rapide qu’un Raspberry Pi 5
  • Sur de petites charges de travail, cette puce peut terminer avant même que CUDA n’ait le temps de démarrer
  • Les possesseurs d’Alderlake peuvent compter sur le fait que llamafile veille tout particulièrement à ne pas s’exécuter sur les cœurs d’efficacité
  • C’est l’un des éléments qui aident llamafile à tourner plus vite que llama.cpp
  • Cela signifie aussi que même si un LLM tourne 24h/24, il reste encore assez de ressources pour les autres programmes de l’ordinateur
  • Comme llama.cpp distribue les threads en lockstep, si un cœur met plus de temps que les autres à terminer son travail, tous les autres cœurs doivent faire une boucle active jusqu’à ce que les n autres aient fini
  • La caractéristique la plus impressionnante de ce microprocesseur est la vitesse à laquelle il peut compiler les 2,6 millions de lignes de code du monorepo Cosmopolitan
  • Le Hewlett Packard prenait toujours 64 secondes, alors que cet ordinateur gaming n’a besoin que de 20 secondes
  • À l’origine, cela prenait 35 secondes, puis c’est devenu encore plus rapide grâce au métal liquide et à l’overclocking par IA
  • Une autre raison pour laquelle le code système est très rapide sur Alderlake est qu’au cours de la conception de ce CPU, une lutte féroce a opposé hackers et scientifiques, et que les hackers ont gagné
  • Il espère qu’à l’avenir un meilleur compromis sera trouvé pour AVX512, mais estime malgré tout que cette puce représente un progrès considérable par rapport au modèle précédent, et en est globalement très satisfait

Gains de performance sur le matériel Apple

  • S’il faut désigner l’ordinateur personnel le plus haut de gamme, ce serait sans conteste le Mac Studio
  • Ici, obtenir un avantage en performance était plus difficile, car c’est la plateforme matérielle à laquelle les développeurs de llama.cpp prêtent le plus attention, et le choix d’utiliser le compilateur de Stallman impose de travailler avec un handicap par rapport aux outils propriétaires d’Apple
  • Il ne faut pas être surpris que le microprocesseur M2 fasse de llamafile une conduite forcée pour les contenus synthétiques
  • L’astuce utilisée par Apple repose sur l’intégration verticale
  • En achetant un Mac Studio et en regardant à l’intérieur, on découvre qu’Apple a mis la RAM DIMM dans le CPU
  • Comme le CPU n’a plus besoin d’effectuer ces appels longue distance, les tâches sensibles à la latence, comme la génération de tokens, sont bien plus rapides
  • Cependant, en termes de flop purs (mesurés en tok/sec pour les prompts), l’ISA ARM du M2 Ultra n’expose que 30 % de calcul en plus par rapport à son ordinateur Intel bien moins cher
  • Pour accéder à davantage, il faut passer par des frameworks propriétaires comme Metal ou Accelerate
  • Si xcode est installé, llamafile compilera par défaut un petit module stub qui aide à se placer devant toutes les bibliothèques closed source situées entre vous et le silicium
  • Si vous envisagez d’acheter un Mac Studio, un point important est que, comme Windows Executive, XNU fait un excellent travail pour maintenir le desktop stable, ce qui signifie qu’il protège le système contre vous-même
  • À cause de toutes ces fonctions de sécurité, il faut 45 secondes pour compiler le monorepo Cosmo sur Mac Studio, mais même en déclenchant une fork bomb, Netflix ne sauterait probablement pas une seule frame
  • Le script spam.sh s’exécute aussi en 430 ms, donc plus lentement qu’Intel
  • Cependant, cela ne l’inquiète pas, car il a vu comment Asahi Linux pouvait exploiter tout le potentiel du M2

Gains de performance sur du matériel professionnel

  • llamafile accorde beaucoup d’attention à aider les personnes qui manquent de GPU, mais offre aussi une expérience de très haut niveau au top 1 %
  • L’AMD Ryzen Threadripper PRO 7995WX est sorti il y a quelques mois et c’est actuellement le CPU le plus cher que l’on puisse acheter
  • Il coûte 10 000 dollars, mais offre 96 cœurs AVX512 basés sur l’architecture Zen4
  • Malgré un prix double, l’ISA x86 du 7995WX fournit 7 fois plus de puissance de calcul brute que l’ISA ARM du M2 Ultra, tout en affichant une vitesse de génération de tokens presque identique
  • Cela est probablement dû à son cache L3 de 384 Mo
  • Un avantage d’AVX512 est que le modèle Gemma de Google peut résoudre des énigmes mathématiques sous AVX512 mais pas sous AVX2, probablement parce que des vecteurs plus larges réduisent plus facilement les erreurs d’arrondi
  • L’instruction VDPBF16PS aide à effectuer des opérations updot en bf16, de manière similaire à VNNI et ARM dotprod
  • Des modèles comme Mistral et TinyLLaMA distribuent leurs poids au format canonique bfloat16, donc une bonne prise en charge native du bf16 est appréciable
  • Quand on convertit du bf16 en fp16, seulement 13 % des nombres possibles peuvent être représentés exactement
  • En pratique, cela a peu d’importance, puisque 99,71 % des nombres utilisés par Mistral 7b font partie de ces 13 %
  • Cependant, llamafile fait de son mieux pour livrer le nombre de bits annoncé

2 commentaires

 
savvykang 2024-04-02

Il n’y a pas de données pour des configurations milieu de gamme comme un Intel 14600 ou un Ryzen 5600. J’ai l’impression que l’idée était surtout de montrer que ça tourne même sur un Raspberry Pi, mais cela semble difficilement viable en usage réel. Malgré tout, je veux me consoler en me disant que les spécifications matérielles nécessaires pour faire tourner un LLM en local baissent progressivement.

 
GN⁺ 2024-04-02
Avis sur Hacker News
  • Avis sur l’implémentation SGEMM en Fortran :

    • Les compilateurs Fortran modernes peuvent appliquer les optimisations AVX et FMA sans modifications supplémentaires.
    • L’optimisation par déroulage de boucle (loop unrolling) est possible via le drapeau du compilateur -funroll-all-loops.
    • Le compilateur Intel effectue le déroulage de boucle même sans demande explicite de l’utilisateur.
    • Ajouter de la parallélisation à un code source Fortran 77 peut être difficile, mais on peut ajouter une syntaxe OpenMP ou utiliser les structures de parallélisation du Fortran moderne.
    • Il ne faut pas sous-estimer les fonctions Fortran 77. L’objectif de Fortran est de libérer les développeurs des détails spécifiques à la plateforme et de laisser le compilateur faire le travail.
  • Avis sur une alternative à cuBLAS :

    • Cela ressemble à une tentative de réécrire cuBLAS au sein de CUDA.
    • L’étape suivante pourrait être de supprimer la dépendance à CUDA et d’utiliser directement des compute shaders Vulkan ou Metal.
  • Avis sur l’exécution des LLM (Local Language Model) :

    • Tout le monde devrait pouvoir télécharger et exécuter un LLM en local avec des exigences minimales.
    • Cela pourrait servir de sauvegarde d’une grande partie des connaissances humaines.
  • Avis sur la mesure des performances :

    • Préférence pour l’utilisation de C++ afin de définir les sous-routines. C++ est plus de trois ordres de grandeur plus rapide que Python.
    • L’idée de mesurer les écarts de performance en « années de loi de Moore » est appréciée.
  • Liens associés :

  • Avis sur le titre :

    • Le titre prête à confusion. On peut d’abord croire qu’il affirme que le modèle est plus rapide sur CPU que sur GPU.
    • Un titre plus clair serait quelque chose comme « Amélioration des performances de LLaMA sur CPU ».
  • Avis sur les gains de performances face à MKL-DNN :

    • Quelqu’un a déjà essayé de surpasser MKL-DNN sur des tailles de matrices limitées, sans succès.
    • Sur CPU, une telle efficacité énergétique est physiquement impossible.
  • Avis sur l’exécution des LLM :

    • Il est possible d’exécuter de grands modèles de langage sans gros ordinateur.
    • Exécuter un modèle avec peu de paramètres relève bien techniquement de l’exécution d’un modèle de langage, mais cela peut ne pas atteindre le seuil d’utilité que la plupart des gens considèrent comme suffisant.
  • Avis sur l’usage du CPU chez Pixar :

    • De grands studios comme Pixar utilisent le CPU pour le rendu de films en raison du rapport coût/performances et d’un accès à la RAM plus important.
    • Lien d’actualité connexe.
  • Avis sur AMD Zen4 et AVX512 :

    • L’ISA x86 du 7995WX coûte deux fois plus cher que l’ISA ARM du M2 Ultra, mais fournit 7 fois plus de puissance de calcul brute, avec une vitesse de génération de tokens presque identique.
    • Cela est probablement dû au cache L3 de 384 Mo.
    • Un travail a été réalisé pour faire tourner LLaMA 2,8 fois plus vite sur Zen4 qu’auparavant.