FP8
FP8'in ne olduğunu, E4M3 ve E5M2'nin nasıl çalıştığını ve ölçeklendirme, donanım desteği ile karma hassasiyetin yapay zekâ eğitimini ve çıkarımını nasıl geliştirdiğini öğren.
FP8 veya 8 bitlik kayan nokta, her değeri sekiz bitte depolayan düşük hassasiyetli bir sayısal formattır. AI sistemleri, uyumlu donanımlarda bellek trafiğini azaltmak ve matris çarpımları, evrişimler ve diğer maliyetli işlemleri hızlandırmak için FP8 kullanır. FP16 veya FP32 ile karşılaştırıldığında daha az farklı değeri temsil eder; bu nedenle başarılı FP8 iş akışları, model kalitesini korumak için hızlı düşük hassasiyetli hesaplamayı ölçeklendirme ve seçici yüksek hassasiyetli işlemlerle birleştirir.
FP8 Sayıları Nasıl Temsil Eder#
Kayan noktalı bir değer; işareti, aralığı belirleyen üssü ve ayrıntıyı belirleyen mantisi içerir. FP8, genellikle PyTorch kayan nokta veri türleri tarafından belgelenen iki formatta kullanılır:
- E4M3: Bir işaret biti, dört üs biti ve üç mantis biti kullanır. Daha fazla sayısal ayrıntı, ancak daha dar bir aralık sunar.
- E5M2: Bir işaret biti, beş üs biti ve iki mantis biti kullanır. Daha geniş bir aralığı kapsar, ancak değerleri daha agresif biçimde yuvarlar.
E4M3 genellikle ağırlıklar ve aktivasyonlar için uygundur; E5M2 ise geniş değer aralıklarına sahip gradyanları daha iyi işleyebilir. Kesin varyantlar platformlar arasında farklılık gösterir; bu durum AMD düşük hassiyetli kayan nokta belgelerinde gösterilmiştir. Bu nedenle bir FP8 modeli her hızlandırıcı ve çalışma zamanı arasında otomatik olarak taşınabilir değildir.
Sekiz bit, bir tensörün özgün aralığının ve ayrıntısının tamamını temsil edemediğinden çerçeveler genellikle dönüştürmeden önce değerleri bir ölçekleme faktörüyle çarpar. NVIDIA FP8 ölçekleme kılavuzu, gelecekteki ölçekleri daha önce gözlemlenen maksimum değerlerden türeten gecikmeli ölçekleme gibi stratejileri açıklar. Ölçekleme, her işlemin daha yüksek hassasiyette çalışmasını gerektirmeden taşmayı, alt taşmayı ve doygunluğu sınırlar.
İlgili Formatlarla FP8 Karşılaştırması#
FP8, yaygın AI veri türleri arasında orta bir konumda yer alır:
- FP16 veya yarı hassasiyet: İki kat daha fazla bit kullanır; daha fazla sayısal ayrıntı sunar ve genellikle eğitimi basitleştirir. FP8, depolama ve bant genişliği gereksinimini daha da azaltabilir, ancak daha dikkatli ölçekleme gerektirir.
- BF16: Geniş bir üs aralığını korurken FP16'ya kıyasla daha az kesir ayrıntısı sunar. FP8 eğitiminde genellikle daha yüksek hassasiyetli eşlikçi format olarak kullanılır.
- INT8: Kayan noktalı değerler yerine tam sayıları temsil eder. INT8 model niceleme işlemi, gerçek değerleri genellikle sabit tamsayı seviyelerine eşlemek için ölçeklere dayanırken FP8, doğal olarak düzgün olmayan aralıklandırma için bir üs korur.
- FP4: Yalnızca dört bit kullanır ve daha yüksek sıkıştırma sağlayabilir, ancak son derece sınırlı aralığı ve çözünürlüğü genellikle doğruluğu korumayı zorlaştırır.
FP8, her tensör için kullanılan veri türü olmaktan ziyade sıklıkla bir karma hassasiyet iş akışının parçasıdır. Biriktirme, normalizasyon, iyileştirici durumu veya hassas katmanlar BF16, FP16 ya da FP32 biçiminde kalabilir. Ayrıca sayısal hassasiyet, kaç pozitif model tahmininin doğru olduğunu ölçen hassasiyet değerlendirme metriğinden farklıdır.
Gerçek Dünya Uygulamaları#
İki pratik uygulama, FP8'in neden önemli olduğunu gösterir:
-
Büyük model eğitimi: Transformer eğitimi, büyük matris çarpımlarını tekrar tekrar gerçekleştirir. FP8 uyumlu bir çerçeve, uygun ağırlıkları ve aktivasyonları FP8'e dönüştürürken kararlılığın gerektirdiği yerlerde daha yüksek hassasiyeti koruyabilir. Bu, bant genişliği gereksinimini azaltır ve eğitim verimini artırabilir. TorchAO nicelemeli eğitim iş akışı, maksimum hız ile aykırı değerlerin daha iyi işlenmesi arasında denge kuran tensör bazlı ve satır bazlı ölçekleme seçeneklerini içerir.
-
Yüksek verimli görüntü çıkarımı: Bir veri merkezi, yüzlerce perakende, trafik veya üretim video akışında nesne algılama çalıştırabilir. FP8 uyumlu çekirdekler, uygun model katmanları için gereken süreyi ve belleği azaltarak çıkarım gecikmesini düşürebilir ve eş zamanlı akış kapasitesini artırabilir. TensorRT nicelemeli türler kılavuzu, açık niceleme ve niceleme geri alma işlemlerinin FP8 yürütmesini nasıl tanımladığını açıklar.
Sayısal Riskler ve Donanım Desteği#
Yetersiz ölçekleme, büyük değerlerin doygunluğa ulaşmasına ve küçük değerlerin sıfıra yuvarlanmasına neden olabilir. Tek bir ölçek tüm tensörü kapsadığında aykırı değerler özellikle sorun yaratır. Bu etkiler güven skorlarını değiştirebilir, eğitimi kararsızlaştırabilir veya algılama doğruluğunu azaltabilir; bu nedenle geliştiriciler, dönüştürülen modeli daha yüksek hassasiyetli temel modelle karşılaştırarak doğrulamalıdır.
Yerel donanım desteği de aynı derecede önemlidir. NVIDIA Hopper mimarisi FP8 Tensor Core hızlandırmasını sunarken daha eski NVIDIA A100 GPU, FP16, BF16 ve INT8'i destekler ancak yerel FP8 hesaplamasını desteklemez. Bu nedenle dağıtım hassasiyetini seçmeden önce TensorRT donanım destek matrisi kontrol edilmelidir.
FP8 ile Pratikte Çalışma#
Bu küçük PyTorch örneği, E4M3 dönüşümünü ve FP8 değerleri FP32'ye geri dönüştürüldüğünde oluşan yuvarlama hatasını gösterir:
import torch
values = torch.tensor([0.1, 1.0, 3.14, 100.0], dtype=torch.float32)
# Convert to E4M3 FP8, then restore the values for comparison.
fp8_values = values.to(torch.float8_e4m3fn)
restored = fp8_values.to(torch.float32)
absolute_error = (restored - values).abs()
print(torch.stack((values, restored, absolute_error), dim=1))Belgelenen Ultralytics TensorRT dışa aktarma iş akışı, Ultralytics YOLO için tek bağımsız değişkenli bir FP8 dışa aktarma işlemi yerine FP16 ve kalibre edilmiş INT8 seçenekleri sunar. Bu nedenle FP8 dağıtımı, uyumlu bir alt düzey dönüştürme araç zinciri gerektirir. Hangi hassasiyet seçilirse seçilsin, üretim dağıtımından önce gecikmeyi, verimi, bellek kullanımını ve görev doğruluğunu karşılaştırmak için hedef GPU üzerinde Ultralytics kıyaslama modunu kullan.






