Pada usia model bahasa yang semakin besar dan rangkaian saraf kompleks, mengoptimumkan kecekapan model telah menjadi yang paling utama. Kuantisasi berat menonjol sebagai teknik penting untuk mengurangkan saiz model dan meningkatkan kelajuan kesimpulan tanpa kemerosotan prestasi yang signifikan. Panduan ini menyediakan pendekatan tangan untuk melaksanakan dan memahami kuantisasi berat badan, menggunakan GPT-2 sebagai contoh praktikal kami.
Objektif Pembelajaran
- memahami asas kuantisasi berat badan dan kepentingannya dalam pengoptimuman model.
- Ketahui perbezaan antara teknik kuantisasi absmax dan sifar.
- Melaksanakan kaedah kuantisasi berat pada GPT-2 menggunakan pytorch.
- menganalisis kesan kuantisasi pada kecekapan memori, kelajuan kesimpulan, dan ketepatan.
- menggambarkan pengagihan berat kuantitatif menggunakan histogram untuk wawasan.
- Menilai prestasi model pasca kuantitatif melalui penjanaan teks dan metrik kebingungan.
- meneroka kelebihan kuantisasi untuk menggunakan model pada peranti yang terkawal sumber.
Artikel ini diterbitkan sebagai sebahagian daripada Blogathon Sains Data
Jadual Kandungan Memahami Fundamental Kuantisasi Berat Pelaksanaan Praktikal
Proses kuantisasi: Berat dan Model
Soalan
- Memahami asas kuantisasi berat
- Kuantisasi berat menukarkan berat terapung-ketepatan tinggi (biasanya 32-bit) kepada perwakilan ketepatan yang lebih rendah (bilangan integer 8-bit). Proses ini dengan ketara mengurangkan saiz model dan penggunaan memori semasa cuba mengekalkan prestasi model. Cabaran utama terletak pada mengekalkan ketepatan model semasa mengurangkan ketepatan berangka.
- Kenapa kuantisasi?
-
- Kecekapan memori:
Mengurangkan ketepatan dari 32-bit ke 8-bit secara teorinya dapat mengurangkan saiz model sebanyak 75%-
- kesimpulan yang lebih cepat:
operasi integer biasanya lebih cepat daripada operasi terapung -
Penggunaan kuasa yang lebih rendah:
jalur lebar memori yang dikurangkan dan pengiraan yang lebih mudah membawa kepada penjimatan tenaga
fleksibiliti penyebaran:
model yang lebih kecil boleh digunakan pada peranti yang terkawal sumber
- Pelaksanaan Praktikal
mari kita menyelam untuk melaksanakan dua kaedah kuantisasi popular: kuantisasi absmax dan kuantisasi sifar.
- menyediakan persekitaran
Pertama, kami akan menubuhkan persekitaran pembangunan kami dengan kebergantungan yang diperlukan:
-
Di bawah kita akan melihat kaedah kuantisasi:
kuantisasi absmax
Kaedah kuantisasi Absmax skala berat berdasarkan nilai mutlak maksimum dalam tensor:
import seaborn as sns
import torch
import numpy as np
from transformers import AutoModelForCausalLM, AutoTokenizer
from copy import deepcopy
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import seaborn as sns
Salin selepas log masuk
Salin selepas log masuk
Kaedah ini berfungsi dengan:
- Mencari nilai mutlak maksimum dalam tensor berat
- mengira faktor skala agar sesuai dengan nilai dalam julat int8
- penskalaan dan bulat nilai
- Menyediakan kedua -dua versi kuantitatif dan dequanized
Kelebihan Utama:
- Pelaksanaan mudah
- pemeliharaan nilai besar yang baik
- kuantisasi simetri sekitar sifar
Kuantisasi Zero-titik
kuantisasi sifar-titik menambah offset untuk mengendalikan pengagihan asimetrik yang lebih baik:
# Define quantization functions
def absmax_quantize(X):
scale = 100 / torch.max(torch.abs(X)) # Adjusted scale
X_quant = (scale * X).round()
X_dequant = X_quant / scale
return X_quant.to(torch.int8), X_dequant
Salin selepas log masuk
Salin selepas log masuk
output:
def zeropoint_quantize(X):
x_range = torch.max(X) - torch.min(X)
x_range = 1 if x_range == 0 else x_range
scale = 200 / x_range
zeropoint = (-scale * torch.min(X) - 128).round()
X_quant = torch.clip((X * scale + zeropoint).round(), -128, 127)
X_dequant = (X_quant - zeropoint) / scale
return X_quant.to(torch.int8), X_dequant
Salin selepas log masuk
Kaedah ini:
- mengira pelbagai nilai
- Menentukan parameter skala dan sifar titik
- menggunakan skala dan beralih
- nilai klip untuk memastikan batas int8
Manfaat:
- pengendalian pengedaran asimetrik yang lebih baik
- Perwakilan yang lebih baik daripada nilai-nilai berhampiran-sifar
- sering menghasilkan ketepatan keseluruhan yang lebih baik
Memuat dan menyediakan model
mari kita gunakan kaedah kuantisasi ini kepada model sebenar. Kami akan menggunakan GPT-2 sebagai contoh kami:
Using device: cuda
Salin selepas log masuk
output:
Proses Kuantisasi: Berat dan Model
menyelam ke dalam penggunaan teknik kuantisasi kepada kedua -dua berat individu dan keseluruhan model. Langkah ini memastikan mengurangkan penggunaan memori dan kecekapan pengiraan semasa mengekalkan prestasi.
# Load model and tokenizer
model_id = 'gpt2'
model = AutoModelForCausalLM.from_pretrained(model_id).to(device)
tokenizer = AutoTokenizer.from_pretrained(model_id)
# Print model size
print(f"Model size: {model.get_memory_footprint():,} bytes")
Salin selepas log masuk
Menggambarkan pengagihan berat kuantitatif
memvisualisasikan dan membandingkan pengagihan berat model asal, absmax kuantitatif, dan sifar-titik kuantitatif. Histogram ini memberikan gambaran tentang bagaimana kuantisasi memberi kesan kepada nilai berat badan dan pengedaran keseluruhannya.
# Quantize and visualize weights
weights_abs_quant, _ = absmax_quantize(weights)
weights_zp_quant, _ = zeropoint_quantize(weights)
# Quantize the entire model
model_abs = deepcopy(model)
model_zp = deepcopy(model)
for param in model_abs.parameters():
_, dequantized = absmax_quantize(param.data)
param.data = dequantized
for param in model_zp.parameters():
_, dequantized = zeropoint_quantize(param.data)
param.data = dequantized
Salin selepas log masuk
Kod ini termasuk fungsi visualisasi yang komprehensif:
Grafik memaparkan berat asal vs berat absmax -
Grafik memaparkan berat asal vs berat sifar-titik -
output:
Penilaian Prestasi
Menilai kesan kuantisasi pada prestasi model adalah penting untuk memastikan kecekapan dan ketepatan. Mari ukur seberapa baik model kuantitatif dilakukan berbanding dengan asal.
Generasi Teks
meneroka bagaimana model kuantitatif menghasilkan teks dan membandingkan kualiti output ke ramalan model asal.
import seaborn as sns
import torch
import numpy as np
from transformers import AutoModelForCausalLM, AutoTokenizer
from copy import deepcopy
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import seaborn as sns
Salin selepas log masuk
Salin selepas log masuk
Kod ini membandingkan output generasi teks dari tiga model: model kuantitatif asal, "absmax", dan model kuantitatif "zeropoint". Ia menggunakan fungsi Generate_Text untuk menghasilkan teks berdasarkan prompt input, memohon pensampelan dengan nilai top-K sebanyak 30. Akhirnya, ia mencetak hasil dari ketiga-tiga model.
output:
Kod mengira kebingungan (ukuran seberapa baik model meramalkan teks) untuk input yang diberikan menggunakan tiga model: model asal, "Absmax" dan "Zeropoint" yang asal. Kebingungan yang lebih rendah menunjukkan prestasi yang lebih baik. Ia mencetak skor kebingungan untuk perbandingan. # Define quantization functions
def absmax_quantize(X):
scale = 100 / torch.max(torch.abs(X)) # Adjusted scale
X_quant = (scale * X).round()
X_dequant = X_quant / scale
return X_quant.to(torch.int8), X_dequant
Salin selepas log masuk
Salin selepas log masuk
output:
anda boleh mengakses pautan colab di sini.
kelebihan kuantisasi berat
di bawah kita akan melihat kelebihan kuantisasi berat:
Kecekapan memori: Kuantisasi mengurangkan saiz model sehingga 75%, membolehkan pemuatan dan kesimpulan yang lebih cepat. -
Kesimpulan yang lebih cepat:
Operasi integer lebih cepat daripada operasi terapung, yang membawa kepada pelaksanaan model yang lebih cepat. -
Penggunaan kuasa yang lebih rendah:
jalur lebar memori yang dikurangkan dan pengiraan mudah membawa kepada penjimatan tenaga, penting untuk peranti kelebihan dan penggunaan mudah alih. -
fleksibiliti penyebaran:
model yang lebih kecil lebih mudah digunakan pada perkakasan dengan sumber yang terhad (mis., Telefon bimbit, peranti tertanam). -
degradasi prestasi minimum:
Dengan strategi kuantisasi yang betul, model dapat mengekalkan kebanyakan ketepatannya walaupun ketepatan yang dikurangkan. -
Kesimpulan
Kuantisasi berat memainkan peranan penting dalam meningkatkan kecekapan model bahasa yang besar, terutamanya apabila ia menyebarkannya pada peranti yang terkawal sumber. Dengan menukar berat ketepatan tinggi ke perwakilan integer ketepatan yang lebih rendah, kita dapat mengurangkan penggunaan memori dengan ketara, meningkatkan kelajuan kesimpulan, dan penggunaan kuasa yang lebih rendah, semuanya tanpa menjejaskan prestasi model.
Dalam panduan ini, kami meneroka dua teknik kuantisasi yang popular-mengaplikasikan kuantisasi dan kuantisasi sifar-menggunakan GPT-2 sebagai contoh praktikal. Kedua -dua teknik ini menunjukkan keupayaan untuk mengurangkan jejak memori model dan keperluan pengiraan sambil mengekalkan tahap ketepatan yang tinggi dalam tugas penjanaan teks. Walau bagaimanapun, kaedah kuantisasi sifar, dengan pendekatan asimetriknya, secara amnya menghasilkan pemeliharaan ketepatan model yang lebih baik, terutamanya untuk pengagihan berat badan bukan simetri.
Takeaways Key
- Kuantisasi Absmax lebih mudah dan berfungsi dengan baik untuk pengagihan berat simetrik, walaupun ia mungkin tidak menangkap pengagihan asimetrik sebagai berkesan sebagai kuantisasi sifar.
- Kuantisasi Zero-Point menawarkan pendekatan yang lebih fleksibel dengan memperkenalkan offset untuk mengendalikan pengagihan asimetrik, sering membawa kepada ketepatan yang lebih baik dan perwakilan berat yang lebih efisien.
- kuantisasi adalah penting untuk menggunakan model besar dalam aplikasi masa nyata di mana sumber pengiraan terhad.
- Walaupun proses kuantisasi mengurangkan ketepatan, ada kemungkinan untuk mengekalkan prestasi model dekat dengan asal dengan strategi penalaan dan kuantisasi yang betul.
- Teknik visualisasi seperti histogram dapat memberikan gambaran tentang bagaimana kuantisasi mempengaruhi berat model dan pengagihan nilai dalam tensor.
Soalan Lazim
Q1. Apakah kuantisasi berat? a. Kuantisasi berat mengurangkan ketepatan berat model, biasanya dari nilai-nilai terapung 32-bit kepada integer ketepatan yang lebih rendah (mis., Integer 8-bit), untuk menjimatkan ingatan dan pengiraan sambil mengekalkan prestasi. Bagaimanakah kuantisasi berat mempengaruhi prestasi model?
a. Walaupun kuantisasi mengurangkan jejak memori model dan masa kesimpulan, ia boleh menyebabkan sedikit kemerosotan dalam ketepatan. Walau bagaimanapun, jika dilakukan dengan betul, kerugian ketepatan adalah minimum. Q3. Bolehkah kuantisasi digunakan untuk mana -mana model?
a. Ya, kuantisasi boleh digunakan untuk mana -mana model rangkaian saraf, termasuk model bahasa, model penglihatan, dan arkitek pembelajaran mendalam yang lain. Q4. Bagaimanakah saya melaksanakan kuantisasi berat dalam model saya?
a. Anda boleh melaksanakan kuantisasi dengan membuat fungsi untuk skala dan pusingan berat model, kemudian memohon mereka merentasi semua parameter. Perpustakaan seperti Pytorch menyediakan sokongan asli untuk beberapa teknik kuantisasi, walaupun pelaksanaan tersuai, seperti yang ditunjukkan dalam panduan, menawarkan fleksibiliti. Q5. Adakah kuantisasi berfungsi untuk semua jenis model?
a. Kuantisasi berat adalah paling berkesan untuk model besar di mana mengurangkan jejak memori dan pengiraan adalah kritikal. Walau bagaimanapun, model yang sangat kecil mungkin tidak memberi manfaat daripada kuantisasi.
Media yang ditunjukkan dalam artikel ini tidak dimiliki oleh Analytics Vidhya dan digunakan pada budi bicara penulis.
Atas ialah kandungan terperinci Kuantisasi Berat Rangkaian Neural. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!