Оптимизируйте модели машинного обучения с помощью обрезки моделей. Добейтесь более быстрого вывода, снижения использования памяти и энергоэффективности для развертываний с ограниченными ресурсами.
Обрезка моделей - это метод оптимизации моделей разработанная для уменьшения размера и вычислительной сложности нейронных сетей путем удаления ненужных параметров. Поскольку модели искусственного интеллекта увеличиваются в размерах для достижения более высокой производительности, они часто становятся перегруженными параметрами, содержащими множество связей или нейронов, которые вносят незначительный вклад в конечный результат. Выявление и устранения этих лишних компонентов, разработчики могут создавать более компактные модели, требующие меньше памяти и энергии. и при этом обеспечивают более быстрый вывод в реальном времени. Этот процесс особенно важен для развертывания сложных архитектур, таких как YOLO11 на аппаратных средствах с ограниченными ресурсами, таких как мобильных телефонах или встроенных датчиках.
Процесс обрезки обычно включает три основных этапа: обучение, обрезку и тонкая настройка. Первоначально большая модель обучается до сходимости, чтобы уловить сложные особенности. На этапе обрезки алгоритм оценивает важность определенных параметров - обычно weights and biases-на основе таких критериев, как величина или чувствительность. Параметры, которые считаются несущественными, устанавливаются на ноль или полностью удаляются.
Однако простое вырезание частей сети может ухудшить ее точность. Чтобы противостоять этому, модель подвергается последующий раунд переобучения, известный как тонкая настройка. Этот шаг позволяет оставшимся параметрам подстроиться и компенсировать недостающие связи, часто восстанавливая производительность модели до уровня, близкого к исходному. На сайте Эффективность этого подхода подтверждается Гипотеза лотерейного билета, которая предполагает, что плотные сети содержат меньшие подсети, способные достигать сопоставимой точности при изолированном обучении.
Стратегии обрезки обычно классифицируются по структуре удаляемых компонентов:
Хотя обе эти техники являются популярными методами оптимизации, важно отличать обрезку от квантования модели. Обрезка направлена на сокращение количества параметров (связей или нейронов), эффективно изменяя архитектуру модели. В В отличие от этого, квантование снижает точность этих параметров, например, преобразуя 32-битные числа с плавающей точкой в 8-битные целые числа. Эти методы часто дополняют друг друга; разработчик может сначала обрезать модель чтобы удалить избыточность, а затем квантовать ее, чтобы еще больше уменьшить объем памяти для развертывания. развертывания.
Обрезка играет важнейшую роль в обеспечении доступности передовых компьютерного зрения в практических сценариях:
Такие фреймворки, как PyTorch предоставляют встроенные утилиты для применения обрезки программно. В следующем примере показано, как применить неструктурированную обрезку к конволюционному слоя, что является обычной операцией перед экспортом модели в оптимизированный формат, например ONNX.
import torch
import torch.nn.utils.prune as prune
# Initialize a standard convolutional layer
layer = torch.nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3)
# Apply L1 unstructured pruning to remove 30% of the connections
# This sets the smallest 30% of weights (by absolute value) to zero
prune.l1_unstructured(layer, name="weight", amount=0.3)
# Verify sparsity: calculate the percentage of zero parameters
sparsity = float(torch.sum(layer.weight == 0)) / layer.weight.nelement()
print(f"Layer sparsity: {sparsity:.2%}")