Bellek ve hesaplama verimliliği için derin öğrenmede kullanılan 16-bit kayan nokta sayı biçimi; karma duyarlık eğitiminin temelidir.

Float16 (FP16 veya yarı duyarlıklı kayan nokta), IEEE 754 standardında tanımlanan ve 16 bit (1 işaret + 5 üs + 10 mantis) kullanarak gerçek sayıları temsil eden sayı biçimidir. Standart Float32'ye (32 bit, tekli duyarlık) kıyasla bellek kullanımını yarıya indirir ve modern GPU'ların tensör çekirdeği (tensor core) donanımıyla çok daha yüksek hesaplama verimi sağlar. Derin öğrenmede Float16'nın önemi büyüktür. GPU belleği (VRAM) model eğitimindeki en sık karşılaşılan darboğazlardan biridir; modelin ağırlıklarını ve aktivasyonlarını FP16'da tutmak aynı GPU'da iki kat daha büyük modeller ya da iki kat daha büyük batch boyutları çalıştırmayı mümkün kılar. NVIDIA'nın 2018'de tanıttığı Tensor Core teknolojisi, FP16 matris çarpımlarını FP32 karşısında 4-8× hızlandırmaktadır. Ancak FP16'nın sayı aralığı (yaklaşık ±65504) ve duyarlığı FP32'den çok daha kısıtlıdır. Bu nedenle eğitimde "karma duyarlık" (mixed precision) yaklaşımı tercih edilir: ileri geçiş (forward pass) ve geri yayılım (backward pass) FP16'da, ağırlık güncellemeleri ve kayıp ölçekleme (loss scaling) ise FP32'de tutulur. PyTorch'ta torch.cuda.amp.autocast() ve TensorFlow'da tf.keras.mixed_precision API'si bu işlemi otomatik yönetir. BF16 (Brain Float16), Google tarafından geliştirilen alternatif bir 16-bit formattır: 8 üs biti kullanarak FP32 ile aynı sayı aralığını korur ancak mantis duyarlığı FP16'dan düşüktür. TPU ve NVIDIA Ampere/Hopper GPU'lar BF16'yı doğal olarak destekler; büyük dil modeli eğitiminde BF16, FP16'nın yerini giderek almaktadır. INT8 ve INT4 niceleme, model çıkarım aşamasında daha da küçük bit genişlikleri kullanarak VRAM tasarrufunu daha da ileri götürür. GPTQ, AWQ ve bitsandbytes kütüphaneleri tüketici GPU'larında büyük dil modellerini çalıştırmak için INT4 nicelemeyi yaygınlaştırmıştır. Niceleme miktarı arttıkça modelin doğruluğu düşebilir; bu ödünleşimi ölçmek için perplexity metriği kullanılır. Türkiye'de LLM araştırmacıları ve açık kaynak topluluk üyeleri, sınırlı VRAM'e sahip tüketici GPU'larında Llama ve Mistral modellerini çalıştırmak için bu tekniklere sıklıkla başvurmaktadır.

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.