Skip to content

v0.6.6

Latest
Compare
Choose a tag to compare
@ZhangZhiPku ZhangZhiPku released this 13 Mar 13:16
· 24 commits to master since this release
a583906
  • 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 的样例文件