Rumah >Peranti teknologi >AI >Kuantisasi Berat Rangkaian Neural
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.
Jadual Kandungan Memahami Fundamental Kuantisasi Berat Pelaksanaan Praktikal
fleksibiliti penyebaran:
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
Kaedah ini berfungsi dengan:
Kelebihan Utama:
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
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
Kaedah ini:
Manfaat:
mari kita gunakan kaedah kuantisasi ini kepada model sebenar. Kami akan menggunakan GPT-2 sebagai contoh kami:
Using device: cuda
output:
# 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")Menggambarkan pengagihan berat kuantitatif
# 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 = dequantizedKod ini termasuk fungsi visualisasi yang komprehensif:
output:
Penilaian Prestasi
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
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:
# 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
output:
anda boleh mengakses pautan colab di sini.
di bawah kita akan melihat kelebihan kuantisasi berat:
Kecekapan memori:
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. 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!