PPQ는 산업 응용 분야를위한 확장 가능하고 고성능 신경 네트워크 양자화 도구입니다.
일반적으로 사용되는 신경망 가속 솔루션 인 신경망 정량화는 2016 년부터 널리 사용되어 왔습니다. 신경망 가지 치기 및 아키텍처 검색과 비교하여 네트워크 양자화는 다재다능하고 산업 실용적 가치가 높습니다. 특히 칩 영역과 전력 소비가 제한되는 시나리오에서 특히 엔드 사이드 칩의 경우 항상 모든 부동 소수점 작업을 고정점 작업으로 변환하려고합니다. 정량적 기술의 가치는 부동 소수점 산술 및 메모리 페치가 매우 비싸다는 사실에 있으며, 복잡한 부동 소수점 산술 및 높은 메모리 페치 대역폭에 의존한다는 사실에 있습니다. 허용 범위 내에서 비트 너비가 낮은 고정점 작업을 사용하여 부동 소수점 결과를 근사화 할 수 있다면 칩 회로 설계, 시스템 전력 소비, 시스템 대기 시간 및 처리량에 상당한 이점이 있습니다.
우리는 시대의 흐름에 있으며, 신경망을 기반으로 한 인공 지능은 빠르게 발전하고 있으며 이미지 인식, 이미지 수퍼 해상도, 콘텐츠 생성, 모델 재구성과 같은 기술이 우리의 삶을 변화시키고 있습니다. 그것과 함께 제공되는 것은 끊임없이 변화하는 모델 구조로, 모델 정량화 및 배포 전에 첫 번째 어려움이되었습니다. 복잡한 구조를 다루기 위해 완전한 계산 그래프 논리 구조와 그래프 스케줄링 로직을 설계했습니다. 이러한 노력을 통해 PPQ는 복잡한 모델 구조를 구문 분석하고 수정하고 네트워크의 양자화 및 비 정액 영역을 자동으로 결정하며 사용자가 스케줄링 로직을 수동으로 제어 할 수 있습니다.
네트워크의 양자화 및 성능 최적화는 심각한 엔지니어링 문제입니다. 우리는 사용자가 네트워크의 양자화 및 배포에 참여하고 신경망의 성능 최적화에 참여할 수 있기를 바랍니다. 이를 위해 GitHub에 해당 배포 관련 학습 자료를 제공하고 소프트웨어 설계에서 인터페이스의 유연성을 의도적으로 강조합니다. 지속적인 시도와 탐색을 통해 우리는 다른 하드웨어 플랫폼에서 양자화 전략을 초기화하는 역할을 담당하는 논리 유형의 양자 유형을 추상화했으며, 사용자가 각 연산자 및 네트워크의 각 연산자의 양자화 비율, 양자화 입상 및 교정 알고리즘을 사용자 정의 할 수있었습니다. 우리는 정량적 논리를 27 개의 독립적 인 정량적 최적화 프로세스로 재구성합니다. PPQ 사용자는 고도로 유연한 정량적 작업을 완료하기 위해 최적화 프로세스를 임의로 결합 할 수 있습니다. PPQ 사용자로서 귀하의 요구에 따라 모든 최적화 프로세스를 추가하고 수정하고 양적 기술의 새로운 경계를 탐색 할 수 있습니다.
이것은 복잡한 양자화 작업을 처리하기 위해 생성 된 프레임 워크입니다. PPQ의 실행 엔진은 특수한 양자화를 위해 설계되었습니다. PPQ 버전 0.6.6 기준으로 소프트웨어는 99 개의 공통 ONNX 운영자 실행 로직을 갖추고 있으며 실행 중에 정량적 시뮬레이션 작업을 지원합니다. PPQ는 ONNXRUNTIME없이 ONNX 모델의 추론 및 정량화를 완료 할 수 있습니다. 아키텍처 설계의 일환으로 사용자는 Python+ Pytorch 또는 C ++ / Cuda를 사용하여 PPQ 용 새로운 운영자 구현을 등록 할 수 있으며 새로운 로직은 기존 운영자 구현 로직을 대체 할 수도 있습니다. PPQ를 사용하면 동일한 연산자가 다른 플랫폼에서 다른 실행 로직을 가질 수 있으므로 다른 하드웨어 플랫폼의 운영 시뮬레이션을 지원할 수 있습니다. PPQ는 맞춤형 실행 엔진의 도움과 PPQ CUDA 커널의 고성능 구현을 통해 매우 중요한 성능 이점을 가지고 있으며 종종 놀라운 효율성으로 정량적 작업을 완료 할 수 있습니다.
PPQ 개발은 추론 프레임 워크와 밀접한 관련이있어 하드웨어 추론에 대한 많은 세부 사항을 이해하여 하드웨어 시뮬레이션 오류를 엄격하게 제어 할 수 있습니다. PPQ는 국내외의 많은 오픈 소스 근로자들의 공동 노력으로 현재 Tensorrt, OpenPPL, OpenVino, NCNN, MNN, OnxRuntime, Tengine, SNPE, GraphCore, Metax 등 및 조립식 정량화와 같은 여러 추론 프레임 워크와의 공동 작업을 지원합니다. PPQ는 확장 가능한 모델 양자화 프레임 워크입니다. PPQ.LIB의 기능 기능을 사용하면 PPQ의 양자화 기능을 다른 가능한 하드웨어 및 추론 라이브러리로 확장 할 수 있습니다. 우리는 수천 가구에 인공 지능을 가져 오기 위해 여러분과 협력하기를 기대합니다.
CUDA 툴킷에서 CUDA를 설치하십시오
Complier를 설치하십시오
apt-get install ninja-build # for debian/ubuntu user
yum install ninja-build # for redhat/centos userWindows 사용자 :
(1) https://github.com/ninja-build/ninja/releases에서 Ninja.exe를 다운로드하고 Windows 경로에 추가하십시오.
(2) https://visualstudio.microsoft.com에서 Visual Studio 2019를 설치하십시오.
(3) Windows 경로 환경에 C ++ 컴파일러를 추가하십시오. Visual Studio를 사용하는 경우 "C : Program Files Microsoft Visual Studio 2019 Community 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 | 네트워크 미세 조정 | FINETUNE |
| 06 | 네트워크 일정 | 보내다 |
| 07 | 모범 사례 | 모범 사례 |
| 08 | 대상 플랫폼 | 플랫폼 |
| 09 | 최적화 프로세스 | 최적 |
| 10 | 그림 퓨전 | 퓨전 |
| 설명 | 링크 링크 | |
|---|---|---|
| 01 | quantsimplifypass (일반 정량적 간소화 프로세스) | 의사 |
| 02 | QuantfusionPass (일반 정량적 그래프 융합 프로세스) | 의사 |
| 03 | QuantalignmentPass (일반 양자화 정렬 프로세스) | 의사 |
| 04 | RuntimeCalibrationPass (매개 변수 교정 프로세스) | 의사 |
| 05 | Biascorrectionpass (바이어스 보정 프로세스) | 의사 |
| 06 | quantsimplifypass (일반 정량적 간소화 프로세스) | 의사 |
| 07 | LayerwiseequalizationPass (계층 중량 이퀄라이제이션 프로세스) | 의사 |
| 08 | LayersPilitPass (운영자 분할 프로세스) | 의사 |
| 09 | LearningStepSizePass (네트워크 미세 조정 프로세스) | 의사 |
| 10 | 기타 (기타) | 참조하십시오 |
| DESC 소개 | 링크 링크 | |
|---|---|---|
| 01 | 컴퓨터 아키텍처의 기본 | 링크 |
| 02 | 네트워크 성능 분석 | 링크 |
| 03 | 정량적 계산 원리 | Part1, Part2 |
| 04 | 그래프 최적화 및 정량적 시뮬레이션 | 링크 |
| 05 | 그래프 스케줄링 및 패턴 일치 | 링크 |
| 06 | 신경망 배포 | 링크 |
| 07 | 정량적 매개 변수 선택 | 링크 |
| 08 | 정량적 오류 전파 분석 | 링크 |
| 예 | 네트워크 배포 플랫폼 (플랫폼) | 입력 모델 형식 (형식) | 링크 (링크) | 관련 비디오 (비디오) |
|---|---|---|---|---|
TensorRT | ||||
| Torch2trt를 사용하여 네트워크 속도를 높이십시오 | Pytorch | Pytorch | 링크 | 링크 |
| Tensorrt 정량적 훈련 | Tensorrt | Pytorch | 링크 | 링크 |
| Tensorrt 훈련 후 양자화 (PPQ) | Tensorrt | onx | 1. tensorrt onnxparser를 사용합니다 2. Tensorrt API를 사용하여 Quant | |
| Tensorrt FP32 배포 | Tensorrt | onx | 링크 | 링크 |
| Tensorrt 성능 비교 | Tensorrt | Pytorch | 링크 | 링크 |
| Tensorrt 프로파일 러 | Tensorrt | Pytorch | 링크 | 링크 |
onnxruntime | ||||
| OnnxRuntime을 사용하여 네트워크 속도를 높이십시오 | onnxruntime | onx | 링크 | 링크 |
| ONNX 후 훈련 양자화 (PPQ) | onnxruntime | onx | 링크 | 링크 |
| onnxruntime 성능 비교 | onnxruntime | Pytorch | 링크 | 링크 |
openvino | ||||
| OpenVino를 사용하여 네트워크 속도를 높이십시오 | OpenVino | onx | 링크 | |
| OpenVino 정량적 훈련 | OpenVino | Pytorch | 링크 | |
| OpenVino 사후 훈련 정량화 (PPQ) | OpenVino | onx | 링크 | |
| OpenVino 성능 비교 | OpenVino | Pytorch | 링크 | |
snpe | ||||
| SNPE 후 훈련 양자화 (PPQ) | snpe | 카페 | 링크 | |
ncnn | ||||
| NCNN- 훈련 후 양자화 (PPQ) | NCNN | onx | 링크 | |
OpenPPL | ||||
| PPL CUDA 교육 후 양자화 (PPQ) | ppl cuda | onx | 링크 |
| DESC 소개 | 링크 링크 | |
|---|---|---|
| 01 | PPQ 정량적 실행 프로세스 | 링크 |
| 02 | PPQ 네트워크 분석 | 링크 |
| 03 | PPQ 정량적 그래프 스케줄링 | 링크 |
| 04 | PPQ 대상 플랫폼 및 TQC | 링크 |
| 05 | PPQ Quantizer | 링크 |
| 06 | PPQ 정량적 최적화 프로세스 | 링크 |
| 07 | PPQ 정량적 기능 | 링크 |
| WeChat 공식 계정 | QQ 그룹 |
|---|---|
| OpenPpl | 627853444 |
![]() | ![]() |
이메일 : [email protected]
우리는 모든 기여에 감사드립니다. 버그 수정을 다시 기여할 계획이라면 더 이상의 논의없이 그렇게하십시오.
새로운 기능, 유틸리티 기능 또는 확장을 핵심에 기여하려는 경우 먼저 문제를 열고 기능을 논의하십시오. 토론없이 PR을 보내면 결국 거부 된 PR이 생길 수 있습니다.
PPQ는 MMLAB 분류, MMLAB- 감염, MMLAB- 세기, MMLAB- 편집의 모델로 테스트됩니다. 여기서 우리는 테스트 결과의 일부를 나열했습니다.
| 모델 | 유형 | 구경 측정 | 디스패처 | 메트릭 | PPQ (SIM) | pplcuda | FP32 |
|---|---|---|---|---|---|---|---|
| RESNET-18 | 분류 | 512 IMG | 보수적인 | ACC-TOP-1 | 69.50% | 69.42% | 69.88% |
| Resnext-101 | 분류 | 512 IMG | 보수적인 | ACC-TOP-1 | 78.46% | 78.37% | 78.66% |
| SE-Resnet-50 | 분류 | 512 IMG | 보수적인 | ACC-TOP-1 | 77.24% | 77.26% | 77.76% |
| Shufflenetv2 | 분류 | 512 IMG | 보수적인 | ACC-TOP-1 | 69.13% | 68.85% | 69.55% |
| Mobilenetv2 | 분류 | 512 IMG | 보수적인 | ACC-TOP-1 | 70.99% | 71.1% | 71.88% |
| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
| RETINANET | 발각 | 32 IMG | pplnn | bbox_map | 36.1% | 36.1% | 36.4% |
| 더 빠른 _rcnn | 발각 | 32 IMG | pplnn | bbox_map | 36.6% | 36.7% | 37.0% |
| FSAF | 발각 | 32 IMG | pplnn | bbox_map | 36.5% | 36.6% | 37.4% |
| MASK_RCNN | 발각 | 32 IMG | pplnn | bbox_map | 37.7% | 37.6% | 37.9% |
| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
| DeepAbv3 | 분할 | 32 IMG | 보수적인 | AACC / MIOU | 96.13% / 78.81% | 96.14% / 78.89% | 96.17% / 79.12% |
| DeepAbv3plus | 분할 | 32 IMG | 보수적인 | AACC / MIOU | 96.27% / 79.39% | 96.26% / 79.29% | 96.29% / 79.60% |
| FCN | 분할 | 32 IMG | 보수적인 | AACC / MIOU | 95.75% / 74.56% | 95.62% / 73.96% | 95.68% / 72.35% |
| pspnet | 분할 | 32 IMG | 보수적인 | AACC / MIOU | 95.79% / 77.40% | 95.79% / 77.41% | 95.83% / 77.74% |
| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
| srcnn | 편집 | 32 IMG | 보수적인 | psnr / ssim | 27.88% / 79.70% | 27.88% / 79.07% | 28.41% / 81.06% |
| 에스가 | 편집 | 32 IMG | 보수적인 | psnr / ssim | 27.84% / 75.20% | 27.49% / 72.90% | 27.51% / 72.84% |

이 프로젝트는 Apache 라이센스, 버전 2.0에 따라 배포됩니다.