Выбор ответа Senior Оптимизаторы и обучение обновлено

Mixed precision

Вопрос

Зачем при обучении в fp16 нужен GradScaler, а в bf16 обычно нет?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: У fp16 узкий диапазон экспоненты, малые градиенты обнуляются, и loss масштабируют; у bf16 диапазон fp32. fp16: 5 бит экспоненты и 10 бит мантиссы, минимальные числа около 6e-8, градиенты меньше этого становятся нулём.

Варианты ответа

  1. bf16 точнее fp16 по мантиссе, поэтому округление маленьких градиентов не приводит к ошибкам
  2. GradScaler нужен только на CPU, где fp16 эмулируется программно, а на GPU масштабирование встроено в ядра
  3. В bf16 градиенты не вычисляются: backward идёт в fp32, а bf16 только в forward
  4. У fp16 узкий диапазон экспоненты, малые градиенты обнуляются, и loss масштабируют; у bf16 диапазон fp32правильный ответ

Разбор

fp16: 5 бит экспоненты и 10 бит мантиссы, минимальные числа около 6e-8, градиенты меньше этого становятся нулём. GradScaler умножает loss на большой множитель, а перед шагом делит градиенты обратно и пропускает шаги с inf. bf16: 8 бит экспоненты, как у fp32, но всего 7 бит мантиссы; переполнения и underflow редки, хотя точность ниже.

  • По мантиссе bf16 как раз грубее fp16.
  • GradScaler предназначен для GPU-обучения в fp16.
  • В bf16 градиенты считаются обычно.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме