Transformers documentation
Empat dari Enam
Empat dari Enam
Four Over Six adalah pustaka untuk melakukan kuantisasi FP4 yang cepat dan akurat, khususnya dengan format NVFP4 pada GPU NVIDIA Blackwell. Metode kami secara adaptif menskalakan blok NVFP4 menjadi 4 atau 6 untuk mengurangi error kuantisasi pada nilai-nilai yang mendekati maksimum di setiap blok, seperti yang dijelaskan dalam preprint kami.

Implementasi kami berjalan paling efisien pada GPU NVIDIA Blackwell. Namun, Anda tetap dapat menjalankan Four Over Six pada perangkat keras yang lebih lama, bahkan pada CPU, tanpa perlu mengubah kode, karena dalam kasus-kasus tersebut framework kami secara otomatis beralih ke implementasi yang melakukan simulasi dengan perkalian matriks FP32.
Untuk mengkuantisasi model ke NVFP4 dengan 4/6, Anda dapat memuat model Anda sebagai berikut:
from transformers import AutoModelForCausalLM, FourOverSixConfig
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen3-8B",
device_map="auto",
quantization_config=FourOverSixConfig(),
)Kami mendukung berbagai opsi kuantisasi yang umum digunakan selama kuantisasi NVFP4, termasuk transformasi Hadamard acak, penskalaan blok 2D, input yang ditranspos, dan pembulatan stokastik, sebagaimana dijelaskan dalam preprint kami.
Opsi-opsi ini dapat digunakan dengan mengatur opsi yang sesuai pada FourOverSixConfig yang diteruskan di atas.
Lapisan individual dapat diberikan opsi kuantisasi khusus dengan mengatur module_config_overrides, atau dikecualikan dari kuantisasi dengan mengatur modules_to_not_convert, seperti yang ditunjukkan di bawah ini.
Pelatihan
Lapisan linear terkuantisasi kami berisi implementasi jalur mundur, sehingga banyak model dapat dilatih lebih lanjut dengan sedikit modifikasi.
Pastikan untuk mengatur keep_master_weights ke True, dan mengecualikan lapisan dari kuantisasi sesuai kebutuhan (sering kali penting untuk mempertahankan beberapa lapisan terakhir jaringan dalam presisi tinggi):
from transformers import AutoModelForCausalLM, FourOverSixConfig
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen3-8B",
device_map="auto",
quantization_config=FourOverSixConfig(
keep_master_weights=True,
modules_to_not_convert=[
"lm_head",
"model.layers.34.self_attn.q_proj",
"model.layers.34.self_attn.k_proj",
"model.layers.34.self_attn.v_proj",
# Add more layers here, e.g. self_attn.o_proj, MLP layers
],
),
)