Skip to content

Releases: OpenPPL/ppq

v0.6.6

13 Mar 13:16
a583906
Compare
Choose a tag to compare
  • API
    • 添加了 PPQ 基础类库 PFL,更改了 API 的调用关系
    • 移除了 AdvancedOptimizationSetting
  • 量化核心逻辑
    • 添加了新的 QuantizationProperty: DYNAMIC, 用于描述动态量化。动态量化功能将支撑 LSTM 的量化。
    • 添加了新的 QuantizationProperty: FLOATING, 用于描述浮点量化,PPQ现在从底层支持FP8 E4M3 E5M2, BF16, FP16的量化过程。目前FLOATING量化必须开启CUDA KERNEL完成计算。
    • QuantizationStates 中的 SLAVE 状态与 PASSIVE 状态合并。在过去,SLAVE状态用于描述激活值的被动量化,而PASSIVE状态则用于描述参数的被动量化。被动量化参数将与其他TQC共享量化信息。DEQUANTIZED, DEACTIVED, SOI 状态全部与 FP32 合并。
    • 为 TQC 添加了新的属性 master_by,用于创建被动量化链接
    • 重新审视了 TQC.policy, roundind, num_of_bits, quant_min, quant_max属性,现在TQC父子链接将不共享这些内容,而只共享scale, offset。
    • 添加了新的量化平台 TRT_FP8, GRAPHCORE_FP8, 移除了 ACDEMIC 系列平台
    • 针对 FP8 量化,放弃定点对齐中的向大端对齐策略
    • 强制联合定点现在默认开启,即使复杂图的情况下也会默认执行级联联合定点。
    • 添加了新的函数 can_export,可以使用该函数校验 TQC 是否能够被导出
    • 移除了 ChannelwiseTensorQuantizationConfig 类型,相关属性 channel_axis 被直接移入父类
  • 异构执行
    • 移除了 PPQDeviceSwitcher,cpu-gpu 的数据切换将在算子内部完成
    • 移除了 cpu 后端,所有运算都将由统一的后端实现完成
    • 添加了 layernorm 的执行逻辑
  • 图调度
    • OpSocket 的定义现在将移入 ppq.IR.opdef,并且 socket 将作为算子上的一个基础属性
    • 默认调度算法修改为 conservative,conservative 调度逻辑将使用 socket 进行重构
  • 模式匹配
    • 子图模式匹配从贪心匹配改为暴力匹配,现在可以匹配任意子图模式,但当候选结果数量过大时,PPQ将返回错误。
    • 新增 Layernorm 的图融合策略
  • 优化过程
    • 移除了 QuantizeRefine Pass,该部分逻辑将由 Quantizer 完成,相关参数从 QuantizationSetting 中移除。
    • 重写了 PassiveParameterQuantizePass,现在将允许分别对 Clip, Pad, Bias 进行控制,将允许控制 Clip, Pad 量化的导出可见性
    • 重写了 ChannelSplitPass
  • 量化器
    • 在创建初始量化信息时,将使用 Opsocket 的内容为算子初始化正确的 TQC,在过去这一职责是由 QuantizeRefine Pass 负责的
    • 为算子初始化默认TQC时,在 create_default_quant_config 中现在将传入算子本身,而非 op.meta
    • 添加了 FP8 量化器,添加了 FP8 量化的相关逻辑,添加了关于 FP8 的两套 calibration 逻辑
  • QAT
    • 新建了QAT文件夹
  • 其他内容
    • 修正了 ppq.api.init,避免 import 时引入不必要的内容
    • 将 TargetPlatform.SHAPE_OR_INDEX 重命名为 TargetPlatform.SOI
    • 移除了 ppq.IR.baseGraph 的函数 delete_operation, delete_variable
    • 修正了一个图复制时可能出现的错误
    • 修改了系统最大迭代次数的限制,这是由于对于一些较大规模的计算图,PPQ的调度器执行时会超出python默认的最大迭代深度。
    • 修正了 hardsigmoid forward 的错误
    • 允许导出大于2G的onnx文件
    • 移除了 Reshape forward 逻辑中有关于 batchsize 的判断逻辑
    • 暂时移除了创建 opsocket 时的一系列警告
    • 修正了 op 和 graph 复制时 detail 属性没有成功复制的错误
    • 修正了一个图复制时可能发生的错误
    • 修正了 tengine exporter 的导出错误
    • 修正了 tensorrt exporter 的导出错误
    • 修正了子图切分时可能发生的一个错误
    • 修正了 Quantizer 创建 TQC 的一个平台错误
    • 修正了 ConvTranspose2D 量化轴的错误
    • 添加了 bert, yolo6, fp8 的样例文件

v0.6.5

02 Sep 06:38
7883312
Compare
Choose a tag to compare
  • Analyzer
    • 添加了新的分析方法 statistical_analyse
    • 允许分析多输出算子
    • 重新设计了 cosine 相似度的计算方式
  • API
    • 添加了新的api: load_native_graph
    • 添加了新的api: register_network_quantizer
    • 添加了新的api: register_network_parser
    • 添加了新的api: register_network_exporter
    • 允许以setting=None调用api函数
  • Executor
    • 支持1d, 3d卷积,
    • 支持1d 3d pooling
    • 支持1d 3d 反卷积
    • 支持 lstm, gru
    • 支持 sin, cos
    • 支持 abs
    • 支持 sum
    • 支持 Erf, Elu, Reciprocal
    • 重写了 resize, slice 与 scatterND 实现
    • 移除了注册算子的限制条件,现在你可以覆盖ppq内部的算子实现
    • 修正了Conv, Pooling, ConvTranspose, Pad中的padding问题,适配onnx 1d, 2d, 3d padding,并将以较高性能运行
  • Dispatcher
    • 添加了新的调度器 purseus, allin
    • 添加了新的数据类型抽象 opsocket,在下一版本中该抽象将被移入ppq.IR
    • 默认子图切分方法更改为 purseus
    • 添加调度报警信息
  • Observer
    • 添加了新的calibration方法OrderPreserving,保序量化将被应用在分类网络当中,提升分类性能
    • 添加了mse的非对称实现,并添加了c++的mse实现
  • Graph
    • 支持1d, 3d卷积与反卷积的bn融合
    • Variable添加属性 shape,可以直接修改 shape 来设定 dynamic shape
    • 图匹配引擎允许以ep_expr = None进行模式匹配
    • 支持图的复制
  • Optim
    • LSQ 算法被重写,性能大幅提升, Advanced optimization 与 LSQ 算法合并,现在被称为CuLSQ
    • Brecq 算法被移入 legacy,不推荐使用
    • layerSplit, BiasCorrection 算法被重写,性能提升
    • Laerwise Equalization 算法被重写,现在支持 1,2,3d 卷积与反卷积,支持 include act
    • 修正了 average pooling 算子对齐的错误
    • 修正了 bias, pad 量化的相关问题
    • 移除了RuntimePerlayerCalibrationPass,相关参数不再起作用
    • 移除了ConstantBakingPass,相关参数不再起作用
    • 移除了InplaceQuantizationSettingPass,相关参数不再起作用
    • 移除了 fuse_conv_add 设置选项,相关优化过程被移入 legacy 文件,现在必须手动调用
  • Doc
    • 添加了常见优化过程文档
    • 添加了 yolo 量化相关例子
    • 添加了新的入门教程示例代码
  • Cuda
    • 重写了量化核心函数,性能提升
    • 重写了量化梯度传播函数,性能提升
    • 现在在编译开始时,会自动移除编译锁
  • Core
    • 为 TQC 添加了新的属性 Visibilty,将使用该属性控制 TQC 导出能见度
    • 修改了一些属性名字,并将它们写入 ppq.common.py
    • TensorQuantizationConfig中的函数__is_revisable现在是一个公有函数,并被重命名为is_revisable
  • Other
    • Import TensorRT的警告现在只在导出的时候才会发出
    • 添加了 snpe 1.6.3 的支持
    • 添加了 tengine 的支持
    • 修复了一系列错误

v0.6.4

01 Jun 07:26
943f149
Compare
Choose a tag to compare

重做计算图操作接口,添加了函数 remove_operation, remove_variable, insert_op_on_var, insert_op_between_var, create_link_with_var, create_link_with_op, truncate_on_var

重做 onnxruntime 导出逻辑,重做 onnx oos 导出逻辑

更新了 lsq 算法,加速执行

更新了 ssd 算法,加速执行

更新了 core.ffi,现在编译不了的话会给你报告错误。

添加了几个api函数,包括 manop 与 quantize_native_model 它们允许你手动控制优化逻辑。

添加了第二类模式匹配功能

添加了 gru 分解的相关逻辑

添加了图 api 的测试类

添加了QNN导出逻辑

添加了 swish, mish 激活函数的融合逻辑

添加了 FPGAQuantizer

添加 mod 算子支持,添加 softplus 算子支持,添加 gru 算子支持

移除了 misc 文件夹,其中代码已经不被使用。

修复了 pad 顺序不对的问题

修复了创建变量时变量可能重名的问题

修复了 path_matching 中中间结果没有被复制,从而导致结果可能出现错误的问题

修复了 matex gemm split pass 的一些不引人注意的 bug

修复了 delete_isolated 函数的一些错误

修复了一个PPL_DSP_TI_INT8 被错误命名为 PPL_DSP_TI_IN8 的问题

PPQ v0.6.3

30 Mar 12:43
94ccb52
Compare
Choose a tag to compare
  • Fix many bugs.
  • Refine LSQ, SSD, DFQ Algorithm.
  • Add some exporters.

PPQ v0.6.2

18 Mar 05:45
f435f35
Compare
Choose a tag to compare
  • Scale and offset are now always torch.Tensor with dtype=fp32 for training your network.
  • PPQ will display network snapshot when quantize your network.
  • Add brecq & lsq algorithms
  • Cuda kernels has been refined, more cuda kernels are introduced into ppq.
  • Add an exporter for dumping onnx quantization model.
  • Test cases are introduced here since ppq 0.6.2