mindspore_gs.ptq.PTQConfig
- class mindspore_gs.ptq.PTQConfig(mode=PTQMode.QUANTIZE, backend=BackendTarget.ASCEND, opname_blacklist=<class 'list'>, algo_args=<class 'dict'>, weight_quant_dtype=Int8, kvcache_quant_dtype=None, act_quant_dtype=None, outliers_suppression=OutliersSuppressionType.NONE, precision_recovery=PrecisionRecovery.NONE, weight_quant_granularity=QuantGranularity.PER_TENSOR, group_size=0, act_quant_granularity=QuantGranularity.PER_TENSOR, kvcache_quant_granularity=QuantGranularity.PER_CHANNEL)[源代码]
用于配置 MindSpore Golden Stick 后量化算法的数据类。
- 参数:
mode (
mindspore_gs.ptq.PTQMode
) - 用于配置 PTQ 算法的模式,QUANTIZE
表示为量化阶段,DEPLOY
表示为部署阶段。backend (
mindspore_gs.common.BackendTarget
) - 用于配置 PTQ 算法转换为真实量化网络后端,NONE
表示无具体后端,为通用网络。ASCEND
表示为昇腾后端,会在网络中插入昇腾相关算子。opname_blacklist (List[str]) - 算子名称黑名单。网络中的层如果名字和黑名单中某一项模糊匹配上,则该层不会被量化。
algo_args (Union[dict, dataclass]) - 用于配置RTN、SmoothQuant、OmniQuant等算法的超参数。
act_quant_dtype (mindspore.dtype) - 用于配置激活的量化类型。mindspore.dtype.int8表示对激活进行8bit量化,None表示不进行量化。
weight_quant_dtype (mindspore.dtype) - 用于配置权重的量化类型。mindspore.dtype.int8表示对权重进行8bit量化,None表示不进行量化。
kvcache_quant_dtype (mindspore.dtype) - 用于配置kvcache的量化类型。mindspore.dtype.int8表示对kvcache进行8bit量化,None表示不进行量化。
precision_recovery (
mindspore_gs.ptq.PrecisionRecovery
) - 用于配置精度补偿方法。PrecisionRecovery.GPTQ表示使用GPTQ算法在量化时对weight进行补偿。PrecisionRecovery.NONE 作为默认值表示不做任何精度补偿。outliers_suppression (
mindspore_gs.ptq.OutliersSuppressionType
) - 用于配置离群值抑制方法。OutliersSuppressionType.SMOOTH 表示使用 类似于SmoothQuant算法中的smooth方法来抑制离群值,OutliersSuppressionType.NONE 作为默认值表示不对异常值执行任何操作。act_quant_granularity (
mindspore_gs.ptq.QuantGranularity
) - 用于配置激活的量化粒度。目前激活只支持QuantGranularity.PER_TENSOR和QuantGranularity.PER_TOKEN。kvcache_quant_granularity (
mindspore_gs.ptq.QuantGranularity
) - 用于配置kvcache的量化粒度。目前kvcache只支持QuantGranularity.PER_CHANNEL和QuantGranularity.PER_TOKEN。weight_quant_granularity (
mindspore_gs.ptq.QuantGranularity
) - 用于配置weight的量化粒度。目前weight只支持QuantGranularity.PER_CHANNEL和QuantGranularity.PER_GROUP。group_size (int,可选) - per_group量化时的group_size大小,建议使用64或128。默认值:
0
。
- 异常:
ValueError - mode 输入不在 [PTQMode.QUANTIZE, PTQMode.DEPLOY] 中。
ValueError - backend 输入不在 [BackendTarget.NONE, BackendTarget.ASCEND] 中。
TypeError - opname_blacklist 不是一个字符串的列表。
ValueError - act_quant_dtype 输入不在 [mindspore.dtype.int8, None] 中。
ValueError - weight_quant_dtype 输入不在 [mindspore.dtype.int8, None] 中。
ValueError - kvcache_quant_type 输入不在 [mindspore.dtype.int8, None] 中。
TypeError - outliers_suppression 不是 OutliersSuppressionType 类型。
TypeError - precision_recovery 不是 PrecisionRecovery 类型。
ValueError - act_quant_granularity 输入不在 [QuantGranularity.PER_TENSOR, QuantGranularity.PER_TOKEN] 中。
ValueError - kvcache_quant_granularity 输入不在 [QuantGranularity.PER_CHANNEL, QuantGranularity.PER_TOKEN] 中。
ValueError - act_quant_granularity 是QuantGranularity.PER_TOKEN, 但weight_quant_dtype != msdtype.int8或act_quant_dtype != msdtype.int8。
ValueError - kvcache_quant_granularity 是QuantGranularity.PER_TOKEN, 但kvcache_quant_dtype != msdtype.int8。
ValueError - weight_quant_granularity 输入不在[QuantGranularity.PER_CHANNEL, QuantGranularity.PER_GROUP]中。
ValueError - weight_quant_granularity 是QuantGranularity.PER_GROUP,但 group_size 不在[64, 128]中。
ValueError - weight_quant_granularity 不是QuantGranularity.PER_GROUP,但 group_size 不等于0。
TypeError - group_size 不是Int类型。
样例:
>>> from mindspore_gs.ptq import PTQConfig, PTQMode >>> from mindspore_gs.common import BackendTarget >>> PTQConfig(mode=PTQMode.DEPLOY, backend=BackendTarget.ASCEND, opname_blacklist=['layer0']) PTQConfig(mode=<PTQMode.DEPLOY: 'deploy'>, backend=<BackendTarget.ASCEND: 'ascend'>, opname_blacklist=['layer0'], algo_args={})