Kuantisasi adalah proses mengurangi presisi sinyal digital, biasanya dari format dengan presisi lebih tinggi ke format dengan presisi lebih rendah. Teknik ini banyak digunakan di berbagai bidang, termasuk pemrosesan sinyal, kompresi data, dan machine learning.
Kuantisasi adalah teknik yang digunakan dalam model bahasa besar (LLM) untuk mengubah bobot dan nilai aktivasi data presisi tinggi, biasanya titik kambang 32-bit (FP32) atau titik kambang 16-bit (FP16), ke data presisi rendah, seperti integer 8-bit (INT8). Disebut data presisi tinggi (mengacu pada FP32 dan FP16) karena model yang menggunakan tipe data ini biasanya memiliki akurasi yang lebih tinggi. Ini karena ketika data dikompresi menjadi sesuatu seperti INT8, data ditekan menjadi ukuran yang lebih kecil. Ini secara efektif menghasilkan akurasi yang lebih rendah, juga disebut sebagai kesalahan kuantisasi. Nilai aktivasi adalah angka (antara nol dan satu) yang ditetapkan ke neuron buatan jaringan neural. Nomor yang ditetapkan ini disebut sebagai nilai aktivasinya. Biasanya tujuannya adalah mendapatkan kuantisasi 8-bit, tetapi data terkuantisasi integer 4-bit (INT4) dan yang lebih rendah telah berhasil dicapai. Pada dasarnya, proses kuantisasi menggunakan teknik kompresi pada jaringan neural untuk mengubah sejumlah besar bit menjadi sejumlah kecil bit. 1
Persyaratan komputasi mengoperasikan LLM menggunakan FP32 bisa sangat besar. Seiring dengan meningkatnya kebutuhan komputasi, inferensi (proses LLM menghasilkan respons terhadap kueri pengguna) juga dapat diperlambat. Kuantisasi dapat menjadi alat optimasi yang bagus untuk mengurangi beban komputasi sekaligus meningkatkan kecepatan inferensi LLM. Proses kuantisasi berkisar pada premis untuk mengubah bobot ke tipe data dengan presisi yang lebih rendah, sementara kinerja model tetap hampir sama. Konversi bobot ke tipe data presisi yang lebih rendah akan menghasilkan biaya komputasi yang lebih rendah karena jumlah bit yang perlu diproses lebih sedikit setiap kali model dijalankan. Lebih sedikit bit yang diproses juga akan menyebabkan setiap kueri ke pemrosesan LLM lebih cepat.
Dengan memanfaatkan kuantisasi untuk mengubah tipe data titik kambang menjadi integer, perhitungan dapat diselesaikan lebih cepat. Hal ini mengurangi latensi model secara keseluruhan dan mengarah pada peningkatan kecepatan inferensi versus akurasi. Pertukaran ini sangat penting untuk aplikasi real-time apa pun, terutama saat berjalan pada CPU mobile. 2
Kuantisasi sangat penting ketika mencoba menjalankan model machine learning pada perangkat yang tidak dapat menangani persyaratan komputasi yang lebih tinggi. Ketika kuantisasi mengubah representasi titik kambang menjadi integer, hal ini mengurangi kebutuhan komputasi dari model machine learning. Hal ini memungkinkan untuk memanfaatkan model terkuantisasi ini dalam aplikasi dunia nyata pada laptop, tablet, dan smartphone. 2
Biasanya, model yang dikuantisasi memiliki persyaratan komputasi yang lebih rendah. Oleh karena itu, kuantisasi menghasilkan peningkatan efisiensi energi yang merupakan kunci untuk menjalankan model ini pada laptop, tablet, dan ponsel. 3
Memanfaatkan kuantisasi memungkinkan model machine learning saat ini berjalan menggunakan operasi integer. Hal ini membuat model terkuantisasi kompatibel dengan platform lama yang tidak mendukung operasi titik kambang. Model juga menjadi jauh lebih mudah diakses, sehingga memungkinkan untuk menjalankannya di GPU konsumen. 4
Ada sekitar 4 miliar nilai dalam rangkaian nilai FP32 yang memungkinkan mulai dari -3,4 1038 hingga 3,4 1038. Sedangkan dengan INT8, kita hanya melihat 256 nilai dalam nilai yang mungkin ditetapkan mulai dari -128 hingga 128. Karena yang terakhir merupakan set nilai yang jauh lebih kecil, perkalian matriks dapat terjadi jauh lebih cepat. Karena biaya komputasi yang sangat besar dari model berbasis pembelajaran mendalam, algoritma yang akurat dan efisien sangat penting.
Proses kuantisasi terjadi dengan terlebih dahulu menentukan rute optimal untuk memproyeksikan nilai titik kambang 32-bit ke dalam bidang INT8. Untuk melakukannya, ada beberapa algoritma untuk mengukur model. Kita akan melihat dua metode kuantisasi, Absolute Max dan Kuantisasi Affine.
Untuk menghitung pemetaan antara angka titik kambang dan angka INT8 yang sesuai dalam kuantisasi maksimum absolut, Anda harus terlebih dahulu membagi dengan nilai maksimum absolut tensor dan kemudian mengalikannya dengan total rentang tipe data.
Sebagai contoh, kami akan menerapkan algoritma kuantisasi maks absolut ke vektor berikut [1.6, -0.7, -3.4, 1.7, -2.9, 0.5, 2.3, 6.2]. Anda mengekstrak maksimum absolutnya, yaitu 6,2 dalam kasus ini. INT8 memiliki jangakuan [-127, 127], jadi kami membagi 127 dengan 6,2 dan mendapatkan 20,5 untuk faktor penskalaan. Oleh karena itu, mengalikan vektor asli dengannya menghasilkan vektor data terkuantisasi [33, -14, -70, 35, -59, 10, 47, 127]. Karena angka-angka ini dibulatkan, akan ada beberapa kehilangan presisi. 5
Untuk mengimplementasikan algoritma kuantisasi affine, kami akan mendefinisikan rentang nilai titik kambang 32-bit kami sebagai [a, b]. Algoritma kuantisasi affine adalah sebagai berikut:
𝑥𝑞 = round ((1/𝑆)𝑥+𝑍)
- 𝑥𝑞 adalah nilai INT8 terkuantisasi yang sesuai dengan nilai titik kambang 32-bit x.
- S adalah faktor penskalaan FP32 dan merupakan titik kambang 32-bit positif.
- Z adalah titik nol. Ini akan menjadi nilai INT8 yang sesuai dengan nol di bidang titik kambang 32-bit.
- round mengacu pada pembulatan nilai yang dihasilkan ke bilangan bulat terdekat.
Untuk selanjutnya menetapkan [min, maks] dari nilai titik kambang 32-bit kami, kami perlu mempertimbangkan setiap outlier. Mengabaikan outlier ini dapat menyebabkan mereka dipetakan sebagai min atau max dan berpotensi mencondongkan akurasi model terkuantisasi. Untuk mengatasi ini, model dapat dikuantisasi dalam blok. Bobot dapat dipecah menjadi kelompok 64 atau 128. Kemudian kelompok-kelompok ini dikuantisasi untuk memperhitungkan outlier dan meminimalkan risiko presisi yang lebih rendah. 6
Kuantisasi pasca-pelatihan (Post-training quantization/PTQ) terjadi ketika kuantisasi diterapkan pada model yang ada. Hal ini mengubah model dari representasi titik kambang menjadi bilangan bulat titik tetap dengan presisi lebih rendah tanpa perlu pelatihan ulang. Metode ini tidak memerlukan data sebanyak pelatihan sadar kuantisasi dan jauh lebih cepat. Namun demikian, karena model yang sudah ada pada dasarnya dikonversi ke ukuran yang lebih kecil, kuantisasi pasca-pelatihan dapat menyebabkan penurunan kinerja. Contoh kapan harus menggunakan PTQ adalah ketika Anda sudah memiliki model kerja dan memiliki keinginan untuk meningkatkan kecepatan dan efisiensi. Hal ini dikarenakan PTQ dilakukan setelah sebuah model dilatih (yaitu model yang sudah ada) sehingga sejumlah besar data pelatihan tidak diperlukan untuk proses ini. 7
Pelatihan sadar kuantisasi menggabungkan konversi bobot selama pra-pelatihan atau penyempurnaan LLM. Hal ini memungkinkan peningkatan kinerja, tetapi membutuhkan daya komputasi dalam jumlah besar dan membutuhkan data pelatihan yang representatif. Secara keseluruhan, pelatihan yang sadar kuantisasi biasanya akan menghasilkan model dengan kinerja yang lebih tinggi, tetapi lebih mahal dan akan menuntut daya komputasi yang jauh lebih besar. Contoh kapan harus menggunakan QAT adalah ketika Anda memiliki jumlah data pelatihan yang memadai dan anggaran yang lebih besar. Perlu diingat juga bahwa proses ini terjadi selama tahap pelatihan model, sehingga tidak masuk akal untuk menggunakan metode ini dengan model yang sudah terlatih. 7
Tujuan dari kedua teknik ini adalah, bagaimana jangkauan kliping, atau umumnya disebut kalibrasi, akan dipilih. Selama kuantisasi dinamis ini, jangkauan kliping dihitung secara dinamis untuk setiap aktivasi. Biasanya, jenis teknik kuantisasi ini akan menghasilkan akurasi yang lebih tinggi. Seperti namanya, kuantisasi statis menggunakan jangkauan kliping tetap untuk semua input. Bentuk kuantisasi ini lebih sering digunakan sebagai kuantisasi dinamis dan bisa sangat mahal.
Ketika bobot dikonversi selama kuantisasi, terkadang ada kehilangan akurasi dalam nilai yang dikuantisasi dengan model machine learning yang dikuantisasi. Ukuran model harus dipertimbangkan, karena ketika mengkuantisasi LLM yang sangat besar dengan banyak parameter dan lapisan, ada risiko akumulasi kesalahan kuantisasi yang signifikan. 8
Pelatihan skala model machine learning bisa sangat mahal, terutama dengan pelatihan sadar kuantisasi (QAT). Hal ini menjadikan kuantisasi pasca pelatihan (PTQ) sebagai pilihan terbaik dari sudut pandang hemat biaya. Namun, ini dapat membatasi model dalam beberapa aspek karena QAT biasanya akan menghasilkan model yang lebih akurat. 9
¹ Dong Liu, Meng Jiang, Kaiser Pister, "LLMEasyQuant - An Easy to Use Toolkit for LLM Quantization", https://arxiv.org/pdf/2406.19657v2.
² Benoit Jacob, Skirmantas Kligys, Bo Chen, Menglong Zhu, Matthew Tang, Andrew Howard, Hartwig Adam, Dmitry Kalenichenko, "Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference", https://arxiv.org/pdf/1712.05877v1.
³ Ravi Kishore Kodali, Yatendra Prasad Upreti, Lakshmi Boppana, "A Quantization Approach for the Reduced Size of Large Language Models", https://ieeexplore.ieee.org/document/10499664.
⁴ Xiao Sun, Naigang Wang, Chia-yu Chen, Jia-min Ni, Ankur Agrawal, Xiaodong Cui, Swagath Venkataramani, Kaoutar El Maghraoui, Vijayalakshmi Srinivasan, "Ultra-Low Precision 4-bit Training of Deep Neural Networks", https://research.ibm.com/publications/ultra-low-precision-4-bit-training-of-deep-neural-networks
⁵ Tim Dettmers, Mike Lewis, Younes Belkada, Luke Zettlemoyer, "LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale", https://arxiv.org/pdf/2208.07339
⁶ Amir Gholami, Sehoon Kim, Zhen Dong, Zhewei Yao, Michael W. Mahoney, Kurt Keutzer, "A Survey of Quantization Methods for Efficient Neural Network Inference", https://arxiv.org/pdf/2103.13630
⁷ Hao Wu, Patrick Judd, Xiaojie Zhang, Mikhail Isaev, Paulius Micikevicius, "A Survey of Quantization Methods for Efficient Neural Network Inference", https://arxiv.org/pdf/2004.09602
⁸ Zhuocheng Gong, Jiahao Liu, Jingang Wang, Xunliang Cai, Dongyan Zhao, Rui Yan, "What Makes Quantization for Large Language Models Hard? An Empirical Study from the Lens of Perturbation", https://arxiv.org/pdf/2403.06408v1.
⁹ Sehoon Kim, Coleman Hooper, Amir Gholami, Zhen Dong, Xiuyu Li, Sheng Shen, Michael W. Mahoney, Kurt Keutzer, "SqueezeLLM: Dense-and-Sparse Quantization", https://arxiv.org/pdf/2306.07629v4.