Transformers documentation
BitNet
BitNet
BitNet menggantikan lapisan linear tradisional dalam Multi-Head Attention dan jaringan feed-forward dengan lapisan BitLinear khusus. Lapisan BitLinear melakukan kuantisasi bobot menggunakan presisi ternary (dengan nilai -1, 0, dan 1) dan mengkuantisasi aktivasi ke presisi 8-bit.
Model BitNet tidak dapat dikuantisasi secara langsung. Model ini harus dikuantisasi selama pra-pelatihan atau penyesuaian halus karena merupakan teknik Quantization-Aware Training (QAT). Selama pelatihan, bobot dikuantisasi ke nilai ternary dengan kuantisasi per tensor yang simetris.
- Hitung rata-rata dari nilai absolut matriks bobot dan gunakan sebagai skala.
- Bagi bobot dengan skala, bulatkan nilainya, batasi nilainya antara -1 dan 1, lalu skala ulang untuk melanjutkan dalam presisi penuh.
- Aktivasi dikuantisasi ke lebar bit yang ditentukan (8-bit) menggunakan kuantisasi absmax (kuantisasi simetris per kanal). Proses ini melibatkan penskalaan aktivasi ke dalam rentang [−128,127].
Lihat PR ini untuk melakukan pretraining atau fine-tuning model 1.58-bit dengan Nanotron. Untuk fine-tuning, konversikan model dari format Hugging Face ke format Nanotron. Temukan langkah konversi di PR ini.
Muat model BitNet terkuantisasi dengan from_pretrained().
from transformers import AutoModelForCausalLM
path = "/path/to/model"
model = AutoModelForCausalLM.from_pretrained(path, device_map="auto")Kernels
@torch.compile digunakan untuk mengurai bobot dan melakukan forward pass. Implementasinya sangat sederhana dan memberikan peningkatan kecepatan yang signifikan. Kernel yang dioptimalkan lebih lanjut akan diintegrasikan dalam versi-versi mendatang.
Sumber daya
Baca Fine-tuning LLMs to 1.58bit: extreme quantization made easy untuk mempelajari lebih lanjut tentang cara model BitNet dilatih dan dihaluskan.
Update on GitHub