Fungsi eksponensial baru yang membuat SiLU dan SoftMax 2x lebih cepat, dengan akurasi tetap sepenuhnya terjaga
(github.com/ggerganov)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 diGGML. - Mendukung
aarch64dansse2+, dengan galat pembulatan terburuk sebesar 2 ULP. - Implementasi
avx2danavx512juga telah dibuat, tetapi tidak digunakan karena manfaatnya tidak besar dibanding kompleksitas kode relatif terhadapsse2+fma.
- Kini Softmax dan SiLU dapat dihitung dengan akurasi lebih tinggi dibanding tabel lookup
-
Respons utama:
- Sejumlah kontributor menunjukkan respons positif terhadap perubahan ini.
SOFT_MAXsekitar 1,5x lebih cepat padaAMD Ryzen 9 5950XdanM2 Ultra.
Perubahan kode
- Ringkasan perubahan utama:
- Menghapus
#defineyang 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 flagSSE2atau__ARM_NEON.
- Menghapus
Peningkatan performa
- Hasil benchmark:
SOFT_MAXsekitar 1,5x lebih cepat padaAMD Ryzen 9 5950XdanM2 Ultra.- Dengan
AVX2, keuntungannya meningkat dari 1,5x menjadi 1,9x. - Pada
znver4, denganavx512, peningkatannya naik menjadi 2,1x.
Opini tambahan
- Pendapat kontributor:
- Saat menggunakan
AVX512,vscalefpsdapat menangani overflow dan underflow dengan tepat, sekaligus menghilangkan kebutuhan pemeriksaan dan blend. - Peningkatan performa telah dikonfirmasi pada
Skylake-AVX512/Cascadelake.
- Saat menggunakan
Opini GN⁺
- Peningkatan performa: Perubahan ini dapat meningkatkan performa CPU secara signifikan, terutama pada perangkat keras modern yang menggunakan
AVX2danAVX512. - Kompleksitas kode: Karena implementasi
AVX2danAVX512tidak memberi keuntungan besar dibandingSSE2+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
Opini Hacker News
Ringkasan kumpulan komentar Hacker News
Kisah prosesor sinyal radar Hughes 20 tahun lalu
Dampak peningkatan
siludansoftmaxterhadap kecepatan inferensi LLMKekaguman terhadap optimisasi kode
Pertanyaan tentang ukuran LUT
Perbandingan
llama.cppdanggmldi CPUggmldibandingkan dengantensorflow lite,onnxruntime, dan lainnya.Perbandingan performa di perangkat CUDA
gguf/llama.cpplebih baik untuk inferensi non-batch, atauexllamav2+flashattentionmasih unggul.Kemungkinan vektorisasi LUT
Perhitungan
tanhcepattanhyang cepat.Performa
llamadi CPUllamadengan banyak parameter bisa tetap terlalu lambat di CPU.