Совместная оптимизация

Поддерживается Arm ML Tooling

В этом документе представлен обзор экспериментальных API-интерфейсов для объединения различных методов оптимизации моделей машинного обучения для развертывания.

Обзор

Совместная оптимизация — это всеобъемлющий процесс, включающий различные методы создания модели, которая при развертывании демонстрирует наилучший баланс целевых характеристик, таких как скорость логического вывода, размер модели и точность.

Идея совместной оптимизации состоит в том, чтобы опираться на отдельные методы, применяя их один за другим для достижения совокупного эффекта оптимизации. Возможны различные комбинации следующих оптимизаций:

Проблема, которая возникает при попытке связать эти методы вместе, заключается в том, что применение одного обычно уничтожает результаты предыдущего метода, портя общее преимущество одновременного применения всех их; например, кластеризация не сохраняет разреженность, введенную API обрезки. Чтобы решить эту проблему, мы вводим следующие экспериментальные методы совместной оптимизации:

Они предоставляют несколько путей развертывания, которые можно использовать для сжатия модели машинного обучения и использования преимуществ аппаратного ускорения во время логического вывода. На приведенной ниже диаграмме показаны несколько путей развертывания, которые можно исследовать в поисках модели с желаемыми характеристиками развертывания, где конечные узлы представляют собой модели, готовые к развертыванию, то есть они частично или полностью квантованы и имеют формат tflite. Зеленая заливка указывает на этапы, требующие переобучения/тонкой настройки, а пунктирная красная рамка выделяет этапы совместной оптимизации. Метод, используемый для получения модели в данном узле, указан в соответствующей метке.

collaborative optimization

Прямой путь развертывания только для квантования (после обучения или QAT) на рисунке выше не показан.

Идея состоит в том, чтобы достичь полностью оптимизированной модели на третьем уровне описанного выше дерева развертывания; однако любой из других уровней оптимизации может оказаться удовлетворительным и обеспечить требуемый компромисс между задержкой и точностью вывода, и в этом случае дальнейшая оптимизация не требуется. Рекомендуемый процесс обучения будет заключаться в итеративном прохождении уровней дерева развертывания, применимых к целевому сценарию развертывания, и проверке того, удовлетворяет ли модель требованиям к задержке вывода, и, если нет, использовать соответствующий метод совместной оптимизации для дальнейшего сжатия модели и повторения. пока модель не будет полностью оптимизирована (обрезана, кластеризована и квантована), если это необходимо.

На рисунке ниже показаны графики плотности ядра выборочного веса, проходящего через конвейер совместной оптимизации.

collaborative optimization density plot

Результатом является квантованная модель развертывания с уменьшенным количеством уникальных значений, а также значительным количеством разреженных весов в зависимости от целевой разреженности, указанной во время обучения. Помимо существенных преимуществ сжатия моделей, использование этих разреженных кластеризованных моделей позволяет использовать специальную аппаратную поддержку для значительного сокращения задержки логического вывода.

Полученные результаты

Ниже приведены некоторые результаты точности и сжатия, полученные нами при экспериментировании с путями совместной оптимизации PQAT и CQAT.

Обучение квантованию с сохранением разреженности (PQAT)

Модель Предметы Базовый уровень Усеченная модель (разреженность 50%) Модель QAT Модель ПКАТ
DS-CNN-L FP32 Top1 Точность 95,23% 94,80% (Поддельный INT8) 94,721% (Поддельный INT8) 94,128%
Полное целочисленное квантование INT8 94,48% 93,80% 94,72% 94,13%
Сжатие 528 128 → 434 879 (17,66%) 528 128 → 334 154 (36,73%) 512 224 → 403 261 (21,27%) 512 032 → 303 997 (40,63%)
Мобайлнет_v1-224 FP32 Лучшая точность 1 70,99% 70,11% (Поддельный INT8) 70,67% (Фальшивый INT8) 70,29%
Полное целочисленное квантование INT8 69,37% 67,82% 70,67% 70,29%
Сжатие 4 665 520 → 3 880 331 (16,83%) 4 665 520 → 2 939 734 (37,00%) 4 569 416 → 3 808 781 (16,65%) 4 569 416 → 2 869 600 (37,20%)

Обучение квантованию с сохранением кластера (CQAT)

Модель Предметы Базовый уровень Кластерная модель Модель QAT Модель CQAT
Mobilenet_v1 на CIFAR-10 FP32 Top1 Точность 94,88% 94,48% (Поддельный INT8) 94,80% (Поддельный INT8) 94,60%
Полное целочисленное квантование INT8 94,65% 94,41% 94,77% 94,52%
Размер 3,00 МБ 2,00 МБ 2,84 МБ 1,94 МБ
Mobilenet_v1 на ImageNet FP32 Лучшая точность 1 71,07% 65,30% (Поддельный INT8) 70,39% (Поддельный INT8) 65,35%
Полное целочисленное квантование INT8 69,34% 60,60% 70,35% 65,42%
Сжатие 4 665 568 → 3 886 277 (16,7%) 4 665 568 → 3 035 752 (34,9%) 4 569 416 → 3 804 871 (16,7%) 4 569 472 → 2 912 655 (36,25%)

Результаты CQAT и PCQAT для моделей, сгруппированных по каналам

Приведенные ниже результаты получены с использованием метода кластеризации по каналам . Они иллюстрируют, что если сверточные слои модели сгруппированы по каналам, то точность модели выше. Если в вашей модели много сверточных слоев, мы рекомендуем кластеризовать их по каналам. Степень сжатия останется прежней, но точность модели будет выше. В наших экспериментах конвейер оптимизации модели «кластеризованный -> QAT с сохранением кластера -> квантование после обучения, int8».

Модель Кластеризованный -> CQAT, квантованный int8 Кластеризовано на канал -> CQAT, квантизировано int8
DS-CNN-L 95,949% 96,44%
Мобильная сеть-V2 71,538% 72,638%
MobileNet-V2 (урезано) 71,45% 71,901%

Примеры

Сквозные примеры методов совместной оптимизации, описанные здесь, см. в блокнотах с примерами CQAT , PQAT , кластеризации с сохранением разреженности и PCQAT .