Neue Exponentialfunktion macht SiLU und Softmax doppelt so schnell – bei vollständig erhaltener Genauigkeit
(github.com/ggerganov)GGML: Neuschreibung von SiLU und Softmax für CPUs
Wichtige Änderungen
-
Einführung einer vektorisierten
expf()-Funktion:- Ermöglicht eine genauere Berechnung von Softmax und SiLU als die bisher in
GGMLverwendete Lookup-Tabelleshort[65536]. - Unterstützt
aarch64undsse2+; im Worst Case beträgt der Rundungsfehler 2 ULP. - Implementierungen für
avx2undavx512wurden ebenfalls geschrieben, werden aber nicht verwendet, da sie im Vergleich zusse2+fmakeinen großen Vorteil im Verhältnis zur Code-Komplexität bieten.
- Ermöglicht eine genauere Berechnung von Softmax und SiLU als die bisher in
-
Wichtige Reaktionen:
- Mehrere Mitwirkende haben positiv auf diese Änderung reagiert.
- Auf
AMD Ryzen 9 5950XundM2 UltraistSOFT_MAXetwa 1,5-mal schneller.
Code-Änderungen
- Zusammenfassung der wichtigsten Änderungen:
- Auskommentiertes
#defineentfernt. - Fünf doppelte Zeilen in
ggml_vec_soft_max_f32()ausgelagert. - Funktionen im Zusammenhang mit
GGML_SILU_FP16entfernt. ggml_v_expf()hinzugefügt.ggml_v_silu()hinzugefügt.ggml_vec_silu_f32()durch Präprozessor-Anweisungen je nachSSE2- oder__ARM_NEON-Flag angepasst.
- Auskommentiertes
Leistungsverbesserungen
- Benchmark-Ergebnisse:
- Auf
AMD Ryzen 9 5950XundM2 UltraistSOFT_MAXetwa 1,5-mal schneller. - Mit
AVX2steigt der Vorteil von 1,5x auf 1,9x. - Auf
znver4steigt er mitavx512auf 2,1x.
- Auf
Weitere Anmerkungen
- Anmerkungen von Mitwirkenden:
- Bei Verwendung von
AVX512kannvscalefpsOverflow und Underflow sauber behandeln, wodurch Prüfungen und Blends entfernt werden können. - Auf
Skylake-AVX512/Cascadelakewurden Leistungssteigerungen bestätigt.
- Bei Verwendung von
Meinung von GN⁺
- Leistungssteigerung: Diese Änderung kann die CPU-Performance deutlich verbessern und bringt insbesondere auf moderner Hardware mit
AVX2undAVX512größere Vorteile. - Code-Komplexität: Da die Implementierungen für
AVX2undAVX512gegenüberSSE2+fmakeinen großen Vorteil bringen, ist es wichtig, die Code-Komplexität gering zu halten. - Hardware-Kompatibilität: Für optimale Performance auf unterschiedlicher Hardware ist die Unterstützung verschiedener SIMD-Befehlssätze wichtig.
- Benchmarks: Um die Leistungsverbesserungen zu verifizieren, sind Benchmark-Tests auf verschiedener Hardware erforderlich.
- Einsatz moderner Technik: Für maximale Performance ist es wichtig, aktuelle SIMD-Befehlssätze zu nutzen.
1 Kommentare
Hacker-News-Meinung
Zusammenfassung ausgewählter Hacker-News-Kommentare
Eine Geschichte über Hughes-Radarsignalprozessoren vor 20 Jahren
Einfluss von Verbesserungen bei silu und softmax auf die LLM-Inferenzgeschwindigkeit
Bewunderung für Code-Optimierung
Frage zur LUT-Größe
Vergleich von llama.cpp und ggml auf der CPU
Leistungsvergleich auf CUDA-Geräten
Möglichkeit zur Vektorisierung von LUTs
Schnelle tanh-Berechnung
llama-Performance auf der CPU