Sebuah tensor dapat direpresentasikan dengan baik dalam floating point tetapi sulit dipetakan ke rentang integer yang kecil. Masalah ini terasa ketika sebagian besar nilai aktivasi berada dalam interval sempit, sementara sedikit nilai memiliki magnitudo jauh lebih besar. Skala kuantisasi bersama harus mencakup nilai ekstrem tersebut, sehingga nilai biasa hanya mendapat sebagian kecil level representasi yang tersedia.
Itulah dampak praktis activation outlier pada inference low-bit. Masalahnya bukan sekadar sebuah outlier memiliki nilai numerik besar. Lokasi, persistensi, dan hubungannya dengan sumbu tempat skala digunakan bersama menentukan apakah outlier tersebut benar-benar merusak representasi hasil kuantisasi.
Skala bersama mengikat magnitudo yang berbeda
Untuk kuantisasi integer simetris dengan rentang integer [-Q, Q], skala sederhana dapat ditulis sebagai:
s = max(|x|) / Q
q = clamp(round(x / s), -Q, Q)
x_hat = s * qJika satu nilai membuat max(|x|) jauh lebih besar daripada magnitudo tipikal, s meningkat untuk seluruh nilai yang memakai skala tersebut. Langkah kuantisasi pun menjadi lebih kasar di seluruh grup.
Sebagai contoh, anggap sebagian besar nilai berada antara -1 dan 1, tetapi satu nilai bernilai 20. Dengan bit width integer yang sama, skala yang dipilih untuk mempertahankan 20 mengalokasikan sebagian besar rentang numerik ke magnitudo yang hampir tidak digunakan elemen lain. Nilai di sekitar nol dapat jatuh ke kode integer yang sama walaupun nilai floating-point-nya berbeda.
Ini merupakan masalah alokasi skala. Kondisi tersebut tidak berarti setiap aktivasi besar adalah kesalahan, dan tidak berarti clipping terhadapnya otomatis dapat diterima. Nilai besar dapat membawa informasi yang dipakai operasi berikutnya.
Granularitas kuantisasi mengubah permukaan kegagalan
Kuantisasi per-tensor memberikan satu skala untuk seluruh tensor. Skema per-channel atau per-group membagi nilai menjadi kelompok lebih kecil dengan skala terpisah. Grup yang lebih kecil dapat mengisolasi nilai ekstrem sehingga nilai tersebut tidak menentukan resolusi bagi elemen yang tidak terkait.
Pengelompokan yang relevan bergantung pada operasi dan implementasi. Pada matrix multiplication, layout activation dan weight, dukungan kernel, serta sumbu scaling sama-sama berpengaruh. Dua quantizer dengan bit width nominal yang sama dapat menghasilkan perilaku berbeda pada model yang sama karena granularitas skalanya berbeda.
Hal ini juga menunjukkan kelemahan pengukuran yang hanya memakai nilai maksimum tensor. Angka maksimum tidak menunjukkan seberapa luas dampaknya. Pemeriksaan yang lebih berguna mencakup distribusi magnitudo dan posisinya pada sumbu yang berbagi skala kuantisasi. Beberapa nilai besar yang terkonsentrasi pada channel yang terus berulang merupakan masalah berbeda dari nilai besar yang tersebar secara tidak menentu pada token dan channel.
Clipping menukar error rentang dengan resolusi
Clipping mengurangi rentang yang dipakai untuk memilih skala. Jika threshold T menggantikan nilai maksimum absolut, skalanya dapat menjadi:
s = T / Q
x_clipped = clamp(x, -T, T)Rentang yang lebih kecil memberi langkah lebih rapat bagi nilai di dalam [-T, T], tetapi nilai di luar interval sudah berubah sebelum pembulatan integer. Error kuantisasi berkurang untuk sebagian nilai dan meningkat tajam pada bagian distribusi yang terkena clipping.
Karena itu, threshold yang sesuai terkait dengan sensitivitas model, bukan hanya histogram aktivasi. Aturan berbasis persentil dapat menggambarkan distribusi data, tetapi tidak membuktikan bahwa magnitudo yang dipotong tidak berpengaruh pada output model. Data kalibrasi berguna sejauh data tersebut mewakili pola aktivasi yang diperkirakan muncul saat inference.
Kalibrasi statis juga memiliki batas. Threshold yang dipilih dari satu sampel prompt dapat menghadapi rentang berbeda pada input berikutnya. Dynamic activation quantization dapat menyesuaikan skala saat runtime, tetapi memerlukan perhitungan skala dan tetap harus bekerja pada granularitas yang didukung.
Channel outlier yang persisten membuka intervensi berbeda
Jika aktivasi dengan magnitudo sangat besar terus muncul pada channel tertentu, scaling dapat memindahkan kesulitan numerik antara activation dan weight tanpa mengubah operasi linear floating-point yang bersesuaian.
Untuk transformasi linear:
y = xWmasukkan matriks scaling diagonal positif D:
y = (x D^-1)(D W)Dalam aritmetika eksak, hasil perkalian tetap sama. Channel aktivasi dapat diperkecil oleh D^-1, sementara baris weight yang bersesuaian diperbesar oleh D. Kuantisasi kemudian bekerja pada tensor dengan rentang yang sudah berubah.
Identitas tersebut tidak menjamin perilaku yang sama setelah kuantisasi. Mekanisme ini sengaja memindahkan rentang di antara dua operand, sehingga error akhirnya bergantung pada quantizer, bit width, grouping, kalibrasi, dan implementasi kernel. Rescaling yang terlalu besar dapat membuat sisi weight lebih sulit dikuantisasi walaupun sisi activation menjadi lebih mudah.
Mekanisme ini paling sesuai ketika struktur aktivasi bermasalah cukup stabil untuk ditangkap oleh transformasi offline. Jika channel ekstrem berubah besar mengikuti input atau state layer, redistribusi tetap mungkin tidak dapat mengisolasi masalah dengan rapi.
Data kalibrasi menentukan rentang yang teramati
Post-training activation quantization umumnya memakai input representatif untuk memperkirakan rentang atau statistik skala lain. Input tersebut bukan sekadar data validasi. Isinya menentukan rezim aktivasi yang terlihat oleh quantizer sebelum deployment.
Set kalibrasi yang didominasi prompt pendek dan seragam dapat melewatkan pola magnitudo yang terkait dengan panjang sequence, bahasa, format, modalitas, atau struktur tugas yang berbeda. Dimensi yang relevan bergantung pada model dan workload serving. Menambah jumlah contoh kalibrasi tidak otomatis memperbaiki mismatch distribusi jika semua contoh tetap berasal dari rezim sempit yang sama.
Diagnostik rentang lebih informatif jika dicatat per-layer dan pada granularitas yang sama dengan quantizer. Sinyal yang berguna antara lain rasio magnitudo ekstrem terhadap magnitudo tipikal, kemunculan berulang channel bermagnitudo tinggi, serta proporsi nilai yang akan berubah akibat threshold clipping. Pengukuran ini menunjukkan lokasi tekanan pada representasi low-bit tanpa mengasumsikan bahwa setiap outlier harus ditekan.
Dukungan kernel membatasi rancangan numerik
Skema kuantisasi yang menarik secara matematis tetap harus dapat dipetakan ke inference kernel. Skala dengan granularitas sangat halus dapat mengurangi gangguan dari outlier, tetapi membutuhkan metadata skala dan operasi aritmetika pada batas grup yang sesuai. Hardware dan library berbeda dalam dukungan format integer, ukuran grup, zero point, serta tipe akumulasi.
Akibatnya, kualitas kuantisasi tidak dapat sepenuhnya dipisahkan dari implementasi serving. Model yang dikonversi dengan satu skema grouping mungkin memerlukan representasi lain pada backend yang tidak memiliki kernel yang dibutuhkan. Fallback ke jalur yang lebih lambat juga dapat menggagalkan sasaran deployment walaupun error numeriknya rendah.
Activation outlier sebaiknya diperlakukan sebagai batas antara statistik model dan representasi integer. Pertanyaan utamanya bukan sekadar ada atau tidaknya nilai besar, melainkan nilai mana yang berbagi skala dengannya, seberapa stabil nilai ekstrem pada berbagai input inference, serta transformasi apa yang dapat dijalankan serving kernel tanpa mengubah komputasi yang dimaksud.