Transformers documentation
İnce tanimli FP8
İnce tanimli FP8
İnce tanimli FP8 kuantizasyonu, ağırlıkları ve aktivasyonları fp8'e kuantize eder.
- Ağırlıklar, her 2B blok için 8-bite indirgenir (
weight_block_size=(128, 128)). - Aktivasyonlar, her token için grup başına 8-bite kuantize edilir. Grup değeri, giriş kanalındaki ağırlıklarla eşleşir (varsayılan olarak 128).
FP8 kuantizasyonu, DeepSeek-V3 ve DeepSeek-R1 için desteği mümkün kılar.

Compute Capability>=9 (H100) olan bir GPU'ya ve GPU'nuzun CUDA sürümüyle uyumlu bir PyTorch sürümüne ihtiyacınız vardır.
Accelerate'ı yükleyin ve PyTorch'un en son sürümüne yükseltin.
pip install --upgrade accelerate torch
Bir FineGrainedFP8Config sınıfı oluşturun ve onu from_pretrained() fonksiyonuna geçirerek modelin kuantizasyonunu yapın. Ağırlıklar, saklandıkları gerçek veri türünden bağımsız olarak varsayılan olarak tam hassasiyette (torch.float32) yüklenir. En bellek-verimli veri türünü otomatik olarak yüklemek için, ağırlıkları modelin config.json dosyasında tanımlanan veri türünde yüklemek üzere dtype="auto" parametresini ayarlayın.
from transformers import FineGrainedFP8Config, AutoModelForCausalLM, AutoTokenizer
model_name = "meta-llama/Meta-Llama-3-8B"
quantization_config = FineGrainedFP8Config()
quantized_model = AutoModelForCausalLM.from_pretrained(model_name, dtype="auto", device_map="auto", quantization_config=quantization_config)
tokenizer = AutoTokenizer.from_pretrained(model_name)
input_text = "What are we having for dinner?"
input_ids = tokenizer(input_text, return_tensors="pt").to(quantized_model.device.type)
output = quantized_model.generate(**input_ids, max_new_tokens=10)
print(tokenizer.decode(output[0], skip_special_tokens=True))Kantize edilmiş modeli kaydetmek için save_pretrained() kullanın ve from_pretrained() ile yeniden yükleyin.
quant_path = "/path/to/save/quantized/model"
quantized_model.save_pretrained(quant_path)
model = AutoModelForCausalLM.from_pretrained(quant_path, device_map="auto")DeepGEMM hızlı yolu
Hopper (SM90+) ve Blackwell (SM100+) GPU'larında, weight_block_size=(128, 128) ve activation_scheme="dynamic" ayarları yapıldığında her FP8 lineer katman otomatik olarak kernels-community/deep-gemm deposundaki DeepGEMM çekirdeklerine yönlendirilir. DeepGEMM, Triton yedek çözümünden 3-6 kat daha hızlıdır. Bunu etkinleştirmek için kernels paketini yükleyin veya güncelleyin.
pip install -U kernels
DeepGEMM, çekirdeklerini sistemin nvcc ile JIT derler, bu nedenle tam bir CUDA aracıkitsinin kurulu olması gerekir. Yalnızca çalışma zamanı kurulumu (nvcc olmadan CUDA kütüphaneleri) çalışmaz. Minimum aracıkitsi sürümü donanıma bağlıdır: Hopper (SM90) için 12.3 veya üzeri, Blackwell (SM100) için 12.9 veya üzeri.
Transformers, araç setini CUDA_HOME, ardından CUDA_PATH, ardından PATH üzerindeki nvcc ve en son /usr/local/cuda konumunu kontrol ederek bulur. nvcc bulunamıyorsa CUDA_HOME değerini araç setinin kök dizinine ayarlayın.
Çekirdek yüklenemezse (kernels eksik, GPU desteklenmiyor, CUDA araç seti yok veya nvcc gerekli sürümden eski), Transformers bir kez uyarı kaydeder ve Triton finegrained-fp8 çekirdeğine geri döner. Statik aktivasyon kuantizasyonu her zaman Triton yolunda kalır.
DeepGEMM kullanılabilir olsa bile Triton yedeğini zorlamak için TRANSFORMERS_DISABLE_DEEPGEMM_LINEAR=1 değerini ayarlayın. Bu, yalnızca FP8 lineer dağıtımını etkiler ve "deepgemm" uzman arka ucuna dokunmaz; bu arka uç set_experts_implementation() ile değiştirilir.
MoE uzmanları için DeepGEMM yolu isteğe bağlıdır. Uzman matmullarını DeepGEMM üzerinden yönlendirmek için yükleme sırasında experts_implementation="deepgemm" (veya Blackwell'de "deepgemm_megamoe") parametresini iletin. Tüm seçenekler için Uzman arka uçları kılavuzuna bakın.
UE8M0 ölçek biçimi
DeepSeek V4 tarzı checkpoint'ler, FP8 ağırlık ölçeklerini float32 yerine paketlenmiş float8_e8m0fnu biçiminde saklar. Bu checkpoint'ler önceden kuantize edilmiştir ve kuantizasyon yapılandırmalarında scale_fmt="ue8m0" değerini ayarlar. Hem DeepGEMM hem de Triton çekirdekleri UE8M0 ölçeklerini okuduğu için bu checkpoint'ler her iki yolda da çalışır.
Blackwell (SM100+) üzerinde DeepGEMM uzman çekirdekleri yalnızca UE8M0 ölçeklerini destekler. Düz float32 ölçeklere (scale_fmt="float") sahip bir checkpoint ValueError hatası oluşturur. Bunun yerine scale_fmt="ue8m0" checkpoint'i kullanın veya uzmanları, float32 ölçeklerini doğrudan destekleyen grouped_mm veya batched_mm ile çalıştırın. Hopper (SM90+), dönüşüm gerektirmeden DeepGEMM yolunda float32 ölçeklerini destekler. Uzman backend seçenekleri için Uzman backend'leri kılavuzuna bakın.