ppq

GitHub
1.8k 275 较难 1 次阅读 3天前Apache-2.0开发框架
AI 解读 由 AI 自动生成,仅供参考

PPQ(PPL Quantization Tool)是一款专为工业级应用打造的高性能离线神经网络量化工具。它的核心使命是将复杂的浮点运算模型高效转换为低精度的定点运算,从而显著降低芯片功耗、减少内存占用并提升推理速度,解决 AI 模型在端侧设备部署难、运行慢的痛点。

这款工具特别适合算法工程师、嵌入式开发者以及希望优化模型性能的研究人员使用。面对日益复杂的网络结构,PPQ 提供了强大的计算图解析与调度能力,能够自动识别量化区域,同时允许用户精细控制每个算子的量化策略。其独特亮点在于高度灵活的架构设计:内置 27 个可自由组合的量化优化过程,支持用户自定义量化位宽与校准算法;拥有专为量化设计的执行引擎,无需依赖 Onnxruntime 即可模拟推理,并原生支持 FP8 等前沿量化规范。此外,PPQ 还兼容 TensorRT、OpenVINO、ncnn 等主流推理框架,帮助开发者轻松跨越从模型训练到硬件部署的鸿沟,是实现高效 AI 落地的得力助手。

使用场景

某边缘计算团队正致力于将高精度的 YOLOv8 目标检测模型部署到算力受限的安防摄像头端侧芯片上,以满足实时监控的低延迟需求。

没有 ppq 时

  • 精度损失不可控:手动编写量化脚本难以处理复杂的算子融合逻辑,导致模型在从浮点转为定点(INT8)后,检测准确率大幅下降,无法满足业务指标。
  • 硬件适配成本高:面对 TensorRT、OpenVINO 等不同推理后端,需要重复开发多套量化校准代码,缺乏统一的调度逻辑,开发周期被拉长数周。
  • 调试黑盒化:缺乏细粒度的量化模拟工具,无法定位具体是哪个算子或哪一层张量导致了数值溢出或误差激增,排查问题如同“盲人摸象”。
  • 新特性支持滞后:当尝试引入 FP8 等新型低精度格式以进一步压缩模型时,因底层执行引擎不支持,只能放弃探索更极致的性能优化方案。

使用 ppq 后

  • 精度无损量化:利用 ppq 内置的 27 个量化优化过程(Quantization Optimization Pass)和自动图调度逻辑,精准识别并保护敏感层,使 INT8 模型精度几乎持平原始浮点模型。
  • 一站式多端部署:通过 ppq 预置的 TensorRT、ncnn 等导出逻辑,一套代码即可生成适配不同芯片的量化模型,将跨平台部署时间从数周缩短至几天。
  • 透明化误差分析:借助 ppq 原生支持的离线量化模拟与详细的张量级监控,快速定位并修正了特定算子的量化策略,彻底消除了调试盲区。
  • 前沿技术落地:直接调用 ppq 对 FP8(E4M3/E5M2)的原生支持,成功在新一代硬件上验证了更低位宽方案的可行性,进一步降低了显存占用。

ppq 通过其高度可扩展的量化框架与精准的硬件模拟能力,让复杂的端侧模型部署从“高风险的手工活”变成了“可信赖的自动化流程”。

运行环境要求

操作系统
  • Linux
  • Windows
GPU
  • 需要 NVIDIA GPU 以支持 CUDA 加速和量化模拟
  • 需安装 CUDA Toolkit(Docker 示例基于 CUDA 11.4),具体显存大小未说明,取决于模型规模
内存

未说明

依赖
notesWindows 用户需安装 Visual Studio 2019 及 C++ 编译器并配置环境变量。提供基于 Ubuntu 18.04 + CUDA 11.4 + cuDNN 8.4 + TensorRT 8.4 的 Docker 镜像。支持通过 pip 直接安装或源码编译安装。该工具主要用于神经网络量化,内置 99 种 ONNX 算子逻辑,可脱离 ONNX Runtime 独立运行推理与量化任务。
python3.x (PyTorch 1.10+ 要求 Python 版本与之兼容,通常建议 3.8+)
torch>=1.10
onnx
ninja-build
ppq hero image

快速开始

Banner

PPL 量化工具 0.6.6 (PPL Quantization Tool)

PPQ 是一个可扩展的、高性能的、面向工业应用的神经网络量化工具。

神经网络量化,作为一种常用的神经网络加速方案自 2016 年以来被广泛地应用。相比于神经网络剪枝与架构搜索,网络量化的泛用性更强,具有较高的工业实用价值。特别是对于端侧芯片而言,在片上面积与功耗都受到限制的场景下,我们总是希望将所有浮点运算转换为定点运算。量化技术的价值在于浮点运算与访存是十分昂贵的,它依赖于复杂的浮点运算器以及较高的访存带宽。如果我们能够在可接受的范围内使用较低位宽的定点运算近似浮点结果,这将使得我们在芯片电路设计、系统功耗、系统延迟与吞吐量等多方面获得显著的优势。

我们正处在时代的浪潮之中,基于神经网络的人工智能正快速发展,图像识别、图像超分辨率、内容生成、模型重建等技术正改变我们的生活。与之俱来的,是不断变化的模型结构,成为摆在模型量化与部署前的第一道难关。为了处理复杂结构,我们设计了完整的计算图逻辑结构与图调度逻辑,这些努力使得 PPQ 能够解析并修改复杂的模型结构,自动判定网络中的量化区与非量化区,并允许用户对调度逻辑进行手动控制。

网络的量化与性能优化是严峻的工程问题,我们希望用户能够参与到网络的量化与部署过程中来,参与到神经网络的性能优化中来。为此我们在 Github 中提供相应的与部署相关学习资料,并在软件设计上刻意强调接口的灵活性。在我们不断的尝试与探索中,我们抽象出量化器这一逻辑类型,负责初始化不同硬件平台上的量化策略,并允许用户自定义网络中每一个算子、每一个张量的量化位宽、量化粒度与校准算法等。我们将量化逻辑重组为27个独立的量化优化过程 (Quantization Optimization Pass),PPQ 的用户可以根据需求任意组合优化过程,完成高度灵活的量化任务。作为 PPQ 的使用者,您能够根据需求新增、修改所有优化过程,探索量化技术的新边界。

这是一个为处理复杂量化任务而生的框架 —— PPQ 的执行引擎是专为量化设计的,截止 PPQ 0.6.6 版本,软件一共内置 99 种常见的 Onnx 算子执行逻辑,并原生支持执行过程中的量化模拟操作。PPQ 可以脱离 Onnxruntime 完成 Onnx 模型的推理与量化。作为架构设计一部分,我们允许用户使用 Python + Pytorch 或 C++ / Cuda 为 PPQ 注册新的算子实现,新的逻辑亦可替换现有的算子实现逻辑。PPQ 全然允许相同的算子在不同平台上有不同的执行逻辑,从而支撑不同硬件平台的运行模拟。借助定制化的执行引擎与 PPQ Cuda Kernel 的高性能实现,使得 PPQ 具有极其显著的性能优势,往往能以惊人的效率完成量化任务。

PPQ 的开发与推理框架关系密切,这使得我们能够了解硬件推理的诸多细节,从而严格控制硬件模拟误差。在国内外众多开源工作者共同努力之下,目前 PPQ 支持与 TensorRT, OpenPPL, Openvino, ncnn, mnn, Onnxruntime, Tengine, Snpe, GraphCore, Metax 等多个推理框架协同工作,并预制了对应量化器与导出逻辑。PPQ 是一个高度可扩展的模型量化框架,借助 ppq.lib 中的函数功能,您能够将 PPQ 的量化能力扩展到其他可能的硬件与推理库上。我们期待与您一起把人工智能带到千家万户之间。

在 0.6.6 的版本更新中,我们为你带来了这些功能:

  1. FP8 量化规范,PPQ 现在支持 E4M3, E5M2 等多种规范的 FP8 量化模拟与训练
  2. PFL 基础类库,PPQ 现在提供一套更为基础的 api 函数帮助你完成更为灵活的量化
  3. 更为强大的 图模式匹配图融合功能
  4. 基于 Onnx 的模型 QAT 功能
  5. 全新的 TensorRT 量化与导出逻辑
  6. 全球最大的量化模型库 OnnxQuant
  7. 其他未知的软件特性

Installation (安装方法)

  1. Install CUDA from CUDA Toolkit

  2. Install Complier

apt-get install ninja-build # for debian/ubuntu user
yum install ninja-build # for redhat/centos user

For Windows User:

(1) Download ninja.exe from https://github.com/ninja-build/ninja/releases, add it to Windows PATH.

(2) Install Visual Studio 2019 from https://visualstudio.microsoft.com.

(3) Add your C++ compiler to Windows PATH Environment, if you are using Visual Studio, it should be like "C:\Program Files\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx86\x86"

(4) Update PyTorch version to 1.10+.

  1. Install PPQ
git clone https://github.com/openppl-public/ppq.git
cd ppq
pip install -r requirements.txt
python setup.py install
  • Install PPQ from our docker image (optional):
docker 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}
  • Install PPQ using pip (optional):
python3 -m pip install ppq

Learning Path (学习路线)

PPQ 基础用法及示例脚本

Description 介绍 Link 链接
01 模型量化 onnx, caffe, pytorch
02 执行器 executor
03 误差分析 analyser
04 校准器 calibration
05 网络微调 finetune
06 网络调度 dispatch
07 最佳实践 Best Practice
08 目标平台 platform
09 优化过程 Optim
10 图融合 Fusion

PPQ 优化过程文档

Description 介绍 Link 链接
01 QuantSimplifyPass(通用量化精简过程) doc
02 QuantFusionPass(通用量化图融合过程) doc
03 QuantAlignmentPass(通用量化对齐过程) doc
04 RuntimeCalibrationPass(参数校准过程) doc
05 BiasCorrectionPass(Bias修正过程) doc
06 QuantSimplifyPass(通用量化精简过程) doc
07 LayerwiseEqualizationPass(层间权重均衡过程) doc
08 LayerSpilitPass(算子分裂过程) doc
09 LearnedStepSizePass(网络微调过程) doc
10 Other(其他) refer to

视频资料

Desc 介绍 Link 链接
01 计算机体系结构基础知识 link
02 网络性能分析 link
03 量化计算原理 part1, part2
04 图优化与量化模拟 link
05 图调度与模式匹配 link
06 神经网络部署 link
07 量化参数选择 link
08 量化误差传播分析 link

量化部署教程

使用例子(Examples) 网络部署平台(Platform) 输入模型格式(Format) 链接(Link) 相关视频(Video)
TensorRT
使用 Torch2trt 加速你的网络 pytorch pytorch link link
TensorRT 量化训练 TensorRT pytorch link link
TensorRT 后训练量化(PPQ) TensorRT onnx

1. Quant with TensorRT OnnxParser

2. Quant with TensorRT API

TensorRT fp32 部署 TensorRT onnx link link
TensorRT 性能比较 TensorRT pytorch link link
TensorRT Profiler TensorRT pytorch link link
onnxruntime
使用 onnxruntime 加速你的网络 onnxruntime onnx link link
onnx 后训练量化(PPQ) onnxruntime onnx link link
onnxruntime 性能比较 onnxruntime pytorch link link
openvino
使用 openvino 加速你的网络 openvino onnx link
openvino 量化训练 openvino pytorch link
openvino 后训练量化(PPQ) openvino onnx link
openvino 性能比较 openvino pytorch link
snpe
snpe 后训练量化(PPQ) snpe caffe link
ncnn
ncnn 后训练量化(PPQ) ncnn onnx link
OpenPPL
ppl cuda 后训练量化(PPQ) ppl cuda onnx link

Dive into PPQ 深入理解量化框架

Desc 介绍 Link 链接
01 PPQ 量化执行流程 link
02 PPQ 网络解析 link
03 PPQ 量化图调度 link
04 PPQ 目标平台与 TQC link
05 PPQ 量化器 link
06 PPQ 量化优化过程 link
07 PPQ 量化函数 link

联系我们

微信公众号 QQ群
OpenPPL 627853444
OpenPPL QQGroup

邮箱: openppl.ai@hotmail.com

其他资源

贡献

我们感谢所有贡献。如果您计划提交 bug 修复,请直接提交,无需进一步讨论。

如果您计划贡献新功能、实用工具或对核心的扩展,请先创建一个 issue,并与我们讨论该功能。未经讨论就发送 PR 可能会导致 PR 被拒绝,因为我们可能正在将核心向您不了解的方向发展。

基准测试

PPQ 使用 mmlab-classification、mmlab-detection、mmlab-segamentation、mmlab-editing 中的模型进行测试,此处列出部分测试结果。

  • 以下模型未应用量化优化流程。
模型 类型 校准 调度器 指标 PPQ(sim) PPLCUDA FP32
Resnet-18 分类 512 张图像 保守 Top-1 精确率 69.50% 69.42% 69.88%
ResNeXt-101 分类 512 张图像 保守 Top-1 精确率 78.46% 78.37% 78.66%
SE-ResNet-50 分类 512 张图像 保守 Top-1 精确率 77.24% 77.26% 77.76%
ShuffleNetV2 分类 512 张图像 保守 Top-1 精确率 69.13% 68.85% 69.55%
MobileNetV2 分类 512 张图像 保守 Top-1 精确率 70.99% 71.1% 71.88%
---- ---- ---- ---- ---- ---- ---- ----
retinanet 目标检测 32 张图像 pplnn bbox_mAP 36.1% 36.1% 36.4%
faster_rcnn 目标检测 32 张图像 pplnn bbox_mAP 36.6% 36.7% 37.0%
fsaf 目标检测 32 张图像 pplnn bbox_mAP 36.5% 36.6% 37.4%
mask_rcnn 目标检测 32 张图像 pplnn bbox_mAP 37.7% 37.6% 37.9%
---- ---- ---- ---- ---- ---- ---- ----
deeplabv3 图像分割 32 张图像 保守 aAcc / mIoU 96.13% / 78.81% 96.14% / 78.89% 96.17% / 79.12%
deeplabv3plus 图像分割 32 张图像 保守 aAcc / mIoU 96.27% / 79.39% 96.26% / 79.29% 96.29% / 79.60%
fcn 图像分割 32 张图像 保守 aAcc / mIoU 95.75% / 74.56% 95.62% / 73.96% 95.68% / 72.35%
pspnet 图像分割 32 张图像 保守 aAcc / mIoU 95.79% / 77.40% 95.79% / 77.41% 95.83% / 77.74%
---- ---- ---- ---- ---- ---- ---- ----
srcnn 图像修复 32 张图像 保守 PSNR / SSIM 27.88% / 79.70% 27.88% / 79.07% 28.41% / 81.06%
esrgan 图像修复 32 张图像 保守 PSNR / SSIM 27.84% / 75.20% 27.49% / 72.90% 27.51% / 72.84%
  • PPQ(sim) 表示 PPQ 量化模拟器的结果。
  • 调度器表示 PPQ 的调度策略。
  • 分类模型使用 ImageNet 数据集评估,目标检测和图像分割模型使用 COCO 数据集评估,图像修复模型使用 DIV2K 数据集评估。
  • 所有校准数据集均从训练数据中随机选取。

许可证

Logo

本项目采用 Apache License, Version 2.0 许可证发布。

版本历史

v0.6.62023/03/13
v0.6.52022/09/02
v0.6.42022/06/01
v0.6.32022/03/30
v0.6.22022/03/18

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|今天
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|昨天
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

140.4k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.7k|★★☆☆☆|3天前
开发框架图像Agent

Deep-Live-Cam

Deep-Live-Cam 是一款专注于实时换脸与视频生成的开源工具,用户仅需一张静态照片,即可通过“一键操作”实现摄像头画面的即时变脸或制作深度伪造视频。它有效解决了传统换脸技术流程繁琐、对硬件配置要求极高以及难以实时预览的痛点,让高质量的数字内容创作变得触手可及。 这款工具不仅适合开发者和技术研究人员探索算法边界,更因其极简的操作逻辑(仅需三步:选脸、选摄像头、启动),广泛适用于普通用户、内容创作者、设计师及直播主播。无论是为了动画角色定制、服装展示模特替换,还是制作趣味短视频和直播互动,Deep-Live-Cam 都能提供流畅的支持。 其核心技术亮点在于强大的实时处理能力,支持口型遮罩(Mouth Mask)以保留使用者原始的嘴部动作,确保表情自然精准;同时具备“人脸映射”功能,可同时对画面中的多个主体应用不同面孔。此外,项目内置了严格的内容安全过滤机制,自动拦截涉及裸露、暴力等不当素材,并倡导用户在获得授权及明确标注的前提下合规使用,体现了技术发展与伦理责任的平衡。

88.9k|★★★☆☆|今天
开发框架图像Agent

NextChat

NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

87.6k|★★☆☆☆|昨天
开发框架语言模型