1 poin oleh GN⁺ 2024-05-16 | 1 komentar | Bagikan ke WhatsApp

GGML: Penulisan ulang SiLU dan Softmax untuk CPU

Perubahan utama

  • Pengenalan fungsi expf() yang divektorkan:

    • Kini Softmax dan SiLU dapat dihitung dengan akurasi lebih tinggi dibanding tabel lookup short[65536] yang sebelumnya digunakan di GGML.
    • Mendukung aarch64 dan sse2+, dengan galat pembulatan terburuk sebesar 2 ULP.
    • Implementasi avx2 dan avx512 juga telah dibuat, tetapi tidak digunakan karena manfaatnya tidak besar dibanding kompleksitas kode relatif terhadap sse2+fma.
  • Respons utama:

    • Sejumlah kontributor menunjukkan respons positif terhadap perubahan ini.
    • SOFT_MAX sekitar 1,5x lebih cepat pada AMD Ryzen 9 5950X dan M2 Ultra.

Perubahan kode

  • Ringkasan perubahan utama:
    • Menghapus #define yang diberi komentar.
    • Mengekstrak 5 baris yang duplikat ke ggml_vec_soft_max_f32().
    • Menghapus fungsi terkait GGML_SILU_FP16.
    • Menambahkan ggml_v_expf().
    • Menambahkan ggml_v_silu().
    • Menyesuaikan ggml_vec_silu_f32() dengan pernyataan preprosesor berdasarkan flag SSE2 atau __ARM_NEON.

Peningkatan performa

  • Hasil benchmark:
    • SOFT_MAX sekitar 1,5x lebih cepat pada AMD Ryzen 9 5950X dan M2 Ultra.
    • Dengan AVX2, keuntungannya meningkat dari 1,5x menjadi 1,9x.
    • Pada znver4, dengan avx512, peningkatannya naik menjadi 2,1x.

Opini tambahan

  • Pendapat kontributor:
    • Saat menggunakan AVX512, vscalefps dapat menangani overflow dan underflow dengan tepat, sekaligus menghilangkan kebutuhan pemeriksaan dan blend.
    • Peningkatan performa telah dikonfirmasi pada Skylake-AVX512/Cascadelake.

Opini GN⁺

  • Peningkatan performa: Perubahan ini dapat meningkatkan performa CPU secara signifikan, terutama pada perangkat keras modern yang menggunakan AVX2 dan AVX512.
  • Kompleksitas kode: Karena implementasi AVX2 dan AVX512 tidak memberi keuntungan besar dibanding SSE2+fma, penting untuk mengurangi kompleksitas kode.
  • Kompatibilitas perangkat keras: Penting untuk mendukung berbagai set instruksi SIMD guna mengoptimalkan performa di beragam perangkat keras.
  • Benchmark: Pengujian benchmark di berbagai perangkat keras diperlukan untuk memverifikasi peningkatan performa.
  • Penerapan teknologi terbaru: Memanfaatkan set instruksi SIMD terbaru penting untuk memaksimalkan performa.

1 komentar

 
GN⁺ 2024-05-16
Opini Hacker News

Ringkasan kumpulan komentar Hacker News

  • Kisah prosesor sinyal radar Hughes 20 tahun lalu

    • Berbagi pengalaman mengoptimalkan perhitungan e^x pada prosesor sinyal radar Hughes.
    • Menggunakan 256 tabel e^x untuk setiap nilai 8-bit dalam kata 32-bit, lalu menghitung nilai akhir dengan perkalian.
    • Berjalan 5 kali lebih cepat dari sebelumnya.
    • Mesin ini sekarang sudah kuno, tetapi pada masanya terkenal sangat cepat.
  • Dampak peningkatan silu dan softmax terhadap kecepatan inferensi LLM

    • Ada pendapat bahwa dampaknya terhadap kecepatan inferensi LLM tidak akan besar.
    • Sebagian besar waktu dihabiskan untuk perkalian matriks.
  • Kekaguman terhadap optimisasi kode

    • Rasa takjub dan kagum terhadap pekerjaan optimisasi yang kompleks.
    • Setelah tahu kontributornya adalah jart, hal itu jadi masuk akal.
  • Pertanyaan tentang ukuran LUT

    • Ada pendapat bahwa LUT berukuran 65536 sama dengan seluruh ukuran cache L1 sehingga bisa jadi tidak efisien.
    • Namun, hal ini mungkin tetap bekerja baik karena penyesuaian probabilistik.
  • Perbandingan llama.cpp dan ggml di CPU

    • Ada yang penasaran bagaimana ggml dibandingkan dengan tensorflow lite, onnxruntime, dan lainnya.
  • Perbandingan performa di perangkat CUDA

    • Pertanyaan apakah gguf/llama.cpp lebih baik untuk inferensi non-batch, atau exllamav2+flashattention masih unggul.
  • Kemungkinan vektorisasi LUT

    • Ada pendapat bahwa LUT bisa divektorisasi.
    • Menyertakan tautan ke materi terkait.
  • Perhitungan tanh cepat

    • Menyertakan tautan tentang perhitungan tanh yang cepat.
  • Performa llama di CPU

    • Ada pendapat bahwa meskipun sudah dioptimalkan, llama dengan banyak parameter bisa tetap terlalu lambat di CPU.