Quantizer dengan lebar integer tetap hanya memiliki jumlah kode representatif yang terbatas. Ketika banyak aktivasi memakai satu skala, satu nilai dengan magnitudo jauh lebih besar dapat memaksa skala tersebut mencakup rentang nilai real yang lebih lebar. Nilai lain kemudian hanya memakai lebih sedikit interval kode yang berguna di sekitar wilayah tempat nilainya terkonsentrasi.

Perilaku ini bukan pernyataan umum bahwa kuantisasi gagal ketika berhadapan dengan angka besar. Penyebabnya lebih spesifik: nilai dalam grup kuantisasi yang sama berbagi parameter untuk memetakan bilangan real ke kode integer.

Skala menghubungkan rentang dengan resolusi

Pertimbangkan kuantisasi uniform simetris ke integer bertanda dengan kode positif maksimum Q. Bentuk sederhananya adalah

s = amax / Q
q = clamp(round(x / s), -Q, Q)
x_hat = s * q

amax adalah magnitudo yang dipilih untuk menentukan rentang representasi, s adalah skala, q adalah kode integer yang disimpan, dan x_hat adalah nilai hasil rekonstruksi.

Jika amax naik sementara Q tetap, s ikut naik. Kode integer yang bersebelahan kemudian mewakili nilai real dengan jarak lebih besar. Dengan jumlah kode yang tetap, rentang lebar dan resolusi halus tidak dapat diperoleh sekaligus tanpa mengubah skema kuantisasi.

Endpoint persisnya berbeda antarformat integer dan implementasi. Kuantisasi asimetris juga menambahkan zero point, sementara skema tertentu menentukan skala dari statistik selain nilai maksimum yang diamati. Untuk kuantisasi uniform, hubungan antara rentang representasi dan jarak antarkode tetap menjadi mekanisme yang relevan.

Satu outlier dapat memengaruhi nilai yang jauh lebih kecil

Anggap satu grup berisi nilai yang terkonsentrasi dekat nol dan satu aktivasi dengan magnitudo jauh lebih besar. Pada skala berbasis nilai maksimum, aktivasi besar itu dapat menentukan amax. Nilai yang lebih kecil kemudian dibulatkan pada grid yang lebih kasar untuk seluruh grup.

Untuk rentang bertanda sederhana dengan Q = 127, bandingkan dua skala:

amax = 1   -> s = 1 / 127
amax = 16  -> s = 16 / 127

Grup kedua memiliki jarak nilai real antarkode integer yang enam belas kali lebih besar. Ini tidak berarti setiap nilai hasil rekonstruksi memiliki error enam belas kali lebih besar. Error pembulatan bergantung pada posisi setiap nilai terhadap grid, sedangkan clipping menambahkan sumber error lain ketika nilai melewati rentang representasi. Contoh ini hanya mengisolasi perubahan jarak grid.

Cakupan efek tersebut ditentukan oleh pemakaian parameter bersama. Outlier pada satu grup yang dikuantisasi secara independen tidak secara langsung menentukan skala grup lain.

Granularitas grup mengubah nilai yang saling terikat

Kuantisasi per-tensor dapat memakai satu skala untuk seluruh tensor. Skema per-channel memberikan skala independen sepanjang dimensi channel yang dipilih. Skema grouped membagi suatu dimensi menjadi blok yang lebih kecil dan memberikan parameter untuk setiap blok.

Granularitas yang lebih halus dapat mengisolasi outlier sehingga lebih sedikit nilai lain berbagi skalanya. Konsekuensinya, metadata kuantisasi bertambah dan tata letak kernel, akses memori, serta execution path yang didukung dapat berubah. Dampak end-to-end bergantung pada runtime dan hardware, bukan hanya aritmetika skala.

Granularitas juga memengaruhi interpretasi evaluasi. Dua implementasi yang sama-sama disebut INT8 dapat memakai aturan grouping berbeda dan menghasilkan tensor rekonstruksi berbeda dari nilai floating-point yang sama. Bit width saja belum mendefinisikan quantizer.

Clipping menukar rentang dengan resolusi

Quantizer tidak harus mempertahankan magnitudo terbesar yang diamati. Rentang yang lebih kecil dapat dipilih dan nilai di luarnya di-clipping. Pilihan ini menurunkan s, sehingga level rekonstruksi di dalam rentang menjadi lebih rapat, sementara nilai di luar batas mengalami saturasi.

Dengan demikian, pilihan rentang memindahkan lokasi error, bukan menghilangkannya. Rentang berbasis nilai maksimum menghindari clipping pada nilai yang dipakai untuk menetapkan rentang, tetapi dapat mengalokasikan banyak ruang kode untuk nilai ekstrem yang jarang. Rentang yang di-clipping dapat merepresentasikan wilayah tengah yang padat dengan lebih halus, dengan konsekuensi error saturasi pada bagian ekor.

Metode kalibrasi dapat memakai kriteria berbeda untuk memilih batas ini. Aturan kalibrasi merupakan bagian dari definisi kuantisasi dan tidak tepat diperlakukan sebagai detail preprocessing yang bebas dipertukarkan. Data yang dipilih juga berpengaruh karena data tersebut menentukan rentang aktivasi yang terlihat oleh prosedur kalibrasi.

Skala aktivasi statis dan dinamis membawa asumsi berbeda

Pada kuantisasi aktivasi statis, parameter skala ditetapkan sebelum operasi inferensi berdasarkan data kalibrasi atau prosedur tetap lain. Input berikutnya dengan distribusi aktivasi yang melewati rentang terpilih dapat mengalami clipping, sesuai definisi quantizer.

Kuantisasi dinamis dapat menghitung parameter dari nilai yang tersedia saat runtime. Rentang representasi dapat menyesuaikan tensor atau grup saat itu, tetapi perhitungan skala menjadi bagian dari execution path. Pendekatan ini juga tidak menghapus masalah skala bersama di dalam grup: outlier pada grup saat ini tetap dapat memperlebar skalanya.

Perbedaan tersebut relevan ketika menelusuri selisih output. Model dapat memakai lebar integer dan tata letak grouping yang sama tetapi berperilaku berbeda karena satu runtime menetapkan skala aktivasi secara tetap sedangkan runtime lain menghitungnya pada setiap eksekusi.

Outlier bobot dan outlier aktivasi merupakan kasus berbeda

Bobot bersifat tetap untuk checkpoint tertentu selama inferensi, sehingga parameter kuantisasinya umumnya dapat disiapkan dari tensor yang sudah diketahui. Aktivasi bergantung pada input dan state internal model. Rentangnya karena itu dapat berubah antar-request dan antarposisi sequence.

Teknik yang menangani rentang bobot dengan baik tidak otomatis menangani rentang aktivasi. Weight-only quantization dapat mempertahankan aktivasi pada format dengan presisi lebih tinggi, sehingga kuantisasi aktivasi tidak dilakukan walaupun penyimpanan dan komputasi bobot berubah. Skema weight-and-activation memiliki keputusan tambahan terkait rentang dan kalibrasi.

Batas ini relevan saat membandingkan format model. Label pada checkpoint terkuantisasi perlu diuraikan menjadi bagian apa yang dikuantisasi, bit width yang dipakai, aturan grouping, serta aturan skala sebelum perilaku numeriknya dibandingkan.

Metadata skala merupakan bagian dari kontrak numerik

Tensor integer saja tidak cukup untuk merekonstruksi nilai terkuantisasi. Skala, zero point jika ada, tata letak grouping, konvensi axis, aturan clipping, dan perilaku rounding menentukan pemetaan kembali ke nilai real.

Bagi sistem serving, bobot terkuantisasi tidak dapat dipindahkan antar-kernel hanya karena shape integer yang dikemas terlihat sama. Kernel harus menafsirkan metadata dengan konvensi kuantisasi yang sama seperti saat nilai terkemas dibuat.

Outlier aktivasi memperlihatkan kontrak ini dengan jelas: dampaknya dibatasi bukan oleh nama tensor atau bit width nominal, melainkan oleh himpunan nilai yang berbagi parameter kuantisasi. Mengubah batas tersebut berarti mengubah nilai mana yang memakai rentang kode terbatas yang sama.