compare FP32, FP16 ve BF16 Farkı
FP32 her sayı için 32 bit (4 byte) kullanır. FP16 bunu 16 bite indirir: 1 işaret, 5 üs, 10 kesir biti. BF16 ise Google Brain tarafından geliştirilen ve FP32 ile aynı üs aralığına sahip 16-bit format: 1 işaret, 8 üs, 7 kesir biti. BF16'nın geniş dinamik aralığı, eğitim sırasında sayısal taşma (overflow) ve alt-taşma (underflow) sorunlarını azaltır; bu nedenle LLM eğitiminde FP16'dan daha yaygın tercih edilir.
Kullanım Senaryoları
model_training Model Eğitimi
Mixed precision (karışık hassasiyet) eğitimde ağırlıklar FP32, hesaplamalar BF16 tutulur.
bolt Çıkarım (Inference)
FP16/BF16 ile model çıkarımı FP32'ye kıyasla 2x daha hızlı ve yarı bellek kullanır.
compress Quantization
FP16/BF16'dan INT8 veya INT4'e daha küçük hassasiyete indirme; Ollama ve llama.cpp'de yaygın.
Floating Point Formatları Karşılaştırması
- check_circle FP32 (Float32) — Tam Hassasiyet: 32 bit: 1 işaret, 8 üs, 23 mantis. Dinamik aralık: ~1.2×10⁻³⁸ ile 3.4×10³⁸. Model eğitiminin geleneksel standardı; nümerik kararlılık güçlü. Bellek ve bant genişliği maliyeti yüksek.
- check_circle FP16 (Float16) — Yarı Hassasiyet: 16 bit: 1 işaret, 5 üs, 10 mantis. FP32'ye kıyasla 2× bellek tasarrufu, 2-8× hız artışı (Tensor Core'larla). Dinamik aralık dar: maksimum ~65504 — büyük gradyanlar taşar (overflow). Mixed precision eğitiminde optimizer state FP32'de tutulur; ileri/geri geçiş FP16'da yapılır.
- check_circle BF16 (BFloat16) — Beyin Kayan Nokta: 16 bit: 1 işaret, 8 üs, 7 mantis. FP32 ile aynı üs aralığı → taşma riski yok; ancak FP16'dan daha az hassasiyet. Google TPU'lar ve NVIDIA Ampere/Hopper GPU'lar için optimize. LLM eğitiminde FP16'nın yerini hızla alıyor; PyTorch 2.0'dan itibaren varsayılan mixed precision formatı.
- check_circle FP8 ve INT8 — Çıkarım Optimizasyonu: FP8: NVIDIA H100'de desteklenen format; eğitim ve çıkarım için. INT8 kuantizasyon: ağırlıklar 8 bite indirilir; hız 2-4× artar, minimal doğruluk kaybı. INT4/NF4: QLoRA ve GGUF modellerinde kullanılan 4-bit formatlar; tüketici GPU'larında büyük modelleri çalıştırmayı mümkün kılar.
Mixed Precision Eğitimi: Pratikte FP16 Kullanımı
Mixed precision (karışık hassasiyet): FP32 ve FP16'yı stratejik olarak birleştirir. NVIDIA AMP (Automatic Mixed Precision): tek satır kod ile aktifleştirilir. Çalışma prensibi: model ağırlıkları FP32 ana kopya olarak tutulur; ileri geçiş ve gradyan hesaplama FP16'da yapılır; optimizer güncellemesi FP32 kopyasına uygulanır. GradScaler: FP16'da underflow/overflow sorunlarını önlemek için kayıp (loss) bir ölçek faktörüyle çarpılır; gradyanlar ölçekten geri dönüştürülerek güncelleme yapılır. Pratik kazanımlar: GPT-3 boyutundaki modeller FP16 olmadan eğitilemezdi; BF16 ile modern LLM eğitimi hem hızlı hem kararlı hale geldi.
quiz Sık Sorulan Sorular
- check_circle Hangi GPU'lar BF16 destekler?: NVIDIA Ampere (A100, RTX 3090+) ve Google TPU'lar donanımsal BF16 desteğiyle gelir.
- check_circle BF16 mı yoksa FP16 mı seçmeliyim?: Modern GPU ve TPU'larda BF16 genellikle daha iyi tercihdir. Eski donanım veya Apple MPS için FP16 tercih edilebilir.
- check_circle Float16 nedir?: 16 bitlik IEEE 754 kayan nokta sayı formatıdır. Float32'ye kıyasla yarı bellek kullanır ve GPU'larda çok daha hızlı hesaplanır. Derin öğrenme eğitim ve çıkarımında bellek ile hızı optimize etmek için kullanılır.
- check_circle FP16 ve BF16 arasındaki fark nedir?: FP16: daha hassas mantis (10 bit) ama dar üs aralığı — overflow riski. BF16: FP32 ile aynı üs aralığı (8 bit) ama daha az hassasiyet — taşma yok. LLM eğitiminde BF16 tercih edilir; eski GPU'larda FP16 kullanılır.
- check_circle Mixed precision eğitim ne zaman kullanılır?: GPU belleği kısıtlı olduğunda veya eğitim hızını artırmak istediğinizde. Neredeyse her modern eğitimde varsayılan olarak etkinleştirilmeli. PyTorch'ta: torch.cuda.amp.autocast() + GradScaler ile kolay entegrasyon.