English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

konuk
1 / ?
derslere geri dön

İş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çimToplam bitİşaretÜsMantDinamik aralıkHassasiyet
FP32321823~10^-38 ile ~10^38~7 basamak
FP16161510~10^-5 to ~10^5~3 digits
FP8 E4M38143~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

ANDREA-120M yaklaşık 120.000.000 parametre tutar. Sadece ağırlık matrislerinin depolama ayak izini (a) FP32, (b) FP16, (c) FP8 için hesaplayın. Aritmetiğinizi MB cinsinden gösterin. Sonra (d) ağırlık + Adam birinci moment + Adam ikinci moment (ağırlık sayısının 3 katı) ile FP16'daki depolama ayak izini hesaplayın.

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:


HassasiyetAdım/dkNotlar
FP32~3temel; tensor çekirdek hızlandırması yok
FP16~6cuBLAS tensor çekirdekleri; 2x hız artışı
FP8 E4M3~6tensor ç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.


Hassasiyet Karşılaştırması: FP32 vs FP16 vs FP8

Yeni Bir Çalıştırma İçin Hassasiyet Seçimi

RTX 4090 üzerinde yeni bir ANDREA tarzı eğitim çalıştırmasına başlıyorsunuz. Çatışan iki önceliğiniz var: (1) adımlar/dak'ı maksimize et, (2) eğitim ortasında NaN çökmeleri hata ayıklamaktan kaçın. ANDREA-120M v3, ~6 adımlar/dak hızında çalışan her ikisine rağmen FP8 E4M3 yerine FP16 cuBLAS'ı seçti. Neden FP16 bu kararda kazandı diye akıl yürütün. Cevabınızda dinamik aralık VE tensor core desteğine atıfta bulunun.

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şenFP16 boyutu
Ağırlıklar240 MB
m (ilk moment)240 MB
v (ikinci moment)240 MB
Gradyanlar240 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

ANDREA-480M (aileye planlanan üçüncü üye) ~480 milyon parametre tutar. Tahmin edin (a) sadece FP16 ağırlıklar MB cinsinden, (b) FP16 ağırlıklar + m + v MB cinsinden (basitlik için m ve v'nin de FP16 olduğunu varsayın), & (c) 6-8x çarpan kuralı parmağına göre, FP16'daki toplam eğitim zamanı ayak izi. ANDREA-480M tek bir RTX 4090 (24 GB)'a sığar mı?

Pratikte Hassasiyet

Eğitim ortasında ANDREA-120M'nin FP16'da her ~5000 adımda ara sıra NaN kayıpları ürettiğini ve her NaN'ın bir kontrol noktasından yeniden başlatmayı gerektirdiğini fark ettiniz. FP16'dan çıkmadan NaN sıklığını azaltmak için ÖNCE HANGİ BİR değişikliği deneyecektiniz? Tek cümlelik bir mekanizma ile gerekçelendirin.

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.