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

un

гість
1 / ?
назад до уроків

Знак, Показник, Мантіса

Формат чисел з плаваючою комою IEEE 754

Кожне число з плаваючою комою зберігає три поля:


- Біт знаку (1 біт): додатній чи від'ємний

- Показник степеня (E бітів): масштаб величини, ціле число у степені 2

- Мантиса (M бітів): дробова точність, число між 1.0 та ~2.0


Загальна кількість бітів = 1 + E + M. Значення приблизно дорівнює (-1)^sign (1 + mantissa) 2^(exponent - bias).


Для тренування важливі дві властивості:


Динамічний діапазон = 2^(2^E) (приблизно). Більше бітів показника степеня означає представлення менших та більших чисел без переповнення.


Точність = 2^M різних значень на кожну степінь двійки. Більше бітів мантиси означає детальніше представлення між послідовними степенями двійки.


Три формати


ФорматЗагальна кількість бітівЗнакЕкспМантДинамічний діапазонТочність
FP32321823~10^-38 до ~10^38~7 цифр
FP16161510~10^-5 до ~10^5~3 цифри
FP8 E4M38143~2^-9 до ~448~2 цифри

FP8 E4M3 читається як "4 біти експоненти, 3 біти мантиси". Альтернативний FP8 E5M2 обмінює точність на діапазон; експерименти ANDREA використовують E4M3, тому що активації трансформера залишаються у вузьких діапазонах величин, де додаткова точність переважає над додатковим діапазоном.

Байт на параметр

ANDREA-120M містить приблизно 120,000,000 параметрів. Обчисліть обсяг пам'яті лише для матриць ваг у (a) FP32, (b) FP16, (c) FP8. Покажіть обчислення в MB. Потім обчисліть (d) обсяг пам'яті з вагами + першим моментом Адама + другим моментом Адама (3x кількість ваг) у FP16.

Чому нижча точність працює швидше

Пропускна здатність пам'яті домінує над швидкістю тренування

Сучасні GPU витрачають більше часу на очікування пам'яті, ніж на обчислення. RTX 4090 має пропускну здатність пам'яті 1008 GB/s та 165 TFLOPS обчислень FP16. Типовий шар читає ваги з VRAM, множить активації, записує результати назад. Пропускна здатність, а не обчислення, визначає пропускну здатність.


Подвоєння точності зменшує байти на параметр удвічі, тому читання тих самих ваг використовує половину пропускної здатності пам'яті. Пропускна здатність приблизно подвоюється.


Tensor Cores: Апаратно-прискорене множення матриць

RTX 4090 має спеціалізовані блоки tensor core, які обчислюють множення матриць у FP16 або FP8 безпосередньо. Одна операція tensor core множить малий блок (наприклад, 16x16) за один цикл, що значно швидше за скалярне множення FP32.


Емпіричні дані з ANDREA-120M:


ТочністьКроки/хвПримітки
FP32~3базовий рівень; без прискорення tensor core
FP16~6ядра tensor cuBLAS; прискорення у 2x
FP8 E4M3~6ядра tensor; порівнянно з FP16

FP8 не перевершив FP16 за пропускною здатністю у цій задачі, тому що пропускна здатність обчислень перестала бути вузьким місцем; пропускна здатність пам'яті та накладні витрати на запуск стали обмежувальними. ANDREA-120M v3 постачається з FP16 cuBLAS на 6 кроках/хв для комфортного запасу безпеки без втрати пропускної здатності.


Ризик NaN у FP8

FP8 E4M3 представляє числа від ~2^-9 до ~448. Активації або градієнти поза цим діапазоном переповнюються до NaN (не число) або знецінюються до нуля. Один NaN отруює всі подальші обчислення: множення матриць з NaN повертає все-NaN; градієнти все-NaN псують стан AdamW; AdamW з NaN m та v видає оновлення NaN; ваги стають NaN; весь тренувальний запуск гине.


Експерименти ANDREA з FP8 давали періодичні NaN-обриви, що вимагали масштабування втрат, запланованого перемикання точності або резервних шляхів. Динамічний діапазон FP16 (~10^-5 до ~10^5) достатньо широкий, щоб NaN-події залишалися рідкісними без складних трюків масштабування.


Precision Comparison: FP32 vs FP16 vs FP8

Вибір точності для нового запуску

Ви запускаєте новий тренувальний запуск у стилі ANDREA на RTX 4090. У вас два конфліктуючі пріоритети: (1) максимізувати кроки/хв, (2) уникнути налагодження NaN-збоїв посеред тренування. ANDREA-120M v3 вибрав FP16 cuBLAS замість FP8 E4M3, попри те, що обидва працюють зі ~6 кроками/хв. Розумайте, чому FP16 переміг у цьому рішенні. Посилайтеся на динамічний діапазон ТА підтримку tensor core у вашій відповіді.

Розміщення 120M на одній 4090

Множник 6-8x з вступного уроку

Пригадайте з grow_a_language_model_intro, що пам'ять для тренування становить приблизно 6-8x від сирої кількості ваг, враховуючи:


- Вага (1x)

- Перший момент Adam m (1x)

- Другий момент Adam v (1x)

- Буфер градієнтів (1x)

- Активації та тимчасові (~2-4x, залежить від batch та context)


ANDREA-120M при FP16 з batch_size=8, context=1024:


КомпонентРозмір FP16
Вага240 MB
m (перший момент)240 MB
v (другий момент)240 MB
Градієнти240 MB
Активації~2-4 GB (batch, ctx)
Загалом~3.5 GB

RTX 4090 має 24 GB VRAM. ANDREA-120M використовує ~14% на FP16. Багато місця для більших розмірів партій або довших контекстних вікон. ANDREA-12M використовувала лише 1.4 GB загалом.


Де живе змішана точність

ANDREA НЕ зберігає все в одній точності. Тренування зі змішаною точністю зберігає:


- Основні ваги: FP32 (зберігає стабільність тренування)

- Прямий та зворотний обчислення: FP16 (використовує тензорні ядра)

- Стан оптимізатора AdamW: FP32 (m та v потребують точності для оновлень довгого хвоста)

- Буфер градієнтів: FP16 (сторона обчислень)


Остаточний бюджет пам'яті комбінує обидва. Фактичний відбиток ANDREA перебуває між чистим FP16 (720 MB стан оптимізатора) та чистим FP32 (1.44 GB стан оптимізатора), ближче до FP32, оскільки m та v залишаються в FP32.

Розрахунок бюджету для ANDREA-480M

ANDREA-480M (планований третій член родини) має ~480 мільйонів параметрів. Оцініть (a) лише ваги FP16 у MB, (b) ваги FP16 + m + v у MB (припустимо, що m та v також FP16 для простоти), та (c) з урахуванням правила множника 6-8x, загальний відбиток під час тренування на FP16. Чи поміститься ANDREA-480M на одну RTX 4090 (24 GB)?

Точність на практиці

Припустимо, ви виявили під час тренування, що ANDREA-120M періодично видає NaN втрати кожні ~5000 кроків на FP16, і кожен NaN вимагав перезапуску з чекпоінту. ЯКУ ОДНУ зміну ви б спробували першим ділом, щоб зменшити частоту NaN без переходу з FP16? Обґрунтуйте однореченним механізмом.

Суміжні активності

Три споріднені активності пов'язані з точністю:


- Активність 1: Вступ / бюджет VRAM. Точність множить кожен член у арифметиці бюджету пам'яті. Емпіричне правило 6-8x множника є безрозмірним; байти-на-параметр надають йому розмірність.

- Активність 10: AdamW. Стан оптимізатора (m & v) зазвичай залишається у FP32, навіть коли прямі/зворотні обчислення виконуються у FP16. Причина: точність акумулятора довгого хвоста важливіша за швидкість виконання для оптимізатора.

- Активність 12: Обрізання градієнтів. Обрізання обмежує магнітуди градієнтів перед оновленням стану оптимізатора. З FP16 для прямих/зворотних обчислень та FP32 для оптимізатора, обрізання відбувається на межі, де змінюється точність, та де концентрується ризик переповнення.


Точність — це безкоштовний регулятор: змініть її, модель тренується швидше та використовує менше пам'яті. Вартість — чисельна обережність: обробка NaN, масштабування втрат, дисципліна змішаної точності. ANDREA-120M v3 демонструє вигоду: 120M параметрів, натренованих на споживчому обладнанні за 23 дні, бо FP16 скоротило все вдвічі.