Автоматическая смешанная точность
Определение
Автоматическая смешанная точность — режим вычислений, в котором библиотека выбирает для операций числовые форматы разной точности. В PyTorch autocast выбирает формат чисел, а GradScaler отдельно масштабирует значение функции потерь и градиенты.
Также ищут: automatic mixed precision · AMP · смешанная точность
Зачем это знать
Тип весов сам по себе не показывает точность каждой операции. Проверьте, когда масштаб помогает сохранить малый градиент и в каком порядке снимать масштаб и обрезать градиенты.
Карта понятия
Использует
Связано
Что подтверждено
В PyTorch 2.9 autocast по правилам операций выбирает используемый тип данных; он не переводит все параметры модели и входы в FP16. Autocast и GradScaler — отдельные механизмы.
Граница применимости: Только autocast и GradScaler из PyTorch 2.9; выбор точности зависит от операции и контекста. Не обещает единый тип для всей модели или каждого вычисления.
GradScaler умножает значение функции потерь на масштаб S (loss scaling) до обратного прохода и снимает масштаб с градиентов перед обновлением параметров. В учебном примере для binary16 сохранены субнормальные числа, округление — к ближайшему, при равенстве к чётному; round16(x) обозначает такое округление. Для скалярного градиента g=2^-25 и S=256: round16(g)=0, round16(Sg)=2^-17, а снятие масштаба в FP32 возвращает g. Масштабирование после округления g до нуля его не восстановит.
Граница применимости: Числовой пример — авторский скалярный расчёт при сохранении субнормальных binary16 и округлении к ближайшему с выбором чётного при равенстве, не трасса autograd. Масштабирование помогает снизить риск потери малых FP16-градиентов, но не гарантирует точность или качество обучения.
При обрезке градиентов с GradScaler сначала вызовите scaler.unscale_(optimizer), затем ограничивайте норму. Иначе ограничение применяется к масштабированным значениям. GradScaler.step пропускает шаг оптимизатора, когда проверка обнаруживает градиенты inf или NaN.
Граница применимости: Порядок из примеров PyTorch 2.9; не описание точного численного результата реализации torch.nn.utils.clip_grad_norm_.
При накоплении градиентов одного эффективного пакета сохраняйте один масштаб S для всех микропакетов. Снимите масштаб и обновите параметры после всех вкладов; сам GradScaler не делит сумму на число микропакетов. Обновляйте масштаб на границе эффективного пакета, а не между его частями.
Граница применимости: Порядок для накопления одного эффективного пакета в примерах PyTorch 2.9; не задаёт способ нормирования функции потерь или размер пакета.
Что проверить
- Уточните, какие операции исполняются в каждом формате, а не только в каком формате хранят веса.
- Сохраняйте один масштаб для всех вкладов эффективного пакета и снимайте его после накопления.
- До обрезки градиентов снимите масштаб; качество проверяйте отдельно на той же задаче.
Первоисточники
- Automatic Mixed Precision package - torch.amp
Документация описывает выбор точности операций и отдельный механизм масштабирования градиентов.
- Mixed Precision Training
Раздел описывает масштабирование функции потерь и градиентов как средство сохранить малые значения FP16.
Утверждения: 02
- Automatic Mixed Precision examples
Примеры задают порядок снятия масштаба, обрезки и накопления градиентов.