İşaret, Üs, Mantisa
IEEE 754 Ondalık Sayı Formatı
Her ondalık sayı üç alan depolar:
- İşaret biti (1 bit): pozitif veya negatif
- Üs (E bit): büyüklük ölçeği, 2'nin tamsayı kuvveti
- Mantisa (M bit): kesirli hassasiyet, 1.0 ile ~2.0 arasında bir sayı
Toplam bit = 1 + E + M. Değer kabaca (-1)^sign (1 + mantisa) 2^(exponent - bias)'e eşittir.
Eğitim için iki özellik önemlidir:
Dinamik aralık = 2^(2^E) (kabaca). Daha fazla üs biti, taşma olmadan daha küçük ve daha büyük sayıları temsil etmeyi sağlar.
Hassasiyet = 2^M farklı değer, 2'nin her kuvveti başına. Daha fazla mantisa biti, ardışık 2 kuvvetleri arasında daha ince taneli temsil anlamına gelir.
Üç Biçim
| Biçim | Toplam bit | İşaret | Üs | Mant | Dinamik aralık | Hassasiyet |
|---|---|---|---|---|---|---|
| FP32 | 32 | 1 | 8 | 23 | ~10^-38 ile ~10^38 | ~7 basamak |
| FP16 | 16 | 1 | 5 | 10 | ~10^-5 to ~10^5 | ~3 digits |
| FP8 E4M3 | 8 | 1 | 4 | 3 | ~2^-9 to ~448 | ~2 digits |
FP8 E4M3 "4 üs biti, 3 mantisa biti" şeklinde okunur. Alternatif FP8 E5M2 hassasiyeti menzil için takas eder; ANDREA deneyleri E4M3 kullanır çünkü dönüştürücü aktivasyonları dar büyüklük bantlarında kalır ve burada ekstra hassasiyet ekstra menzilden üstündür.
Parametre Başına Bayt
Neden Düşük Hassasiyet Daha Hızlı Çalışır
Bellek Bant Genişliği Eğitim Hızını Belirler
Modern GPU'lar hesaplama yapmaktan çok bellek bekleyerek zaman harcar. RTX 4090'ın 1008 GB/s bellek bant genişliği ve 165 TFLOPS FP16 hesaplama gücü vardır. Tipik bir katman, ağırlıkları VRAM'den okur, aktivasyonlarla çarpar, sonuçları geri yazar. Bant genişliği, hesaplama değil, verimliliği belirler.
Hassasiyeti yarıya indirmek, parametre başına bayt sayısını yarıya indirir, bu yüzden aynı ağırlıkları okumak bellek bant genişliğinin yarısını kullanır. Verimlilik kabaca iki katına çıkar.
Tensor Çekirdekleri: Donanım Hızlandırmalı Matris Çarpımı
RTX 4090, FP16 veya FP8'de doğrudan matris çarpımlarını hesaplayan özel tensor çekirdek birimleriyle gelir. Tek bir tensor çekirdek işlemi, küçük bir bloğu (ör. 16x16) bir döngüde çarpar, skaler FP32 çarpımlarından dramatik şekilde daha hızlıdır.
ANDREA-120M'den Ampirik Sayılar:
| Hassasiyet | Adım/dk | Notlar |
|---|---|---|
| FP32 | ~3 | temel; tensor çekirdek hızlandırması yok |
| FP16 | ~6 | cuBLAS tensor çekirdekleri; 2x hız artışı |
| FP8 E4M3 | ~6 | tensor çekirdekleri; FP16 ile karşılaştırılabilir |
FP8, bu iş yükünde FP16'yı verimlilikte geçemedi çünkü hesaplama verimliliği darboğaz olmaktan çıktı; bellek bant genişliği ve başlatma ek yükü bağlayıcı hale geldi. ANDREA-120M v3, verimlilik kaybı olmadan rahat bir güvenlik marjı için FP16 cuBLAS ile 6 adım/dakika hızında gönderiliyor.
FP8'de NaN Riski
FP8 E4M3, ~2^-9 ile ~448 arasındaki sayıları temsil eder. Bu aralığın dışındaki aktivasyonlar veya gradyanlar NaN'a (sayı değil) taşar veya sıfıra alt taşar. Tek bir NaN, her aşağı akış hesaplamasını zehirler: NaN içeren matris çarpımları tümüyle NaN döndürür; tümüyle NaN gradyanlar AdamW durumunu bozar; NaN m & v içeren AdamW NaN güncellemeleri çıkarır; ağırlıklar NaN olur; tüm eğitim çalışması ölür.
ANDREA'nın FP8 deneyleri, kayıp ölçeklendirmesi, zamanlanmış hassasiyet değiştirme veya yedek yollar gerektiren nadir NaN uçurumları üretti. FP16 dinamik aralığı (~10^-5 ile ~10^5 arası) NaN olaylarının karmaşık ölçeklendirme hileleri olmadan nadir kalmasını sağlayacak kadar geniştir.
Yeni Bir Çalıştırma İçin Hassasiyet Seçimi
Tek Bir 4090 Üzerine 120M Sığdırmak
Giriş Dersinden Gelen 6-8x Çarpan
grow_a_language_model_intro'dan hatırlayın ki eğitim belleği, kabaca ham ağırlık sayısının 6-8x'ine eşittir ve şunları hesaba katar:
- Ağırlık (1x)
- Adam birinci an m (1x)
- Adam ikinci an v (1x)
- Gradyan tamponu (1x)
- Aktivasyonlar & geçiciler (~2-4x, toplu iş ve bağlama bağlı)
ANDREA-120M FP16 ile batch_size=8, context=1024:
| Bileşen | FP16 boyutu |
|---|---|
| Ağırlıklar | 240 MB |
| m (ilk moment) | 240 MB |
| v (ikinci moment) | 240 MB |
| Gradyanlar | 240 MB |
| Aktivasyonlar | ~2-4 GB (batch, ctx) |
| Toplam | ~3.5 GB |
RTX 4090'ın 24 GB VRAM'ı var. ANDREA-120M, FP16'da ~%14 kullanıyor. Daha büyük batch boyutları veya daha uzun context pencereleri için bolca yer var. ANDREA-12M toplamda sadece 1.4 GB kullandı.
Karma Hassasiyet Nerede Bulunur
ANDREA her şeyi tek bir hassasiyette tutmaz. Karma hassasiyet eğitimi depolar:
- Ana ağırlıklar: FP32 (eğitim kararlılığını korur)
- İleri & geri hesaplama: FP16 (tensor çekirdeklerini kullanır)
- AdamW optimize edici durumu: FP32 (m & v uzun kuyruk güncellemeleri için hassasiyete ihtiyaç duyar)
- Gradyan tamponu: FP16 (hesaplama tarafı)
Son bellek bütçesi her ikisini de karıştırır. ANDREA'nın gerçek ayak izi, saf FP16 (720 MB optimizer state) ile saf FP32 (1.44 GB optimizer state) arasında yer alır, m ve v'nin FP32'de kalması nedeniyle FP32'ye daha yakındır.
ANDREA-480M için Bütçe Boyutlandırma
Pratikte Hassasiyet
Komşu Etkinlikler
Üç kardeş hassasiyetle bağlantılıdır:
- Etkinlik 1: Giriş / VRAM bütçesi. Hassasiyet, bellek bütçesi aritmetiğindeki her terimi çarpar. 6-8x çarpan kuralı birimlessizdir; bytes-per-param ona birim verir.
- Etkinlik 10: AdamW. Optimizör durumu (m & v) genellikle forward/backward hesaplama FP16'da çalışsa bile FP32'de kalır. Sebep: optimizör için uzun kuyruk biriktirici hassasiyeti, çalışma zamanı hızından daha önemlidir.
- Etkinlik 12: Gradyan kırpma. Kırpma, optimizör durumu güncellemelerinden önce gradyan büyüklüklerini sınırlar. FP16 forward/backward & FP32 optimizör ile kırpma, hassasiyet değişiminin olduğu ve taşma riskinin yoğunlaştığı sınırda gerçekleşir.
Hassasiyet bedava bir ayar düğmesidir: değiştirin, model daha hızlı eğitilir & daha az bellek kullanır. Maliyet sayısal özen: NaN işleme, kayıp ölçekleme, karma hassasiyet disiplini. ANDREA-120M v3 ödülü gösterir: 120M parametre tüketici donanımında 23 günde eğitildi çünkü FP16 her şeyi yarıya indirdi.