Une nouvelle fonction exponentielle qui rend SiLU et Softmax 2x plus rapides sans aucune perte de précision
(github.com/ggerganov)GGML : réécriture de SiLU et Softmax pour CPU
Principaux changements
-
Introduction d'une fonction
expf()vectorisée :- Elle permet de calculer Softmax et SiLU avec une meilleure précision que la table de correspondance
short[65536]utilisée jusque-là dansGGML. - Elle prend en charge
aarch64etsse2+, avec une erreur d'arrondi maximale de 2 ULP. - Des implémentations
avx2etavx512ont également été écrites, mais ne sont pas utilisées car elles n'apportent pas de gain majeur par rapport àsse2+fmaau vu de la complexité du code.
- Elle permet de calculer Softmax et SiLU avec une meilleure précision que la table de correspondance
-
Réactions principales :
- Plusieurs contributeurs ont réagi positivement à ce changement.
- Sur
AMD Ryzen 9 5950XetM2 Ultra,SOFT_MAXest environ 1,5x plus rapide.
Modifications du code
- Résumé des principaux changements :
- Suppression du
#definecommenté. - Extraction de 5 lignes dupliquées dans
ggml_vec_soft_max_f32(). - Suppression des fonctions liées à
GGML_SILU_FP16. - Ajout de
ggml_v_expf(). - Ajout de
ggml_v_silu(). - Ajustement de
ggml_vec_silu_f32()avec une directive de préprocesseur selon les flagsSSE2ou__ARM_NEON.
- Suppression du
Améliorations de performance
- Résultats de benchmark :
- Sur
AMD Ryzen 9 5950XetM2 Ultra,SOFT_MAXest environ 1,5x plus rapide. - Avec
AVX2, le gain passe de 1,5x à 1,9x. - Sur
znver4, avecavx512, il atteint 2,1x.
- Sur
Avis supplémentaires
- Commentaires des contributeurs :
- En utilisant
vscalefpsavecAVX512, il est possible de gérer correctement l'overflow et l'underflow, tout en supprimant les vérifications et les blends. - Des gains de performance ont été constatés sur
Skylake-AVX512/Cascadelake.
- En utilisant
L'avis de GN⁺
- Amélioration des performances : ce changement peut fortement améliorer les performances sur CPU, avec des gains encore plus marqués sur le matériel récent utilisant
AVX2etAVX512. - Complexité du code : comme les implémentations
AVX2etAVX512n'apportent pas de bénéfice majeur face àSSE2+fma, il est important de limiter la complexité du code. - Compatibilité matérielle : il est important de prendre en charge différents jeux d'instructions SIMD afin d'optimiser les performances sur une large variété de matériels.
- Benchmark : des tests de benchmark sur divers matériels sont nécessaires pour valider les gains de performance.
- Adoption des technologies récentes : il est important d'exploiter les jeux d'instructions SIMD les plus récents pour maximiser les performances.
1 commentaires
Réactions sur Hacker News
Résumé des commentaires de Hacker News
Une histoire vieille de 20 ans sur un processeur de signaux radar Hughes
Impact des améliorations de silu et softmax sur la vitesse d’inférence des LLM
Admiration pour l’optimisation du code
Question sur la taille de la LUT
Comparaison entre llama.cpp et ggml sur CPU
Comparaison des performances sur périphériques CUDA
Possibilité de vectoriser la LUT
Calcul rapide de tanh
Performances de llama sur CPU