FP4
FP4, genellikle E2M1 biçiminde olan ve yapay zekâ modellerini küçültüp hızlandırmak için blok başına ölçekler kullanan 4 bitlik bir kayan nokta biçimidir. NVFP4, MXFP4, donanım ve kod ele alınır.
FP4, model nicelemesi sırasında sinir ağlarının ağırlıklarını ve aktivasyonlarını depolamak ve hesaplamak için kullanılan 4 bitlik bir kayan nokta biçimidir. Yapay zekâ donanım ve yazılımları E2M1 düzenini kullanır: bir işaret biti, iki üs biti ve bir anlamlı basamak biti. Bu biçim yalnızca 0, ±0.5, ±1, ±1.5, ±2, ±3, ±4 ve ±6 değerlerini gösterebilir. Her değer, FP8 belleğinin yarısını ve FP16'nın (yarı hassasiyet) dörtte birini kullanır. Bu, özellikle çıkarım gecikmesi bellekten ağırlıkların taşınmasının belirlediği büyük dil modelleri ve diğer üretken yapay zekâ modelleri için önemlidir. Yerel FP4 matris işlemleri NVIDIA'nın Blackwell GPU'ları ve AMD'nin Instinct MI350 serisiyle geldi; FP4 hem çıkarımda hem de giderek artan biçimde eğitimde kullanılıyor.
FP4 Nasıl Çalışır#
On beş farklı değer, gerçek ağırlıkların ve aktivasyonların aralığını kapsayamaz. Bu nedenle her pratik FP4 biçimi, tensörü küçük bloklara böler ve her blok için ortak bir ölçek depolar. Bu ölçek, bloğun en büyük mutlak değerini E2M1'in 6 olan maksimumuna yaklaştıracak şekilde seçilir. İki temel biçim, blok boyutu ve ölçek hassasiyeti bakımından farklıdır:
- MXFP4: Open Compute Project'in Microscaling (MX) belirtiminde tanımlanmıştır. MXFP4, 32 değeri tek bir 8 bitlik ikinin kuvveti ölçeği (E8M0) altında gruplar. Açık bir belirtim olduğundan AMD'nin MI350 serisi ve NVIDIA'nın Blackwell GPU'ları dahil olmak üzere farklı üreticiler tarafından desteklenir.
- NVFP4: NVIDIA'nın bu biçimi, 16 değeri tek bir FP8 (E4M3) ölçeği altında gruplar ve tensör başına ikinci bir FP32 ölçeği ekler. Daha küçük bloklar ve daha hassas ölçekler niceleme hatasını azaltır; NVIDIA, DeepSeek-R1-0528 kıyaslamalarında FP8'e kıyasla doğruluk kaybının %1 veya daha az olduğunu bildirmiştir.
Aşağıdaki kod parçacığı, birkaç aykırı değer içeren bir tensörü önce tüm tensör için tek bir ölçekle, ardından 32 ve 16 değer başına bir ölçekle E2M1 değerlerine yuvarlar. Bunlar sırasıyla MXFP4 ve NVFP4 blok boyutlarıdır:
import torch
# The eight non-negative values FP4 E2M1 can represent; the sign bit mirrors them
grid = torch.tensor([0.0, 0.5, 1.0, 1.5, 2.0, 3.0, 4.0, 6.0])
torch.manual_seed(0)
x = torch.randn(4096)
x[::512] *= 20 # a few large outliers, as real weight and activation tensors have
# One shared scale for the whole tensor, then MXFP4-sized and NVFP4-sized blocks
for block in [4096, 32, 16]:
blocks = x.reshape(-1, block)
scale = blocks.abs().amax(dim=1, keepdim=True) / 6.0 # map each block's largest value to 6
nearest = ((blocks.abs() / scale).unsqueeze(-1) - grid).abs().argmin(dim=-1)
dequantized = grid[nearest] * blocks.sign() * scale
error = (dequantized.flatten() - x).abs().mean()
print(f"Block size {block:>4}: mean absolute error {error:.4f}")Tüm tensör için tek bir ölçek kullanıldığında aykırı değerler ölçeği o kadar genişletir ki sıradan değerlerin çoğu sıfıra yuvarlanır ve ortalama mutlak hata 0.7238 olur. 32 ve 16 değerlik bloklar, her aykırı değeri tek bir blokla sınırlar; böylece diğer her blok ince ölçeğini korur ve hata sırasıyla 0.0901 ile 0.0747'ye düşer.
FP4 ile Çıkarım ve Eğitim#
Çıkarımda TensorRT gibi bir çıkarım motoru, eğitimden sonra ağırlıkları ve çoğu zaman aktivasyonları FP4'e niceleyerek matris çarpımlarını FP4'te gerçekleştirir ve sonuçları daha yüksek hassasiyetle biriktirir. TorchAO'nun NVFP4 ve MXFP4 yapılandırmaları, desteklenen GPU'larda aynı iş akışını PyTorch için sunar. OpenAI, karışım uzmanlar ağırlıkları sonradan MXFP4'te eğitilmiş gpt-oss-120b modelini yayımladı; bu sayede 117 milyar parametreli model tek bir 80 GB GPU'da çalışabiliyor.
FP4'te eğitim, karma hassasiyetli eğitimi 4 bite indirir ve çıkarımdan daha zordur; çünkü gradyanlar ve aktivasyonların aralığı eğitim boyunca değişir. NVIDIA'nın NVFP4 ön eğitim çalışması, aykırı değerleri dağıtan rastgele Hadamard dönüşümlerini, gradyanlar için stokastik yuvarlamayı ve daha yüksek hassasiyette tutulan birkaç katmanı birleştirerek 10 trilyon belirteç üzerinde 12 milyar parametreli bir modeli NVFP4'te eğitti. Eğitim kaybı ve sonraki görevlerdeki doğruluk, FP8 temel çizgisiyle karşılaştırılabilir düzeydeydi.
FP4 Modellerini Dağıtma#
Yerel FP4 tensör çekirdekleri NVIDIA Blackwell veya daha yeni GPU'ları (B200 ve GeForce RTX 50 serisi gibi) ya da MXFP4 için AMD Instinct MI350 hızlandırıcılarını gerektirir; H100 gibi Hopper GPU'ları FP8'i hızlandırır, ancak FP4'ü hızlandırmaz. TensorRT destek matrisi, her GPU'nun hangi hassasiyetleri desteklediğini listeler. Dönüştürme sonrasında ve model dağıtımından önce doğruluk kontrol edilmelidir; hassas katmanların veya küçük modellerin performansı düşebilir. Eğitim sonrası niceleme yetmediğinde niceleme farkındalıklı eğitim doğruluğu geri kazandırır. Ultralytics YOLO26 TensorRT dışa aktarımı, YOLO modelleri için sunduğu düşük hassasiyet seçenekleri olan quantize=16 ile FP16 veya quantize=8 ile INT8 motorları oluşturur.
FP4 ve İlgili Biçimler#
- FP8: FP8 (E4M3 veya E5M2), çok daha fazla farklı değer ve daha geniş bir aralık sunar. FP8 eğitimi büyük modellerde yaygın olarak benimsendiğinden, FP4 sonuçları genellikle FP8 temel çizgisiyle karşılaştırılır.
- BFloat16: BF16, büyük modelleri tam kalitede eğitmek ve sunmak için standart biçim olmaya devam eder ve FP4'ün dört katı kadar bit kullanır.
- INT4: INT4, 16 düzeyini eşit aralıklarla yerleştirirken FP4, çoğu ağırlık ve aktivasyonun bulunduğu sıfıra yakın bölgede daha fazla düzey sunar. GPTQ ve AWQ gibi yöntemlerle dil modeli ağırlıklarını tek başına sıkıştırmada INT4 hâlâ yaygın olarak kullanılır.
- AMD Socket FP4: FP4, Carrizo nesli FX-8800P gibi mobil APU'larda kullanılan paketin, AMD'ye ait ve ilgisiz bir dizüstü bilgisayar işlemci soketinin de adıdır.










