2 poin oleh GN⁺ 2024-10-10 | 1 komentar | Bagikan ke WhatsApp
  • L-Mul adalah algoritme perkalian berkompleksitas linear yang berupaya mengaproksimasi perkalian dengan penjumlahan bilangan bulat, dengan menyoroti bahwa biaya energi besar pada LLM berasal dari perkalian floating-point
  • Perkalian fp32 memiliki biaya energi 37 kali lebih tinggi daripada penjumlahan int32, sehingga penerapan L-Mul pada hardware pemrosesan tensor berpotensi mengurangi 95% energi perkalian tensor floating-point per elemen dan 80% energi dot product
  • Cara komputasinya menghilangkan perkalian mantissa dan pembulatan, menangani tanda dengan XOR, sementara bit sisanya disusun sebagai penjumlahan dalam bentuk x[1:] + y[1:] - offset
  • Dalam eksperimen, L-Mul dengan mantissa 4-bit menunjukkan presisi yang mirip dengan perkalian float8 e4m3, sementara L-Mul dengan mantissa 3-bit menghasilkan hasil yang lebih baik daripada float8 e5m2
  • Ketika attention L-Mul diterapkan pada LLM pralatih tanpa pelatihan tambahan, rata-rata penurunan performa pada tugas inferensi bahasa alami adalah 0,07%, sementara pada tugas visi rata-rata akurasi meningkat 0,12%

Bottleneck yang Disasar L-Mul

  • Jaringan saraf berskala besar menghabiskan banyak komputasinya untuk perkalian tensor floating-point, dan operasi ini memiliki biaya energi lebih besar daripada penjumlahan
  • L-Mul adalah algoritme linear-complexity multiplication yang mengaproksimasi perkalian bilangan floating-point dengan penjumlahan bilangan bulat
  • Target penerapannya mencakup berbagai tahap komputasi
    • Perkalian di dalam mekanisme attention
    • Perkalian matriks
    • Perkalian per elemen
  • Pada LLM berbasis Transformer, attention memiliki kompleksitas O(N²) terhadap panjang konteks input N, dan bersama perkalian tensor berdimensi tinggi, menjadi bottleneck utama efisiensi komputasi

Biaya Energi Berdasarkan Operasi Aritmetika

  • Tabel biaya operasi dari Horowitz(2014) secara langsung menunjukkan perbedaan energi antara penjumlahan dan perkalian
    • Penjumlahan int8: 0,03 pJ
    • Penjumlahan int32: 0,1 pJ
    • Penjumlahan fp16: 0,4 pJ
    • Penjumlahan fp32: 0,9 pJ
    • Perkalian int8: 0,2 pJ
    • Perkalian int32: 3,1 pJ
    • Perkalian fp16: 1,1 pJ
    • Perkalian fp32: 3,7 pJ
  • Perkalian fp32 menggunakan energi 4 kali lebih banyak daripada penjumlahan fp32, dan 37 kali lebih banyak daripada penjumlahan int32
  • Presisi default akumulasi hasil perkalian tensor di PyTorch ditetapkan ke fp32
  • Jika I/O dan operasi kontrol dikecualikan, saat perkalian fp32 diaproksimasi dengan penjumlahan int32, penggunaan energinya sekitar 1/37 ≈ 2,7%
  • Bahkan jika presisi akumulasi diturunkan ke fp16, penjumlahan bilangan bulat hanya menggunakan sekitar 4,7% dari energi perkalian floating-point

Cara Kerja Komputasi L-Mul

  • Perkalian floating-point umum untuk dua bilangan x, y memiliki bentuk berikut
    • (1 + xm) · 2^xe · (1 + ym) · 2^ye
    • Hasilnya tersusun dari (1 + xm + ym + xm · ym) · 2^(xe+ye) dan XOR tanda
  • Bottleneck komputasinya adalah perkalian mantissa O(m²) untuk mantissa m bit
  • L-Mul menghilangkan xm · ym dan mengaproksimasinya dalam bentuk berikut
    • (1 + xm + ym + 2^-l(m)) · 2^(xe+ye)
  • l(m) berubah sesuai jumlah bit mantissa
    • Jika m ≤ 3, maka m
    • Jika m = 4, maka nilai terpisah
    • Jika m > 4, maka nilai terpisah
  • Implementasi tingkat bit diringkas menjadi ekspresi yang lebih sederhana
    • Bit tanda: x[0] ⊕ y[0]
    • Bit sisanya: x[1:] + y[1:] - offset
  • Karena format floating-point menangani 1 + xm secara implisit, L-Mul dalam implementasi nyata dapat disusun dengan satu adder
  • Jika jumlah mantissa melebihi 2, carry otomatis diteruskan ke exponent
  • Dengan melewati proses perkalian mantissa dan pembulatan yang dibutuhkan pada perkalian floating-point konvensional, jumlah komputasi berkurang

Penerapan pada Attention Transformer

  • Attention berbasis L-Mul membuat Q, K, V, lalu mengganti perkalian matriks dalam komputasi attention dengan L-matmul
  • Bentuk komputasinya adalah sebagai berikut
    • K = H · Wk
    • Q = H · Wq
    • V = H · Wv
    • A = softmax[L-matmul(Q, Kᵀ) / √d]
    • H′ = L-matmul(A, H)
  • L-matmul adalah perkalian matriks yang mengimplementasikan semua perkalian floating-point biasa dengan L-Mul
  • Struktur ini mengubah perkalian floating-point menjadi penjumlahan bilangan bulat sehingga menurunkan penggunaan sumber daya komputasi

Analisis Presisi dan Kompleksitas serta Hasil Eksperimen

  • Analisis presisi disusun dengan mengevaluasi L-Mul setara dengan mempertahankan fraction bilangan floating-point hingga berapa bit
  • Dalam analisis berdasarkan operand berdistribusi uniform, L-Mul lebih akurat daripada fp8 e5m2
  • Dalam analisis praktis berdasarkan distribusi gabungan weight dari 5 LLM pralatih, pada operand mantissa 5-bit presisi yang dicapai dapat lebih tinggi daripada fp8 e4m3
  • Hasil eksperimen sesuai dengan estimasi galat teoretis
    • L-Mul dengan mantissa 4-bit memiliki presisi yang mirip dengan perkalian float8 e4m3
    • L-Mul dengan mantissa 3-bit memiliki presisi lebih tinggi daripada float8 e5m2
  • Pada LLM pralatih, implementasi attention standar langsung diganti dengan attention L-Mul, tanpa pelatihan tambahan
    • Rata-rata penurunan performa pada tugas commonsense, structured reasoning, dan language understanding: 0,07%
    • Perubahan rata-rata akurasi pada tugas visual question answering, object hallucination, dan free-form visual instruction: meningkat 0,12%
  • Dalam eksperimen fine-tuning, model yang mengganti semua perkalian pada attention, linear transformation, dan perkalian per elemen dengan L-Mul mantissa 3-bit menunjukkan performa yang mirip dengan model standar yang menggunakan presisi akumulasi float8 e4m3
  • Dalam estimasi jumlah komputasi tingkat gate, perkalian biasa berada pada tingkat berikut
    • Perkalian fp16: sekitar 584
    • Perkalian fp8 e4m3: sekitar 325
    • Perkalian fp8 e5m2: sekitar 296
  • Estimasi jumlah komputasi tingkat gate untuk L-Mul lebih rendah
    • L-Mul fp16: sekitar 256
    • L-Mul fp8: sekitar 157
  • GPU tidak memiliki implementasi native L-Mul, sehingga sulit memanfaatkan efisiensinya sepenuhnya, dan model berbasis L-Mul direkomendasikan untuk dilatih dan di-hosting pada perangkat yang mengintegrasikan desain arsitektur khusus
  • Teknologi ini berstatus patent pending

1 komentar

 
GN⁺ 2024-10-10
Komentar Hacker News
  • Dulu saat perhitungan floating-point mahal di CPU Intel, saya ingat ada banyak cara akal-akalan yang dipakai programmer dengan bilangan bulat untuk mengakalinya
    Chuck Moore yang terkenal dengan Forth pernah menunjukkan pendekatan menangani nilai seperti 1.6 × 4.1 sebagai integer seperti 16 × 41 selama perhitungan antara, lalu saat output titik desimalnya dimasukkan kembali ke “posisi yang benar”. Jika rentang nilai floating-point tetap tidak melebihi 65536 meski dikali 10, ini bekerja baik bahkan dengan integer 16-bit, dan cocok untuk chip embedded yang harus cepat menghitung nilai analog berpresisi 10-bit beberapa kali per detik
    Saya juga pernah lama sekali berbicara dengan seorang engineer Microsoft yang mengerjakan Microsoft Streets and Trips, dan katanya mereka juga memasukkan angka dan perhitungan yang biasanya akan berupa floating-point ke dalam semacam format integer terkemas yang hanya memuat presisi yang benar-benar dibutuhkan, agar berjalan lebih cepat di CPU saat itu dan lebih mudah dikompresi supaya muat di CD-ROM. Tangkapan layar ada di https://archive.org/details/3135521376_qq_CD1

    • Ini adalah teknik yang disebut aritmetika fixed-point, dan ini metode keren yang semoga diketahui lebih banyak programmer
      Kode finansial yang benar seharusnya memakai ini, tetapi di industri keuangan yang saya lihat, kecuali menjalankan mainframe, ini tidak terlalu umum. Menariknya, saya jauh lebih sering melihat aritmetika fixed-point di software rasterizer seperti FreeType, GDI, WPF, dan WARP (rasterizer referensi D3D11)
    • Saya ingat pernah bermain-main dengan generator fraktal FRACTINT dari masa ketika koprosesor floating-point belum umum. Ia menghitung dan menampilkan fraktal dengan matematika fixed-point, dan saat itu fraktal tampak sangat keren sehingga semua orang ingin menjalankan bisnis fraktal dan semua Hadiah Nobel rasanya akan jatuh ke para peneliti fraktal
    • Ozaki sudah melakukan perkalian matriks fp64 dengan tensor core int8
      https://arxiv.org/html/2306.11975v4
      Sangat menarik
    • Setahu saya, ini masih cara terbaik untuk menangani uang atau angka keuangan
    • Trik spesifik itu dikenal sebagai aritmetika fixed-point. Itu konsep yang berbeda dari titik tetap pada fungsi
  • Klaimnya seperti “biaya energi pada perkalian tensor floating-point per-elemen berpotensi dikurangi 95%, dan 80% pada dot product”, dan kalau ini membahas jaringan saraf konvolusional, optimisasi komputasinya akan jauh lebih berarti
    Tetapi transformer cenderung ringan di komputasi dan berat di memori. Bottleneck-nya adalah membawa bobot model ke core, dan penghematan energi 95% dan 80% yang dikutip itu adalah angka untuk operasi perkalian saja, bukan untuk keseluruhan proses inferensi

    • Prefill bersifat compute-bound bahkan pada batch tunggal, dan decoding multi-batch juga tetap begitu
      Ucapan berulang bahwa “inferensi transformer decoder-only dibatasi bandwidth memori” hanya benar secara ketat untuk decoding batch tunggal dengan ukuran batch 1. Saat itu sebagian besar yang dilakukan memang perkalian vektor-matriks
    • Lebih buruk lagi. Keuntungan energinya dibandingkan dengan komputasi fp32, padahal di fp8 pengali itu sangat kecil sehingga penjumlah dan shifter mengambil porsi yang lebih besar dari operator dari sisi energi dan area, jadi keuntungan dalam paper ini akan kecil
      Pada fp8, estimasi jumlah gerbangnya adalah 296 untuk pengali fp8 biasa dan 157 untuk teknik ini, jadi keuntungan daya pada pengali akan jauh lebih rendah. Sekitar 50% adalah perkiraan yang lebih masuk akal, dan sekali lagi, pada fp8 penjumlahan mengambil porsi besar dari operasi dalam dot product
      Secara keseluruhan, klaim keuntungan daya 80% dengan penurunan akurasi kecil tampak cukup tidak jujur. Keuntungan daya itu hanya berlaku untuk operasi fp32, sedangkan penurunan akurasi kecil hanya untuk operator fp8. Mereka tidak menganalisis penurunan akurasi pada fp32, dan juga tidak menyajikan daya yang dihemat pada dot product fp8
    • fp8 cukup kecil sehingga tampaknya perkalian bisa dilakukan dengan rangkaian yang jauh lebih sederhana dibanding format floating-point yang lebih besar
      Format yang lebih kecil seperti fp4 bahkan bisa memakai lookup table, yang pada dasarnya mendekati skema kuantisasi yang cukup terstandarisasi
    • Arsitektur yang benar-benar bagus untuk transformer tampaknya adalah penempatan bersama memori dan komputasi
    • Itu hanya benar untuk pengguna tunggal atau inferensi ringan. Pada pelatihan dan inferensi ber-batch, ini bisa segera menjadi bottleneck komputasi
  • [2023] GradIEEEnt half decent: The hidden power of imprecise lines
    http://tom7.org/grad/murphy2023grad.pdf
    Ada juga videonya: https://www.youtube.com/watch?v=Ae9EKCyI1xU

  • Saya belum membacanya, tetapi rasanya ini menggunakan semacam tabel logaritma dalam satu bentuk atau lainnya
    Bukan bermaksud meremehkan, saya bertanya karena di level yang lebih mendasar seperti gerbang logika, saya merasa belum benar-benar memahami logaritma. Jika perkalian bisa diubah menjadi pencarian tabel dan penjumlahan, rasanya seharusnya juga ada rangkaian yang menghasilkan penjumlahan sulit dan perkalian mudah, atau kombinasi kompromi semacam itu

    • Ruang log itu bagus. Karena perkalian bisa diganti dengan penjumlahan
      Bagian ini mudah dan siapa pun bisa mengimplementasikannya di hardware. Bagian yang sulit adalah saat akumulasi, terutama bila akumulasi berlangsung di rentang yang besar sambil tetap berada di ruang log
    • Benar, begitulah cara kerja sistem bilangan logaritmik
  • Saya heran karena tampaknya tidak ada penurunan dan pembahasan yang layak tentang suku galat di paper itu. Semuanya hanya dibahas secara tidak langsung lewat hasil inferensi

    • Saya juga merasa paper ini agak aneh. Kalau estimasi gerbang hanya dijelaskan lewat teks tanpa diagram, terlalu mudah untuk melewatkan bagian yang diperlukan
      Bahkan jika tidak sampai penjelasan level gerbang yang lengkap, setidaknya perlu gambar dengan label blok seperti “adder”. Melihat nama de Vries di paragraf pertama juga tidak membantu menambah kepercayaan
  • Di catatan kaki bagian metode tertulis, “model berbasis L-Mul direkomendasikan untuk dilatih dan di-host pada perangkat dengan desain arsitektur khusus yang terintegrasi. Paten sedang diajukan”

  • Jumlah komputasi tampaknya akan berkurang, tetapi karena tetap memakai 8-bit per nilai, kebutuhan memori untuk menjalankan inferensi tidak berkurang
    Jadi rasanya sulit mengatakan ini membuat model lebih mudah diakses untuk keperluan inferensi. Jika format penyimpanan ini juga cocok untuk pelatihan, itu bisa menjadi area aplikasi yang berpotensi menarik

    • Sebenarnya, dari sudut pandang presisi dan rentang, ini sekitar 0.5 bit kurang efisien per bobot, tetapi paper itu sama sekali tidak menekankan bagian ini
  • Memindahkan byte menghabiskan energi lebih dari 10 kali dibanding komputasi. Efisiensi komputasi bukan masalah sebesar yang dibayangkan orang
    Sekarang komputasinya hanya berada di tempat yang salah, dan setidaknya untuk agregasi awal dalam dot product, ia harus berada tepat di samping sel memori agar bisa melewati bus memori

    • Tapi bukankah ini masih bisa berguna untuk perangkat yang dibatasi baterai?
  • Menurut pengalaman saya, para penyihir sejati matematika fixed-point adalah para desainer video game 8-bit dan 16-bit
    Optimisasi yang mereka lakukan benar-benar menakjubkan, dan misalnya memungkinkan perhitungan matematika matriks 3D secara real-time untuk membuat simulator penerbangan pertama dan game tembak-menembak sudut pandang orang pertama

    • Mendefinisikan ulang sudut sebagai 2π = 256 adalah trik yang cukup cerdas