FLOPs, или операции с плавающей точкой, представляют собой фундаментальную меру вычислительной сложности модели машинного обучения (ML), особенно в глубоком обучении. Она определяет общее количество вычислений с плавающей точкой (таких как сложение, вычитание, умножение, деление), необходимых для одного прохода модели вперед, обычно во время вывода. Понимание FLOPs очень важно для оценки эффективности модели, сравнения различных архитектур и определения пригодности модели для различных аппаратных платформ, от мощных облачных серверов до ограниченных в ресурсах пограничных устройств.
Что такое фЛОПы?
Операция с плавающей точкой - это любое математическое вычисление, в котором участвуют числа, имеющие десятичную точку (числа с плавающей точкой). В нейронных сетях (НС) эти операции широко применяются в таких слоях, как свертки и полностью связанные слои. FLOPs измеряет общее количество этих операций, необходимых для обработки одного входного сигнала (например, изображения).
Поскольку современные модели глубокого обучения включают в себя миллиарды таких операций, FLOPs часто выражают в гигафлопах (GFLOPs, миллиарды FLOPs) или терафлопах (TFLOPs, триллионы FLOPs). Важно не путать FLOPs (total operations, мера вычислительной нагрузки) с FLOPS (Floating-Point Operations Per Second, мера скорости аппаратной обработки, например возможностиGPU). В контексте оценки сложности модели под "FLOPs" почти всегда подразумевается общее количество операций.
Актуальность в области искусственного интеллекта и машинного обучения
FLOPs служит важной, не зависящей от аппаратного обеспечения метрикой для оценки вычислительной стоимости модели ИИ. Ключевые аспекты его значимости включают в себя:
- Сравнение эффективности: FLOPs позволяют исследователям и практикам сравнивать вычислительные требования различных архитектур моделей независимо от конкретных аппаратных или программных оптимизаций. Например, при сравнении таких моделей, как Ultralytics YOLO11 и YOLOv10, FLOPs дают представление об их относительной вычислительной эффективности наряду с метриками точности.
- Аппаратная пригодность: Модели с меньшим количеством FLOP обычно требуют меньше вычислительной мощности, что делает их более подходящими для установки на устройства с ограниченными ресурсами, такие как смартфоны, Raspberry Pi или платформы NVIDIA Jetson, распространенные в пограничных вычислениях.
- Оценка скорости умозаключений: Хотя это и не является прямым показателем скорости, меньшее количество FLOP часто коррелирует с более быстрой задержкой вывода. Однако реальная скорость зависит от таких факторов, как шаблоны доступа к памяти, аппаратный параллелизм (CPU vs. GPU vs. TPU), и оптимизированных программных библиотек, таких как TensorRT или OpenVINO.
- Проектирование и оптимизация моделей: FLOPs - ключевой момент при проектировании моделей, поиске нейронной архитектуры (NAS) и методах оптимизации, таких как обрезка модели, направленных на снижение вычислительных затрат при сохранении производительности.
ФЛОПы против смежных понятий
Полезно отличать FLOP от других распространенных метрик:
- FLOPs vs. Parameters: Количество параметров (или весов модели) указывает на размер модели с точки зрения объема памяти. FLOPs измеряет вычислительные затраты на выполнение модели. У модели может быть много параметров, но мало FLOPs (например, если веса используются редко) или мало параметров, но много FLOPs (например, если на каждый параметр приходится много операций). Обе метрики важны для оценки эффективности. Например, в YOLOv9 появились техники, позволяющие добиться высокой точности при относительно меньшем количестве параметров и FLOP по сравнению с некоторыми предшественниками.
- FLOPs vs. Inference Speed: FLOPs представляют собой теоретическую вычислительную работу, в то время как скорость вывода (часто измеряется в кадрах в секунду (FPS) или миллисекундах на вывод) - это реальная измеренная производительность на конкретном оборудовании. Такие факторы, как пропускная способность памяти, стек программного обеспечения (PyTorch, TensorFlow), квантование и размер пакета значительно влияют на реальную скорость. Оптимизация под задержку против пропускной способности показывает, как можно настроить практическую производительность, не ограничиваясь только FLOPs.
- FLOPs против MACs/MACC: Операции умножения и сложения (MACs или MACC) подсчитывают количество слитых операций умножения и сложения, распространенных в конволюционных нейронных сетях (CNN). Поскольку один MAC обычно включает в себя одно умножение и одно сложение, его часто аппроксимируют как 2 FLOPs. В некоторых исследовательских работах или карточках моделей вместо FLOP указываются MAC. Очень важно проверять, какая метрика используется, так как они отличаются примерно в два раза. Понимание этой разницы является ключевым при сравнении моделей на основе заявленных вычислительных затрат.
Применение и примеры
FLOP-ы широко используются в различных контекстах ИИ и ML:
- Выбор модели для пограничного развертывания: Компании, разрабатывающей умную камеру безопасности, нужна модель обнаружения объектов, которая могла бы эффективно работать на граничном устройстве с ограниченной вычислительной мощностью. Они сравнивают несколько моделей, включая разные размеры Ultralytics YOLO (например, YOLO11n против YOLO11s). Изучив показатели FLOPs, указанные для каждой модели (например, в документацииUltralytics YOLO11 ), они могут выбрать самую большую модель, которая отвечает их требованиям к задержкам, учитывая вычислительный бюджет устройства (измеряемый в аппаратных FLOPS). Модели с меньшим количеством FLOPs, такие как YOLO11n, являются главными кандидатами.
- Бенчмаркинг новых архитектур: Исследователи, разрабатывающие новую архитектуру компьютерного зрения, должны продемонстрировать ее эффективность. Они сравнивают точность своей модели (например, mAP) с ее GFLOPs на стандартных эталонных наборах данных, таких как COCO. Они изображают свою модель на графике соотношения точности и GFLOPs рядом с существующими современными моделями (например, EfficientNet или различными версиями YOLO ), чтобы показать улучшенные компромиссы. Многие страницы сравнения моделей, например YOLOv9 vs YOLOX, используют FLOPs в качестве ключевой точки сравнения.
Вычисление и оценка FLOPs
FLOP обычно рассчитываются путем послойного анализа архитектуры модели и суммирования операций, необходимых для каждого слоя, с учетом размеров входа/выхода и типа слоя(сверточный, полностью подключенный и т.д.). Различные инструменты и библиотеки, такие как fvcore или встроенные профилировщики во фреймворках глубокого обучения, могут помочь автоматизировать этот расчет или предоставить приблизительные данные. Разрешение входа значительно влияет на количество FLOP для многих моделей зрения.
Ограничения
Несмотря на свою полезность, FLOP имеют свои ограничения:
- Они не учитывают стоимость доступа к памяти (MAC), которая может стать существенным узким местом.
- Они не отражают степень параллелизма, возможного в операциях.
- Фактическая производительность сильно зависит от оптимизаций под конкретное оборудование и эффективности программных библиотек, лежащих в основе(cuDNN, Intel MKL).
- Некоторые операции (например, функции активации, такие как ReLU) имеют низкое количество FLOP, но все равно могут влиять на задержку.
Поэтому FLOP следует рассматривать наряду с другими показателями производительности, параметрами и реальными бенчмарками, чтобы получить полную картину эффективности модели. Такие инструменты, как Ultralytics HUB, помогут управлять моделями и отслеживать различные аспекты производительности во время разработки и развертывания.