BFloat16 (Brain Float16)

Geniş üs aralığıyla eğitim kararlılığı sağlayan Google kökenli 16 bitlik kayan nokta formatı.

BFloat16 (Brain Float16), Google'ın TPU'ları için geliştirdiği 16 bitlik kayan nokta sayı formatıdır. Standart Float16 ile aynı bit genişliğini (16 bit) paylaşmasına karşın bit dağılımı farklıdır: • Float16: 1 işaret + 5 üs + 10 mantis • BFloat16: 1 işaret + 8 üs + 7 mantis BFloat16'nın 8 bitlik üs alanı, Float32 ile aynı dinamik aralığı sağlar; bu sayede eğitim sırasında sayısal taşma (overflow) ve altaşma (underflow) sorunları büyük ölçüde azalır. Mantis biti azlığından kaynaklanan hafif hassasiyet kaybı ise derin öğrenme eğitimini pratikte etkilemez. Bu özellikleri nedeniyle PyTorch ve JAX başta olmak üzere modern derin öğrenme çerçevelerinde karma hassasiyetli (mixed-precision) eğitimin tercih edilen formatına dönüşmüştür.

Float16 ile Karşılaştırma

| Format | İşaret | Üs | Mantis | Dinamik Aralık | |--------|--------|-----|--------|---------------| | Float32 | 1 | 8 | 23 | ±3.4×10³⁸ | | BFloat16 | 1 | 8 | 7 | ±3.4×10³⁸ | | Float16 | 1 | 5 | 10 | ±6.5×10⁴ | BFloat16, Float32 ile aynı üs genişliğine sahip olduğundan gradient güncellemeleri sırasında değerler çok küçük ya da çok büyük olduğunda Float16'nın aksine taşma yaşamaz. Bu fark, büyük modellerin kararlı biçimde eğitilmesinde kritik önem taşır.

BFloat16'nın Teknik Özellikleri

  • check_circle Bit Yapısı: 16 bit toplam: 1 işaret + 8 üs + 7 mantis. FP32 ile aynı üs aralığı (8 bit): ~1.175×10⁻³⁸ ile ~3.4×10³⁸. FP16 (1+5+10): çok daha dar üs — gradient overflow ve underflow riski. Mantis farkı: FP32 23 bit, BF16 7 bit — yaklaşık 2 ondalık basamak hassasiyet.
  • check_circle Eğitimdeki Avantajları: Mixed precision: ağırlıklar BF16 saklanır, gradyan akümülasyonu FP32 ile yapılır. Loss scaling gerekmez (FP16'nın büyük sorunu): BF16 geniş aralığı sayesinde. Bellek: FP32'den 2× az — büyük batch veya model boyutu artışı. NVIDIA A100/H100 ve Google TPU natif BF16 tensor core desteği.
  • check_circle Çıkarım Kullanımı: Model ağırlıkları BF16 saklanarak VRAM tasarrufu. Büyük model çıkarımı: 70B model BF16 ile 140GB; INT4 kuantizasyon ile 35GB — ikisi de seçenek. Doğruluk: BF16 çıkarım INT4'ten çok daha hassas; ancak bellek gereksinimi yüksek.

BFloat16 Desteği ve Pratik Kullanım

Donanım desteği: NVIDIA A100/H100/RTX 30xx+ serisi; Google TPU (varsayılan format); Apple Silicon M-serisi. PyTorch kullanımı: model.to(torch.bfloat16) veya torch.autocast(device_type='cuda', dtype=torch.bfloat16). Hugging Face: model = AutoModelForCausalLM.from_pretrained(..., torch_dtype=torch.bfloat16). FP16 ile karşılaştırma: BF16 eğitimde daha kararlı (loss scaling yok); çıkarımda iki format benzer hız; donanım desteği varsa BF16 tercih edilmeli. Sınırlar: eski GPU'lar (Turing öncesi, V100 dahil) BF16 tensor core yok — FP32 emülasyonu gerekir, hız avantajı kaybolur.