1 Punkte von GN⁺ 2024-05-16 | 1 Kommentare | Auf WhatsApp teilen

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 GGML verwendete Lookup-Tabelle short[65536].
    • Unterstützt aarch64 und sse2+; im Worst Case beträgt der Rundungsfehler 2 ULP.
    • Implementierungen für avx2 und avx512 wurden ebenfalls geschrieben, werden aber nicht verwendet, da sie im Vergleich zu sse2+fma keinen großen Vorteil im Verhältnis zur Code-Komplexität bieten.
  • Wichtige Reaktionen:

    • Mehrere Mitwirkende haben positiv auf diese Änderung reagiert.
    • Auf AMD Ryzen 9 5950X und M2 Ultra ist SOFT_MAX etwa 1,5-mal schneller.

Code-Änderungen

  • Zusammenfassung der wichtigsten Änderungen:
    • Auskommentiertes #define entfernt.
    • Fünf doppelte Zeilen in ggml_vec_soft_max_f32() ausgelagert.
    • Funktionen im Zusammenhang mit GGML_SILU_FP16 entfernt.
    • ggml_v_expf() hinzugefügt.
    • ggml_v_silu() hinzugefügt.
    • ggml_vec_silu_f32() durch Präprozessor-Anweisungen je nach SSE2- oder __ARM_NEON-Flag angepasst.

Leistungsverbesserungen

  • Benchmark-Ergebnisse:
    • Auf AMD Ryzen 9 5950X und M2 Ultra ist SOFT_MAX etwa 1,5-mal schneller.
    • Mit AVX2 steigt der Vorteil von 1,5x auf 1,9x.
    • Auf znver4 steigt er mit avx512 auf 2,1x.

Weitere Anmerkungen

  • Anmerkungen von Mitwirkenden:
    • Bei Verwendung von AVX512 kann vscalefps Overflow und Underflow sauber behandeln, wodurch Prüfungen und Blends entfernt werden können.
    • Auf Skylake-AVX512/Cascadelake wurden Leistungssteigerungen bestätigt.

Meinung von GN⁺

  • Leistungssteigerung: Diese Änderung kann die CPU-Performance deutlich verbessern und bringt insbesondere auf moderner Hardware mit AVX2 und AVX512 größere Vorteile.
  • Code-Komplexität: Da die Implementierungen für AVX2 und AVX512 gegenüber SSE2+fma keinen 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

 
GN⁺ 2024-05-16
Hacker-News-Meinung

Zusammenfassung ausgewählter Hacker-News-Kommentare

  • Eine Geschichte über Hughes-Radarsignalprozessoren vor 20 Jahren

    • Jemand berichtet von Erfahrungen mit der Optimierung der Berechnung von e^x in einem Hughes-Radarsignalprozessor.
    • Für jeden 8-Bit-Wert innerhalb eines 32-Bit-Worts wurden 256 e^x-Tabellen verwendet, und der Endwert wurde per Multiplikation berechnet.
    • Das lief fünfmal schneller als zuvor.
    • Die Maschine ist heute veraltet, bot damals aber eine sehr hohe Verarbeitungsgeschwindigkeit.
  • Einfluss von Verbesserungen bei silu und softmax auf die LLM-Inferenzgeschwindigkeit

    • Eine Meinung ist, dass die Auswirkungen auf die LLM-Inferenzgeschwindigkeit nicht besonders groß sein dürften.
    • Der Großteil der Zeit entfällt auf Matrixmultiplikationen.
  • Bewunderung für Code-Optimierung

    • Erstaunen und Bewunderung für die komplexe Optimierungsarbeit.
    • Nachdem bekannt wurde, dass der Beitragende jart ist, wurde es nachvollziehbar.
  • Frage zur LUT-Größe

    • Es gibt die Meinung, dass eine LUT der Größe 65536 ineffizient sein könnte, da sie der gesamten Größe des L1-Caches entspricht.
    • Durch probabilistische Anpassung könnte es dennoch gut funktionieren.
  • Vergleich von llama.cpp und ggml auf der CPU

    • Jemand fragt sich, wie ggml im Vergleich zu tensorflow lite, onnxruntime usw. abschneidet.
  • Leistungsvergleich auf CUDA-Geräten

    • Es wird gefragt, ob gguf/llama.cpp bei nicht gebatchter Inferenz besser ist oder ob exllamav2+flashattention weiterhin überlegen bleibt.
  • Möglichkeit zur Vektorisierung von LUTs

    • Es wird angemerkt, dass sich LUTs vektorisieren lassen.
    • Dazu wurde ein relevanter Link geteilt.
  • Schnelle tanh-Berechnung

    • Es wurde ein Link zu schneller tanh-Berechnung geteilt.
  • llama-Performance auf der CPU

    • Eine Meinung ist, dass llama mit vielen Parametern auf der CPU trotz Optimierungen zu langsam sein kann.