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.