PPQ-это масштабируемый высокопроизводительный инструмент квантования нейронной сети для промышленных приложений.
Квантование нейронной сети, как широко используемое решение ускорения нейронной сети, широко используется с 2016 года. По сравнению с обрезкой нейронной сети и поиском архитектуры квантование сети более универсальна и имеет высокую промышленную практическую ценность. Особенно для фишки с конечной стороной, в сценариях, где как на чип, так и энергопотребление ограничены, мы всегда хотим преобразовать все операции с плавающей запятой в операции с фиксированной точкой. Значение количественной технологии заключается в том, что арифметика с плавающей точкой и извлечение памяти очень дорого, и она опирается на сложную арифметику с плавающей точкой и высокую пропускную способность. Если мы сможем приблизить результаты с плавающей запятой, используя операцию с фиксированной точкой с более низкой шириной битов в приемлемого диапазона, это даст нам значительные преимущества в конструкции схемы чипа, энергопотреблении системы, задержке системы и пропускной способности.
Мы находимся в ходе Tide Times, и искусственный интеллект, основанный на нейронных сетях, быстро развивается, и такие технологии, как распознавание изображений, супер -разрешение изображения, генерация контента, реконструкция модели, меняют нашу жизнь. То, что связано с этим,-это постоянно меняющаяся структура модели, которая стала первой сложностью до количественной оценки и развертывания модели. Чтобы справиться со сложными структурами, мы разработали полную логическую структуру вычислительного графика и логику планирования графиков. Эти усилия позволяют PPQ проанализировать и изменять сложные структуры модели, автоматически определять области квантования и неквалификации в сети и позволяют пользователям вручную управлять логикой планирования.
Квантование и оптимизация производительности сети являются серьезными инженерными проблемами. Мы надеемся, что пользователи могут участвовать в квантовании и развертывании сети и участвовать в оптимизации производительности нейронной сети. С этой целью мы предоставляем соответствующие учебные материалы, связанные с развертыванием, в GitHub и умышленно подчеркиваем гибкость интерфейса в дизайне программного обеспечения. Благодаря нашим непрерывным попыткам и исследованиям мы абстрагировали логический тип квантоза, ответственный за инициализацию стратегий квантования на различных аппаратных платформах и позволили пользователям настраивать ширину бита квантования, гранулярность квантования и алгоритмы калибровки каждого оператора и каждого тензора в сети. Мы реорганизуем количественную логику в 27 независимых процессов количественной оптимизации. Пользователи PPQ могут произвольно объединить процесс оптимизации в соответствии с их потребностями для выполнения очень гибких количественных задач. Как пользователь PPQ, вы можете добавить и изменить все процессы оптимизации в соответствии с вашими потребностями и изучить новые границы количественной технологии.
Это структура, созданная для обработки сложных задач квантования - двигатель выполнения PPQ специально разработан для квантования. Начиная с версии PPQ 0.6.6, программное обеспечение имеет встроенную логику выполнения оператора ONNX 99 и национально поддерживает количественные операции моделирования во время выполнения. PPQ может завершить вывод и количественную оценку модели ONNX без OnNXruntime. В рамках архитектурного дизайна мы позволяем пользователям регистрировать новые реализации операторов для PPQ с помощью Python+ Pytorch или C ++ / CUDA, а новая логика также может заменить существующую логику реализации оператора. PPQ позволяет одной и той же оператору иметь различную логику выполнения на разных платформах, тем самым поддерживая эксплуатационное моделирование различных аппаратных платформ. С помощью индивидуальных двигателей выполнения и высокопроизводительной реализации ядра PPQ CUDA, PPQ имеет чрезвычайно значительные преимущества производительности и часто может выполнять количественные задачи с удивительной эффективностью.
Разработка PPQ тесно связана с структурой вывода, которая позволяет нам понять многие детали аппаратного вывода и, таким образом, строго управлять ошибками моделирования аппаратного обеспечения. Благодаря совместным усилиям многих работников с открытым исходным кодом в домашних условиях и за рубежом, PPQ в настоящее время поддерживает совместную работу с многочисленными структурами вывода, такими как Tensorrt, OpenPPL, OpenVino, NCNN, MNN, OnNxruntime, Tengine, SNPE, Graphcore, Metax и т. Д., А также предварительно соответствующие квантизаторы и экспортные логики. PPQ - это очень масштабируемая структура квантования модели. С функцией функции в ppq.lib вы можете расширить возможности квантования PPQ на другие возможные аппаратные и рассуждающие библиотеки. Мы с нетерпением ждем возможности поработать с вами, чтобы принести искусственный интеллект тысячам домохозяйств.
Установите CUDA из CUDA Toolkit
Установите комплекс
apt-get install ninja-build # for debian/ubuntu user
yum install ninja-build # for redhat/centos userДля пользователя Windows:
(1) Скачать ninja.exe с https://github.com/ninja-build/ninja/releases, добавьте его в путь Windows.
(2) Установить Visual Studio 2019 с https://visualstudio.microsoft.com.
(3) Добавьте свой компилятор C ++ в среду Path Windows, если вы используете Visual Studio, это должно быть похоже на «C: Program Files Microsoft Visual Studio 2019 VC VC Tools MSVC 14.16.27023 bin hostx86 x86»
(4) Обновление версии Pytorch до 1.10+.
git clone https://github.com/openppl-public/ppq.git
cd ppq
pip install -r requirements.txt
python setup.py installdocker pull stephen222/ppq:ubuntu18.04_cuda11.4_cudnn8.4_trt8.4.1.5
docker run -it --rm --ipc=host --gpus all --mount type=bind,source=your custom path,target=/workspace stephen222/ppq:ubuntu18.04_cuda11.4_cudnn8.4_trt8.4.1.5 /bin/bash
git clone https://github.com/openppl-public/ppq.git
cd ppq
export PYTHONPATH= ${PWD} : ${PYTHONPATH}python3 -m pip install ppq| Описание | Ссылка на ссылку | |
|---|---|---|
| 01 | Квантование модели | Onnx, Caffe, Pytorch |
| 02 | Привод | исполнитель |
| 03 | Анализ ошибок | анализатор |
| 04 | Калибратор | Калибровка |
| 05 | Сеть тонкая настройка | тонкая настройка |
| 06 | Планирование сети | отправлять |
| 07 | Лучшие практики | Лучшая практика |
| 08 | Целевая платформа | платформа |
| 09 | Процесс оптимизации | Оптимальный |
| 10 | Картинка слияние | Слияние |
| Описание | Ссылка на ссылку | |
|---|---|---|
| 01 | QuantsImpliPass (общий количественный процесс оптимизации) | док |
| 02 | QuantFusionPass (общий процесс слияния количественного графика) | док |
| 03 | QuantAlignmentPass (общий процесс выравнивания квантования) | док |
| 04 | RuntimeCalitibrationPass (процесс калибровки параметров) | док |
| 05 | BiasCorrectionPass (процесс коррекции смещения) | док |
| 06 | QuantsImpliPass (общий количественный процесс оптимизации) | док |
| 07 | LayerWiSeeQualizationPass (процесс выравнивания веса межслойного веса) | док |
| 08 | LayerSpilitPass (процесс разделения оператора) | док |
| 09 | Учился Stepsizepass (процесс тонкой настройки сети) | док |
| 10 | Другой (другой) | Обратиться к |
| Desc введение | Ссылка на ссылку | |
|---|---|---|
| 01 | Основы компьютерной архитектуры | связь |
| 02 | Анализ производительности сети | связь |
| 03 | Количественный принцип расчета | Часть1, часть 2 |
| 04 | Оптимизация графика и количественное моделирование | связь |
| 05 | Планирование графиков и совпадение шаблонов | связь |
| 06 | Развертывание нейронной сети | связь |
| 07 | Количественный выбор параметров | связь |
| 08 | Количественный анализ распространения ошибок | связь |
| Примеры | Платформа развертывания сети (платформа) | Входной модель формат (формат) | Ссылка (ссылка) | Связанные видео (видео) |
|---|---|---|---|---|
TensorRT | ||||
| Используйте Torch2trt, чтобы ускорить сеть | пирог | пирог | связь | связь |
| Тенсорт -количественный обучение | Тенсорт | пирог | связь | связь |
| Квантование пост-тренировки Tensorrt (PPQ) | Тенсорт | Onnx | 1. Квант с Tensorrt OnNxParser 2. Quant с Tensorrt API | |
| Развертывание Tensorrt FP32 | Тенсорт | Onnx | связь | связь |
| Сравнение производительности Tensorrt | Тенсорт | пирог | связь | связь |
| Tensorrt Profiler | Тенсорт | пирог | связь | связь |
onnxruntime | ||||
| Используйте onnxruntime для ускорения вашей сети | Onnxruntime | Onnx | связь | связь |
| квантование после тренировки ONNX (PPQ) | Onnxruntime | Onnx | связь | связь |
| Сравнение производительности Onnxruntime | Onnxruntime | пирог | связь | связь |
openvino | ||||
| Используйте OpenVino, чтобы ускорить вашу сеть | OpenVino | Onnx | связь | |
| openvino Количественное обучение | OpenVino | пирог | связь | |
| Openvino post-training Количественная оценка (PPQ) | OpenVino | Onnx | связь | |
| Сравнение производительности OpenVino | OpenVino | пирог | связь | |
snpe | ||||
| Квантование обучения после SNPE (PPQ) | SNPE | кофе | связь | |
ncnn | ||||
| ncnn квантование после тренировки (PPQ) | ncnn | Onnx | связь | |
OpenPPL | ||||
| PPL CUDA после тренировки квантование (PPQ) | PPL CUDA | Onnx | связь |
| Desc введение | Ссылка на ссылку | |
|---|---|---|
| 01 | PPQ Количественный процесс выполнения | связь |
| 02 | Анализ сети PPQ | связь |
| 03 | PPQ Количественное планирование графиков | связь |
| 04 | Целевая платформа PPQ и TQC | связь |
| 05 | PPQ Quantizer | связь |
| 06 | PPQ Количественной процесс оптимизации | связь |
| 07 | PPQ Количественная функция | связь |
| WeChat Office Account | QQ Group |
|---|---|
| Openppl | 627853444 |
![]() | ![]() |
Электронная почта: [email protected]
Мы ценим все вклад. Если вы планируете внести свой вклад исправления ошибок, пожалуйста, сделайте это без дальнейшего обсуждения.
Если вы планируете внести новые функции, функции утилиты или расширения в ядро, сначала откройте проблему и обсудите эту функцию с нами. Отправка PR без обсуждения может в конечном итоге привести к отклоненному PR, потому что мы могли бы взять ядро в другом направлении, чем вы могли бы знать.
PPQ тестируется с моделями из MMLAB-Classiation, Detection MMLAB, MMLAB-Segamentation, MMLAB-редактирования, здесь мы перечислили часть результата тестирования.
| Модель | Тип | Калибровка | Диспетчер | Показатель | PPQ (SIM) | Pplcuda | FP32 |
|---|---|---|---|---|---|---|---|
| Resnet-18 | Классификация | 512 IMGS | Консервативный | ACC-TOP-1 | 69,50% | 69,42% | 69,88% |
| Resnext-101 | Классификация | 512 IMGS | Консервативный | ACC-TOP-1 | 78,46% | 78,37% | 78,66% |
| SE-Resnet-50 | Классификация | 512 IMGS | Консервативный | ACC-TOP-1 | 77,24% | 77,26% | 77,76% |
| Shufflenetv2 | Классификация | 512 IMGS | Консервативный | ACC-TOP-1 | 69,13% | 68,85% | 69,55% |
| Mobilenetv2 | Классификация | 512 IMGS | Консервативный | ACC-TOP-1 | 70,99% | 71,1% | 71,88% |
| ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| сетчатка | Обнаружение | 32 IMGS | Pplnn | bbox_map | 36,1% | 36,1% | 36,4% |
| FAST_RCNN | Обнаружение | 32 IMGS | Pplnn | bbox_map | 36,6% | 36,7% | 37,0% |
| FSAF | Обнаружение | 32 IMGS | Pplnn | bbox_map | 36,5% | 36,6% | 37,4% |
| mask_rcnn | Обнаружение | 32 IMGS | Pplnn | bbox_map | 37,7% | 37,6% | 37,9% |
| ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| Deepabv3 | Сегментация | 32 IMGS | Консервативный | AACC / Miou | 96,13% / 78,81% | 96,14% / 78,89% | 96,17% / 79,12% |
| Deepabv3plus | Сегментация | 32 IMGS | Консервативный | AACC / Miou | 96,27% / 79,39% | 96,26% / 79,29% | 96,29% / 79,60% |
| FCN | Сегментация | 32 IMGS | Консервативный | AACC / Miou | 95,75% / 74,56% | 95,62% / 73,96% | 95,68% / 72,35% |
| Pspnet | Сегментация | 32 IMGS | Консервативный | AACC / Miou | 95,79% / 77,40% | 95,79% / 77,41% | 95,83% / 77,74% |
| ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| srcnn | Редактирование | 32 IMGS | Консервативный | PSNR / SSIM | 27,88% / 79,70% | 27,88% / 79,07% | 28,41% / 81,06% |
| Эсрган | Редактирование | 32 IMGS | Консервативный | PSNR / SSIM | 27,84% / 75,20% | 27,49% / 72,90% | 27,51% / 72,84% |

Этот проект распространяется по лицензии Apache, версия 2.0.