Половинная точность
Узнайте, как использование половинной точности (FP16) ускоряет работу ИИ за счет более быстрых вычислений, снижения использования памяти и эффективного развертывания моделей.
Половинная точность, также известная как FP16, — это формат чисел с плавающей запятой, который использует 16 бит памяти для представления числа, в отличие от более распространенных 32-битных форматов одинарной точности (FP32) или 64-битных форматов двойной точности (FP64). В контексте глубокого обучения использование половинной точности значительно снижает объем памяти и вычислительные требования модели. Эта компромисс достигается за счет уменьшения числового диапазона и точности. Однако современные методы, в частности обучение со смешанной точностью, сделали FP16 краеугольным камнем эффективного машинного обучения (ML), позволяя быстрее обучать и выполнять вывод с минимальным влиянием на точность модели.
Как работает половинная точность (Half-Precision)?
Переход с FP32 на FP16 вдвое сокращает объем памяти, необходимый для хранения весов модели и активаций. Это позволяет использовать более крупные модели, большие размеры пакетов (batch sizes) или обучать на GPU с меньшим объемом памяти. Кроме того, современные графические процессоры, такие как NVIDIA Tensor Cores, специально разработаны для выполнения 16-битных матричных операций с гораздо более высокой скоростью, чем 32-битные операции.
Основная проблема с FP16 — это ее ограниченный числовой диапазон, который может привести к таким проблемам, как исчезновение градиентов во время обучения. Чтобы противодействовать этому, половинная точность почти всегда реализуется с использованием подхода смешанной точности. Эта стратегия включает в себя выполнение большинства вычислений в FP16 для скорости, но стратегическое использование FP32 для критически важных операций, таких как обновление весов и определенные вычисления функции потерь, для поддержания числовой стабильности. Платформы глубокого обучения, такие как PyTorch и TensorFlow, предлагают встроенную поддержку автоматического обучения со смешанной точностью.
Приложения и примеры
Половинная точность, в основном с помощью методов смешанной точности, широко используется:
- Ускорение обучения моделей: Обучение больших моделей глубокого обучения, таких как модели для классификации изображений или обработки естественного языка (NLP), может быть значительно ускорено с использованием смешанной точности, что сокращает время и затраты на обучение. Платформы, такие как Ultralytics HUB, часто используют эти оптимизации во время сеансов облачного обучения.
- Оптимизация инференса обнаружения объектов: Модели, такие как Ultralytics YOLO11, могут быть экспортированы в такие форматы, как ONNX или TensorRT, с точностью FP16 для более быстрого инференса в реальном времени. Это имеет решающее значение для приложений, требующих высокой пропускной способности, таких как система безопасности, анализирующая несколько видеопотоков, или контроль качества на высокоскоростной производственной линии.
- Развертывание на устройствах с ограниченными ресурсами: Уменьшенный объем памяти и вычислительные затраты моделей FP16 делают их пригодными для развертывания на периферийных ИИ платформах, таких как NVIDIA Jetson, или на мобильных устройствах с использованием таких фреймворков, как TensorFlow Lite или Apple Core ML.
- Обучение больших языковых моделей (LLM): Огромный размер таких моделей, как GPT-3, и других базовых моделей требует использования 16-битных форматов, чтобы уместить модели в память и завершить обучение в разумные сроки.
Сравнение половинной точности с другими форматами
- Bfloat16 (BF16): Альтернативный 16-битный формат, разработанный Google, Bfloat16 выделяет больше битов экспоненте и меньше мантиссе по сравнению с FP16. Это дает ему тот же динамический диапазон, что и FP32, что делает его более устойчивым к переполнению и исчезновению, но за счет более низкой точности. Он широко используется в TPU Google. Вы можете прочитать больше об этом в блоге Google Cloud AI.
- Квантование модели: Хотя оба являются методами оптимизации модели, квантование модели, как правило, преобразует веса с плавающей запятой (FP32 или FP16) в целочисленные форматы с меньшим количеством бит, чаще всего 8-битные целые числа (INT8). Это может обеспечить еще большее ускорение, особенно на ЦП и некоторых ускорителях, но часто требует более тщательного процесса калибровки, такого как обучение с учетом квантования (QAT), чтобы избежать значительного снижения производительности модели.
- Одинарная точность (FP32): Это формат по умолчанию в большинстве фреймворков глубокого обучения. Он обеспечивает высокую точность и широкий динамический диапазон, что делает его надежным для обучения. Однако он медленнее и требует больше памяти, чем половинная точность, что делает его менее идеальным для развертывания больших моделей или для приложений, требующих максимальной скорости. Компромиссы между этими форматами являются ключевым фактором, как показано в различных сравнениях моделей.