PPQは、産業用途向けのスケーラブルで高性能のニューラルネットワーク量子化ツールです。
ニューラルネットワークの量子化は、一般的に使用されるニューラルネットワーク加速ソリューションとして、2016年以降広く使用されてきました。ニューラルネットワークの剪定およびアーキテクチャ検索と比較して、ネットワークの量子化はより汎用性が高く、産業的な実用的な価値が高くなっています。特にエンドサイドチップの場合、オンチップエリアと消費電力の両方が限られているシナリオでは、すべてのフローティングポイント操作を固定点操作に変換したいと考えています。定量的技術の価値は、浮動小数点の算術とメモリのフェッチングが非常に高価であり、複雑な浮動小数点算術と高いメモリフェッチ帯域幅に依存しているという事実にあります。許容範囲内でビット幅が低い固定点操作を使用して浮動小数点の結果を近似できる場合、これにより、チップ回路設計、システム電力消費、システムの遅延、スループットの大きな利点が得られます。
私たちは時代の潮流にあり、ニューラルネットワークに基づく人工知能は急速に発展しており、画像認識、画像スーパー解像度、コンテンツ生成、モデル再構成などの技術が私たちの生活を変えています。それに伴うのは、モデルの定量化と展開前の最初の困難になっている、絶えず変化するモデル構造です。複雑な構造に対処するために、完全な計算グラフロジック構造とグラフスケジューリングロジックを設計しました。これらの取り組みにより、PPQは複雑なモデル構造を解析および変更し、ネットワーク内の量子化領域と非定量化領域を自動的に決定し、ユーザーがスケジューリングロジックを手動で制御できるようにします。
ネットワークの量子化とパフォーマンスの最適化は、深刻なエンジニアリングの問題です。ユーザーがネットワークの量子化と展開に参加し、ニューラルネットワークのパフォーマンス最適化に参加できることを願っています。この目的のために、GitHubで対応する展開関連の学習資料を提供し、ソフトウェア設計におけるインターフェイスの柔軟性を意図的に強調します。継続的な試みと調査を通じて、さまざまなハードウェアプラットフォームの量子化戦略の初期化を担当するロジックタイプの量子化器を抽出し、ユーザーが各演算子の量子化ビット幅、量子化粒度、およびキャリブレーションアルゴリズムとネットワーク内の各テンソルをカスタマイズできるようにしました。定量的ロジックを27の独立した定量化プロセスに再編成します。 PPQユーザーは、非常に柔軟な定量的タスクを完了するためのニーズに応じて、最適化プロセスを任意に組み合わせることができます。 PPQのユーザーとして、ニーズに応じてすべての最適化プロセスを追加および変更し、定量的テクノロジーの新しい境界を探索できます。
これは、複雑な量子化タスクを処理するために作成されたフレームワークです-PPQの実行エンジンは、量子化用に特別に設計されています。 PPQバージョン0.6.6の時点で、ソフトウェアには99の一般的なONNXオペレーター実行ロジックが組み込まれており、実行中の定量的シミュレーション操作をネイティブにサポートしています。 PPQは、onnxRuntimeなしでONNXモデルの推論と定量化を完了することができます。アーキテクチャデザインの一環として、ユーザーはPython+ PytorchまたはC ++ / CUDAを使用してPPQの新しいオペレーターの実装を登録できるようにします。また、新しいロジックは既存のオペレーターの実装ロジックを置き換えることもできます。 PPQを使用すると、同じオペレーターが異なるプラットフォームで異なる実行ロジックを持つことができ、さまざまなハードウェアプラットフォームの運用シミュレーションをサポートします。カスタマイズされた実行エンジンとPPQ CUDAカーネルの高性能実装の助けを借りて、PPQには非常に大きなパフォーマンスの利点があり、多くの場合、驚くべき効率で定量的なタスクを完了することができます。
PPQ開発は、推論フレームワークと密接に関連しているため、ハードウェアの推論の多くの詳細を理解し、したがってハードウェアシミュレーションエラーを厳密に制御できます。 PPQは現在、多くのオープンソース労働者の共同努力により、Tensorrt、Openppl、OpenVino、NCNN、MNN、Tengine、SNPE、Graphcore、Metaxなど、および対応した対応の量子および輸出型の輸出物などの複数の推論フレームワークとの共同作業をサポートしています。 PPQは、非常にスケーラブルなモデル量子化フレームワークです。 PPQ.LIBの関数機能を使用すると、PPQの量子化能力を他の可能なハードウェアおよび推論ライブラリに拡張できます。数千世帯に人工知能をもたらすためにあなたと協力することを楽しみにしています。
CUDA ToolkitからCUDAをインストールします
Install 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 Pathに追加します。
(2)https://visualstudio.microsoft.comからVisual Studio 2019をインストールします。
(3)C ++コンパイラをWindows Path環境に追加すると、Visual Studioを使用している場合は、「C: Program Files Microsoft Visual Studio 2019 Community VC Tools MSVC 14.16.27023 Bin 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 | quantsimplifypass(一般的な定量的合理化プロセス) | doc |
| 02 | QuantFusionPass(一般的な定量的グラフ融合プロセス) | doc |
| 03 | QuantAlignmentPass(一般的な量子化アライメントプロセス) | doc |
| 04 | RuntimeCalibrationPass(パラメーターキャリブレーションプロセス) | doc |
| 05 | BiaScorrectionPass(バイアス補正プロセス) | doc |
| 06 | quantsimplifypass(一般的な定量的合理化プロセス) | doc |
| 07 | layerwiseequalizationpass(層間重量均等化プロセス) | doc |
| 08 | layerspilitpass(オペレーターの分割プロセス) | doc |
| 09 | learnterstepsizepass(ネットワーク微調整プロセス) | doc |
| 10 | その他(その他) | 参照してください |
| DESCはじめに | リンクリンク | |
|---|---|---|
| 01 | コンピューターアーキテクチャの基本 | リンク |
| 02 | ネットワークパフォーマンス分析 | リンク |
| 03 | 定量的計算原理 | パート1、パート2 |
| 04 | グラフの最適化と定量的シミュレーション | リンク |
| 05 | グラフのスケジューリングとパターンマッチ | リンク |
| 06 | ニューラルネットワークの展開 | リンク |
| 07 | 定量的パラメーター選択 | リンク |
| 08 | 定量的エラー伝播分析 | リンク |
| 例 | ネットワーク展開プラットフォーム(プラットフォーム) | 入力モデル形式(フォーマット) | リンク(リンク) | 関連ビデオ(ビデオ) |
|---|---|---|---|---|
TensorRT | ||||
| TORCH2TRTを使用して、ネットワークを高速化します | Pytorch | Pytorch | リンク | リンク |
| Tensorrtの定量的トレーニング | Tensort | Pytorch | リンク | リンク |
| トレーニング後のTensorrt量子化(PPQ) | Tensort | onnx | 1。tensort onnxparserを備えた量 2。TensortAPIを備えた量 | |
| Tensorrt FP32展開 | Tensort | onnx | リンク | リンク |
| Tensortortパフォーマンスの比較 | Tensort | Pytorch | リンク | リンク |
| TENSORRTプロファイラー | Tensort | Pytorch | リンク | リンク |
onnxruntime | ||||
| onnxruntimeを使用して、ネットワークを高速化します | onnxruntime | onnx | リンク | リンク |
| トレーニング後の量子化後(PPQ)ONNX | onnxruntime | onnx | リンク | リンク |
| onnxruntimeパフォーマンスの比較 | onnxruntime | Pytorch | リンク | リンク |
openvino | ||||
| OpenVinoを使用して、ネットワークを高速化します | OpenVino | onnx | リンク | |
| OpenVinoの定量トレーニング | OpenVino | Pytorch | リンク | |
| OpenVinoトレーニング後の定量化(PPQ) | OpenVino | onnx | リンク | |
| OpenVinoパフォーマンスの比較 | OpenVino | Pytorch | リンク | |
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量子化器 | リンク |
| 06 | PPQ定量的最適化プロセス | リンク |
| 07 | PPQ定量関数 | リンク |
| WeChat公式アカウント | QQグループ |
|---|---|
| openppl | 627853444 |
![]() | ![]() |
電子メール:[email protected]
すべての貢献に感謝します。バックバグの修正を提供する予定がある場合は、これ以上議論することなくそうしてください。
新しい機能、ユーティリティ機能、または拡張機能をコアに提供する場合は、まず問題を開いて、機能について話し合ってください。議論なしでPRを送信することは、あなたが知っているよりも異なる方向にコアを取っている可能性があるため、拒否されたPRになる可能性があります。
PPQは、MMLAB分類、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% |
| faster_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の下で配布されています。