Nueva función exponencial que hace SiLU y SoftMax 2 veces más rápidos, manteniendo totalmente la precisión
(github.com/ggerganov)GGML: reescritura de SiLU y Softmax para CPU
Cambios principales
-
Introducción de una función
expf()vectorizada:- Permite calcular Softmax y SiLU con mayor precisión que la tabla de consulta
short[65536]usada anteriormente enGGML. - Soporta
aarch64ysse2+, y en el peor caso el error de redondeo es de 2 ULP. - También se implementaron versiones para
avx2yavx512, pero no se usan porque no ofrecen una gran ventaja frente asse2+fmaen relación con la complejidad del código.
- Permite calcular Softmax y SiLU con mayor precisión que la tabla de consulta
-
Reacciones principales:
- Varios contribuidores mostraron una reacción positiva ante este cambio.
- En
AMD Ryzen 9 5950XyM2 Ultra,SOFT_MAXes aproximadamente 1.5 veces más rápido.
Cambios en el código
- Resumen de los cambios principales:
- Eliminación de
#definecomentados. - Extracción de 5 líneas duplicadas a
ggml_vec_soft_max_f32(). - Eliminación de funciones relacionadas con
GGML_SILU_FP16. - Adición de
ggml_v_expf(). - Adición de
ggml_v_silu(). - Ajuste de
ggml_vec_silu_f32()con una directiva del preprocesador según las banderasSSE2o__ARM_NEON.
- Eliminación de
Mejora de rendimiento
- Resultados de benchmark:
- En
AMD Ryzen 9 5950XyM2 Ultra,SOFT_MAXes aproximadamente 1.5 veces más rápido. - Al incluir
AVX2, la ganancia aumenta de 1.5x a 1.9x. - En
znver4, al incluiravx512, aumenta a 2.1x.
- En
Opiniones adicionales
- Comentarios de los contribuidores:
- Al usar
AVX512,vscalefpspuede manejar correctamente el overflow y el underflow, y permite eliminar verificaciones y mezclas. - Se confirmó una mejora de rendimiento en
Skylake-AVX512/Cascadelake.
- Al usar
Opinión de GN⁺
- Mejora de rendimiento: este cambio puede mejorar significativamente el rendimiento en CPU, especialmente en hardware moderno que usa
AVX2yAVX512. - Complejidad del código: como las implementaciones de
AVX2yAVX512no ofrecen una gran ventaja frente aSSE2+fma, es importante reducir la complejidad del código. - Compatibilidad de hardware: es importante soportar varios conjuntos de instrucciones SIMD para optimizar el rendimiento en diferentes tipos de hardware.
- Benchmark: se necesitan pruebas de benchmark en distintos equipos para confirmar la mejora de rendimiento.
- Aplicación de tecnología moderna: es importante aprovechar los conjuntos de instrucciones SIMD más recientes para maximizar el rendimiento.
1 comentarios
Opiniones de Hacker News
Resumen de comentarios de Hacker News
Historia de hace 20 años sobre el procesador de señales de radar de Hughes
Impacto de las mejoras en silu y softmax sobre la velocidad de inferencia de los LLM
Admiración por la optimización de código
Dudas sobre el tamaño de la LUT
Comparación entre llama.cpp y ggml en CPU
Comparación de rendimiento en dispositivos CUDA
Posibilidad de vectorizar la LUT
Cálculo rápido de tanh
Rendimiento de llama en CPU