Обучение со смешанной точностью - это техника, используемая в глубоком обучении (ГОО) для ускорения обучения моделей и снижения потребления памяти без существенного влияния на точность модели. Она достигается за счет стратегического использования комбинации различных форматов точности для хранения и вычисления значений в нейронной сети (НС). Обычно это подразумевает использование стандартного 32-битного формата с плавающей точкой (FP32 или single-precision) для критически важных частей, таких как хранение весов модели, в то время как для вычислений во время прямого и обратного проходов(backpropagation) используются более быстрые и менее требовательные к памяти 16-битные форматы с плавающей точкой (FP16 или half-precision, а иногда BF16 или BFloat16).
Как работает смешанная точность
Основная идея смешанной точности заключается в том, чтобы использовать преимущества скорости и памяти форматов с более низкой точностью и при этом снизить потенциальные проблемы с численной стабильностью. Общий подход включает в себя следующие шаги:
- Поддерживай мастер-весы в FP32: первичная копия весов модели хранится в стандартном формате FP32, чтобы обеспечить высокую точность обновления весов.
- Используй FP16/BF16 для вычислений: Во время цикла обучения веса FP32 преобразуются в FP16 или BF16 для прямого и обратного проходов. Вычисления с использованием этих форматов с более низкой точностью значительно быстрее на современном оборудовании, например на графических процессорахNVIDIA , оснащенных Tensor ядрами, которые специально разработаны для ускорения матричных умножений с более низкой точностью.
- Масштабирование с потерями: При использовании FP16 диапазон представимых чисел гораздо меньше, чем у FP32. Это может привести к тому, что небольшие значения градиента, вычисленные во время обратного распространения, станут нулевыми (underflow), что помешает обучению. Чтобы предотвратить это, значение потерь масштабируется перед обратным распространением, эффективно увеличивая градиенты в диапазон, представимый FP16. Перед обновлением веса эти градиенты снова уменьшаются. BF16, обладая более широким динамическим диапазоном, чем FP32, но меньшей точностью, часто позволяет избежать необходимости масштабирования потерь.
- Обнови мастер-весы: Вычисленные градиенты (уменьшенные, если использовалось масштабирование потерь) используются для обновления мастер-копии весов, которые остаются в FP32.
Такой тщательный баланс позволяет моделям обучаться быстрее и использовать меньше GPU памяти.
Преимущества смешанной точности
- Более быстрое обучение: Вычисления с низкой точностью (FP16/BF16) выполняются гораздо быстрее на совместимом оборудовании, что значительно сокращает время, необходимое для каждой эпохи обучения. Это позволяет быстрее проводить итерации и эксперименты.
- Уменьшенное потребление памяти: Значения FP16/BF16 требуют вдвое меньше памяти, чем значения FP32. Это уменьшение относится к активациям, хранящимся во время прямого прохода, и градиентам, вычисляемым во время обратного прохода. Меньшее потребление памяти позволяет обучать более крупные модели или использовать большие объемы партий, что может улучшить производительность модели и стабильность обучения.
- Повышение эффективности: Сочетание более быстрых вычислений и меньших требований к пропускной способности памяти приводит к более эффективному использованию аппаратных ресурсов, что потенциально снижает стоимость обучения для облачных вычислений или локальных кластеров.
Смешанная точность против смежных понятий
- Полная точность (FP32): Традиционное обучение использует FP32 для всего хранения и вычислений. Как правило, он более стабилен численно, но медленнее и требует больше памяти, чем смешанная точность.
- Половинная точность (FP16/BF16): Использование только FP16 или BF16 на протяжении всего обучения может привести к значительной численной нестабильности (особенно FP16 без таких техник, как масштабирование потерь) и потенциальной потере точности. Смешанная точность - это более надежный подход, который сочетает в себе FP32 и FP16/BF16.
- Квантование модели: Обычно это означает преобразование весов и/или активаций модели в форматы еще более низкой точности, такие как 8-битные целые числа (INT8), в первую очередь для оптимизации скорости и эффективности выводов, особенно на граничных устройствах. Хотя это иногда используется во время обучения(Quantization-Aware Training), оно отличается от типичной смешанной точности FP32/FP16, используемой на стандартных этапах обучения.
Применение и примеры
Смешанная точность широко используется при обучении крупномасштабных моделей машинного обучения (ML).
- Обучение больших языковых моделей (LLM): Такие модели, как GPT-3, BERT и T5, имеют миллиарды параметров. Их обучение с использованием только FP32 потребовало бы запредельных объемов памяти и времени GPU . Смешанная точность делает обучение таких фундаментальных моделей осуществимым за счет значительного сокращения потребностей в памяти и ускорения вычислений. Такие фреймворки, как PyTorch и TensorFlow обеспечивают встроенную поддержку обучения со смешанной точностью.
- Ускорение моделей компьютерного зрения: В компьютерном зрении (КВ) смешанная точность ускоряет обучение сложных моделей, таких как конволюционные нейронные сети (CNN) и трансформаторы зрения (ViT), используемых для таких задач, как обнаружение объектов, сегментация изображений и их классификация. Например, модели Ultralytics YOLO , включая новейшие Ultralytics YOLO11могут использовать смешанную точность во время обучения для ускорения сходимости и эффективного использования ресурсов, как отмечается в наших советах по обучению моделей и их сравнении. Это позволяет пользователям быстрее обучать высокопроизводительные модели на таких наборах данных, как COCO. Более быстрые циклы обучения способствуют более быстрой настройке гиперпараметров и разработке моделей на таких платформах, как Ultralytics HUB. Смешанная точность также может использоваться во время выводов, чтобы ускорить развертывание, особенно при экспорте моделей в такие форматы, как TensorRT которые сильно оптимизированы для более низкой точности.