Выбор ответа Senior Оптимизаторы и обучение обновлено
Mixed precision
Вопрос
Зачем при обучении в fp16 нужен GradScaler, а в bf16 обычно нет?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: У fp16 узкий диапазон экспоненты, малые градиенты обнуляются, и loss масштабируют; у bf16 диапазон fp32. fp16: 5 бит экспоненты и 10 бит мантиссы, минимальные числа около 6e-8, градиенты меньше этого становятся нулём.
Варианты ответа
- bf16 точнее fp16 по мантиссе, поэтому округление маленьких градиентов не приводит к ошибкам
- GradScaler нужен только на CPU, где fp16 эмулируется программно, а на GPU масштабирование встроено в ядра
- В bf16 градиенты не вычисляются: backward идёт в fp32, а bf16 только в forward
- У 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 ошибок.
Предыдущий вопрос
Learning rate при fine-tuning
Следующий вопрос
Ревью: шаг обучения с клиппингом и AMP