Float16 (FP16) ve BFloat16 (BF16), derin öğrenme modellerinde ağırlıkları ve aktivasyonları depolamak için kullanılan 16-bit kayan noktalı sayı formatlarıdır.

Float16 (FP16) ve BFloat16 (BF16), derin öğrenme modellerinde ağırlıkları ve aktivasyonları depolamak için kullanılan 16-bit kayan noktalı sayı formatlarıdır. 32-bit (FP32) formata kıyasla bellek tüketimini ve hesaplama süresini yarıya indirirken makul doğruluk sağlar.

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.