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

un

tamu
1 / ?
kembali ke pelajaran

Tanda, Eksponen, Mantisa

Format Floating-Point IEEE 754

Setiap bilangan floating-point menyimpan tiga bidang:


- Bit tanda (1 bit): positif atau negatif

- Eksponen (bit E): skala magnitudo, pangkat bulat dari 2

- Mantisa (bit M): presisi pecahan, angka antara 1.0 dan ~2.0


Total bit = 1 + E + M. Nilainya kira-kira (-1)^sign (1 + mantissa) 2^(exponent - bias).


Dua properti penting untuk pelatihan:


Rentang dinamis = 2^(2^E) (kira-kira). Semakin banyak bit eksponen, semakin mampu merepresentasikan angka yang sangat kecil maupun sangat besar tanpa overflow.


Presisi = 2^M nilai berbeda per pangkat 2. Semakin banyak bit mantissa, semakin halus representasi di antara dua pangkat 2 yang berurutan.


Tiga Format


FormatTotal bitTandaExpMantRentang dinamisPresisi
FP32321823~10^-38 hingga ~10^38~7 digit
FP16161510~10^-5 to ~10^5~3 digit
FP8 E4M38143~2^-9 to ~448~2 digit

FP8 E4M3 dibaca "4 bit eksponen, 3 bit mantisa". Alternatif FP8 E5M2 mengorbankan presisi demi jangkauan yang lebih luas; eksperimen ANDREA menggunakan E4M3 karena aktivasi transformer tetap berada dalam rentang magnitudo sempit di mana presisi ekstra lebih unggul daripada jangkauan ekstra.

Bytes Per Parameter

ANDREA-120M memiliki sekitar 120.000.000 parameter. Hitung jejak penyimpanan hanya matriks bobot dalam (a) FP32, (b) FP16, (c) FP8. Tunjukkan perhitunganmu dalam MB. Kemudian hitung (d) jejak penyimpanan dengan bobot + momen pertama Adam + momen kedua Adam (3× jumlah bobot) pada FP16.

Mengapa Presisi Lebih Rendah Berjalan Lebih Cepat

Bandwidth Memori Mendominasi Kecepatan Pelatihan

GPU modern menghabiskan lebih banyak waktu menunggu memori daripada melakukan komputasi. RTX 4090 memiliki bandwidth memori 1008 GB/s & 165 TFLOPS komputasi FP16. Lapisan tipikal membaca bobot dari VRAM, mengalikan aktivasi, lalu menulis hasil kembali. Bandwidth, bukan komputasi, yang menentukan throughput.


Mengurangi presisi menjadi setengah akan mengurangi jumlah byte per parameter menjadi setengah, sehingga membaca bobot yang sama hanya menggunakan setengah bandwidth memori. Throughput kira-kira menjadi dua kali lipat.


Tensor Cores: Perkalian Matriks yang Dipercepat Perangkat Keras

RTX 4090 dilengkapi unit tensor core khusus yang menghitung perkalian matriks secara langsung pada FP16 atau FP8. Satu operasi tensor core mengalikan blok kecil (misalnya 16x16) dalam satu siklus, jauh lebih cepat daripada perkalian skalar FP32.


Angka empiris dari ANDREA-120M:


PresisiLangkah/menitCatatan
FP32~3baseline; tanpa akselerasi tensor core
FP16~6cuBLAS tensor cores; 2x speedup
FP8 E4M3~6tensor cores; comparable to FP16

FP8 tidak mengalahkan FP16 dalam throughput pada beban kerja ini karena compute throughput bukan lagi bottleneck; memory bandwidth & launch overhead menjadi pembatas. ANDREA-120M v3 menggunakan FP16 cuBLAS pada 6 langkah/menit untuk margin keamanan yang nyaman tanpa kehilangan throughput.


Risiko NaN pada FP8

FP8 E4M3 merepresentasikan angka dari ~2^-9 hingga ~448. Aktivasi atau gradien di luar rentang tersebut akan overflow menjadi NaN (bukan angka) atau underflow menjadi nol. Satu NaN meracuni setiap komputasi berikutnya: perkalian matriks dengan NaN menghasilkan semua-NaN; gradien semua-NaN merusak state AdamW; AdamW dengan m & v NaN menghasilkan update NaN; bobot menjadi NaN; seluruh proses pelatihan gagal.


Eksperimen FP8 ANDREA menghasilkan NaN cliffs sesekali yang memerlukan loss scaling, scheduled precision switching, atau fallback paths. Dynamic range FP16 (~10^-5 hingga ~10^5) cukup lebar sehingga kejadian NaN tetap jarang tanpa trik scaling yang rumit.


Precision Comparison: FP32 vs FP16 vs FP8

Memilih Presisi untuk Run Baru

Anda akan memulai training run bergaya ANDREA baru pada RTX 4090. Anda memiliki dua prioritas yang bertentangan: (1) memaksimalkan steps/min, (2) menghindari debugging NaN crashes di tengah training. ANDREA-120M v3 memilih FP16 cuBLAS daripada FP8 E4M3 meskipun keduanya berjalan pada ~6 steps/min. Jelaskan mengapa FP16 menang dalam keputusan ini. Rujuk dynamic range dan dukungan tensor core dalam jawaban Anda.

Menempatkan 120M pada Satu 4090

Pengganda 6-8x dari Pelajaran Pendahuluan

Ingat dari grow_a_language_model_intro bahwa memori pelatihan kira-kira sama dengan 6-8x jumlah bobot mentah, yang mencakup:


- Bobot (1x)

- Momen pertama Adam m (1x)

- Momen kedua Adam v (1x)

- Gradient buffer (1x)

- Aktivasi & temporaries (~2-4x, tergantung batch & context)


ANDREA-120M pada FP16 dengan batch_size=8, context=1024:


KomponenUkuran FP16
Bobot240 MB
m (first moment)240 MB
v (second moment)240 MB
Gradients240 MB
Activations~2-4 GB (batch, ctx)
Total~3.5 GB

RTX 4090 memiliki 24 GB VRAM. ANDREA-120M menggunakan ~14% pada FP16. Masih banyak ruang untuk ukuran batch yang lebih besar atau jendela konteks yang lebih panjang. ANDREA-12M hanya menggunakan total 1.4 GB.


Di Mana Mixed Precision Berada

ANDREA TIDAK menyimpan semuanya pada satu presisi. Pelatihan mixed-precision menyimpan:


- Bobot utama (Master weights): FP32 (menjaga stabilitas pelatihan)

- Komputasi forward & backward: FP16 (menggunakan tensor cores)

- Status optimizer AdamW: FP32 (m & v memerlukan presisi untuk pembaruan long-tail)

- Buffer gradien: FP16 (sisi komputasi)


Anggaran memori akhir menggabungkan keduanya. Jejak aktual ANDREA berada di antara FP16 murni (720 MB optimizer state) dan FP32 murni (1.44 GB optimizer state), lebih dekat ke FP32 karena m & v tetap dalam FP32.

Menentukan Anggaran untuk ANDREA-480M

ANDREA-480M (anggota ketiga yang direncanakan dari keluarga ini) memiliki ~480 juta parameter. Perkirakan (a) bobot FP16 saja dalam MB, (b) bobot FP16 + m + v dalam MB (anggap m & v juga FP16 untuk kesederhanaan), & (c) dengan aturan praktis pengganda 6-8x, total jejak saat pelatihan pada FP16. Apakah ANDREA-480M muat pada satu RTX 4090 (24 GB)?

Presisi dalam Praktik

Misalkan Anda menemukan di tengah pelatihan bahwa ANDREA-120M menghasilkan loss NaN sesekali setiap ~5000 langkah pada FP16, dan setiap NaN memerlukan restart dari checkpoint. Perubahan APA SAJA yang akan Anda coba pertama kali untuk mengurangi frekuensi NaN tanpa meninggalkan FP16? Justifikasi dengan satu kalimat mekanisme.

Aktivitas Berdekatan

Tiga saudara terkait dengan presisi:


- Aktivitas 1: Pengantar / Anggaran VRAM. Presisi mengalikan setiap suku dalam aritmetika anggaran memori. Aturan praktis pengali 6-8x bersifat unitless; bytes-per-param memberinya satuan.

- Aktivitas 10: AdamW. Status pengoptimal (m & v) biasanya tetap di FP32 meskipun komputasi forward/backward berjalan di FP16. Alasan: presisi akumulator long-tail lebih penting daripada kecepatan runtime untuk pengoptimal.

- Aktivitas 12: Gradient clipping. Clipping membatasi magnitudo gradien sebelum pembaruan status pengoptimal. Dengan forward/backward FP16 & pengoptimal FP32, clipping terjadi di batas tempat presisi berubah & di mana risiko overflow terkonsentrasi.


Presisi adalah tombol bebas: ubah presisi, model melatih lebih cepat & menggunakan lebih sedikit memori. Biayanya adalah kehati-hatian numerik: penanganan NaN, loss scaling, disiplin mixed-precision. ANDREA-120M v3 menunjukkan hasilnya: 120M parameter dilatih di perangkat keras konsumen dalam 23 hari karena FP16 memotong semuanya menjadi setengah.