1 puan yazan GN⁺ 2024-05-16 | 1 yorum | WhatsApp'ta paylaş

GGML: CPU için SiLU ve Softmax yeniden yazımı

Başlıca değişiklikler

  • Vektörleştirilmiş expf() fonksiyonunun eklenmesi:

    • Daha önce GGML içinde kullanılan short[65536] arama tablosuna kıyasla, Softmax ve SiLU artık daha doğru hesaplanabiliyor.
    • aarch64 ve sse2+ destekleniyor; en kötü durumda yuvarlama hatası 2 ULP.
    • avx2 ve avx512 uygulamaları da yazıldı, ancak sse2+fma'e kıyasla kod karmaşıklığına değecek kadar büyük bir avantaj sağlamadığı için kullanılmadı.
  • Öne çıkan tepkiler:

    • Birden fazla katkıcı bu değişikliğe olumlu yaklaştı.
    • AMD Ryzen 9 5950X ve M2 Ultra üzerinde SOFT_MAX yaklaşık 1,5 kat daha hızlı.

Kod değişiklikleri

  • Başlıca değişikliklerin özeti:
    • Yorum satırına alınmış #define kaldırıldı.
    • Tekrarlanan 5 satır ggml_vec_soft_max_f32() içine çıkarıldı.
    • GGML_SILU_FP16 ile ilgili fonksiyonlar kaldırıldı.
    • ggml_v_expf() eklendi.
    • ggml_v_silu() eklendi.
    • ggml_vec_silu_f32(), SSE2 veya __ARM_NEON bayraklarına göre ön işlemci koşullarıyla düzenlendi.

Performans iyileştirmeleri

  • Benchmark sonuçları:
    • AMD Ryzen 9 5950X ve M2 Ultra üzerinde SOFT_MAX yaklaşık 1,5 kat daha hızlı.
    • AVX2 dahil edildiğinde kazanç 1,5 kattan 1,9 kata çıkıyor.
    • znver4 üzerinde avx512 dahil edildiğinde 2,1 kata ulaşıyor.

Ek görüşler

  • Katkıcı yorumları:
    • AVX512 kullanılırken vscalefps kullanılırsa taşma ve alt taşma uygun şekilde ele alınabiliyor, ayrıca ek kontroller ve blend işlemleri kaldırılabiliyor.
    • Skylake-AVX512/Cascadelake üzerinde performans artışı doğrulandı.

GN⁺ görüşü

  • Performans artışı: Bu değişiklik CPU tarafında performansı önemli ölçüde artırabilir; özellikle AVX2 ve AVX512 kullanan modern donanımlarda kazanç daha büyük olabilir.
  • Kod karmaşıklığı: AVX2 ve AVX512 uygulamaları SSE2+fma'e kıyasla büyük avantaj sağlamadığından, kod karmaşıklığını azaltmak önemli.
  • Donanım uyumluluğu: Farklı donanımlarda performansı optimize etmek için çeşitli SIMD komut setlerini desteklemek önemli.
  • Benchmark: Performans artışını doğrulamak için farklı donanımlarda benchmark testleri gerekli.
  • Güncel teknolojilerin kullanımı: En yeni SIMD komut setlerinden yararlanarak performansı en üst düzeye çıkarmak önemli.

1 yorum

 
GN⁺ 2024-05-16
Hacker News yorumu

Hacker News yorum derlemesi özeti

  • 20 yıl önceki Hughes radar sinyal işlemcisi hikayesi

    • Hughes radar sinyal işlemcisinde e^x hesaplamasını optimize etme deneyimi paylaşılıyor.
    • 32 bitlik sözcükteki her 8 bitlik değer için 256 adet e^x tablosu kullanılarak nihai değer çarpma ile hesaplanmış.
    • Öncekine göre 5 kat daha hızlı çalışmış.
    • Bu makine artık eski sayılıyor ama o dönemde çok yüksek işlem hızı sunuyormuş.
  • silu ve softmax iyileştirmelerinin LLM çıkarım hızına etkisi

    • LLM çıkarım hızına etkisinin büyük olmayacağı görüşü.
    • Zamanın çoğu matris çarpımında harcanıyor.
  • Kod optimizasyonuna hayranlık

    • Karmaşık optimizasyon çalışmasına yönelik şaşkınlık ve hayranlık.
    • Katkıyı yapan kişinin jart olduğunu öğrenince bunun anlaşılır hale geldiği yorumu.
  • LUT boyutuna dair soru işareti

    • 65536 boyutundaki LUT'nin L1 önbelleğin toplam boyutuyla aynı olduğu için verimsiz olabileceği görüşü.
    • Ancak olasılıksal ayarlama sayesinde iyi çalışıyor olabilir.
  • CPU'da llama.cpp ve ggml karşılaştırması

    • ggml'in tensorflow lite, onnxruntime vb. ile karşılaştırıldığında nasıl olduğu merak ediliyor.
  • CUDA aygıtlarında performans karşılaştırması

    • gguf/llama.cpp'nin batchsiz çıkarımda daha iyi olup olmadığı ya da exllamav2+flashattention'ın hâlâ üstün olup olmadığı soruluyor.
  • LUT vektörleştirme olasılığı

    • LUT'nin vektörleştirilebileceği görüşü.
    • İlgili kaynak bağlantısı verilmiş.
  • Hızlı tanh hesaplama

    • Hızlı tanh hesaplamasına dair bir bağlantı verilmiş.
  • CPU'da llama performansı

    • Optimizasyonlara rağmen çok sayıda parametreye sahip llama'nın CPU'da fazla yavaş olabileceği görüşü.