文档
注册

QuantConfig

功能说明

量化参数配置类,保存量化过程中配置的参数。

函数原型

QuantConfig(a_bit=8, w_bit=8, disable_names=None, dev_type='cpu', dev_id=None, act_method=1, pr=1.0, w_sym=True, mm_tensor=True, w_method='MinMax', co_sparse=False, fraction=0.01, nonuniform=False,is_lowbit =False,do_smooth=False,use_sigma=False,sigma_factor=3,disable_last_linear:bool=True,use_kvcache_quant=False,is_dynamic=False, open_outlier=True, group_size=64)

参数说明

参数名

输入/返回值

含义

使用限制

w_bit

输入

权重量化bit。

可选。

数据类型:int。

默认为8。

  • 大模型量化场景下,可配置为8。
    • is_dynamic参数配置为True,使用per-token动态量化场景下,需配置为8。
  • 大模型稀疏量化场景下,需配置为4。

a_bit

输入

激活值量化bit。

可选。

数据类型:int。

可选值为8和16,默认为8。

  • 大模型量化场景下,可配置为8或16。
    • per_group的场景下需配置为16。
    • is_dynamic参数配置为True,使用per-token动态量化场景下,需配置为8。
  • 大模型稀疏量化场景下,需配置为8。

w_sym

输入

权重量化是否为对称量化。

可选。

数据类型:bool。

默认为True。

W8A8场景仅支持配置为True。

act_method

输入

激活值量化方法。

可选。

数据类型:int。

可选值如下所示,默认为1。

  • 1代表Label-Free场景的min-max量化方式。
  • 2代表Label-Free场景的histogram量化方式。
  • 3代表Label-Free场景的自动混合量化方式,LLM大模型场景下推荐使用。
    说明:

    开启lowbit稀疏量化功能时不支持选择值3。

disable_names

输入

需排除量化的节点名称,即手动回退的量化层名称。

如精度太差,推荐回退量化敏感层,如分类层、输入层、检测head层等。

可选。

数据类型:object。

pr

输入

量化选择概率。

可选。

数据类型:float。

取值范围:[0,1]。

默认值:1.0,建议取值0.5。

mm_tensor

输入

选择进行per-channel量化或per-tensor量化。

可选。

数据类型:bool。

默认值:True。

  • True: per-tensor量化。
  • False: per-channel量化,建议选择该量化方式。

dev_type

输入

device类型。

可选。

数据类型:object。

可选值:['cpu', 'npu'],默认为'cpu'。

dev_id

输入

Device ID。

可选。

数据类型:int。

默认值为None。

仅在“dev_type”配置为“npu”时生效。“dev_id”指定的Device ID优先级高于环境变量配置的Device ID。

co_sparse

输入

是否开启稀疏量化功能。

可选。

数据类型:bool。

默认值:False,不开启稀疏量化

大模型稀疏量化场景下,优先使用lowbit稀疏量化功能,开启lowbit稀疏量化后,co_sparse参数自动失效。

fraction

输入

稀疏量化精度控制。

可选。

数据类型:float。

取值范围[0.01,0.1]。

建议在PyTorch1.X版本中取值0.007,在PyTorch2.X版本中取值0.011。

nonuniform

输入

是否在稀疏量化中采用非均匀量化。

可选。

数据类型:bool。

默认值为False。

w_method

输入

权重量化策略

可选。

数据类型:str。

默认为'MinMax',可选值:'MinMax','GPTQ','HQQ'。

  • MinMax和HQQ支持Data-Free。
  • GPTQ不支持Data-Free。

is_lowbit

输入

是否开启lowbit量化功能。

可选。

数据类型:bool。

默认为False,不开启lowbit量化功能。

设置为True之后,有以下两种情况:

  • 当w_bit=4,a_bit=8时,为大模型稀疏量化场景,表示开启lowbit稀疏量化功能。

    大模型稀疏量化场景下,优先使用lowbit稀疏量化功能,开启lowbit稀疏量化后,co_sparse参数自动失效。

  • 其他场景为大模型量化场景,会开启量化自动精度调优功能。当前量化自动精度调优框架支持W8A8,W8A16量化。

do_smooth

输入

是否开启smooth功能。

启用do_smooth功能后,平滑激活值。

可选。

数据类型:bool。

默认为False,不开启smooth功能。

use_sigma

输入

是否启动sigma功能。

启用use_sigma功能后,可根据正态分布数值特点进行异常值保护。

可选。

数据类型:bool。

默认为False,不开启sigma功能。

sigma_factor

输入

启用sigma功能后sigma_factor的值,用于限制异常值的保护范围。

可选。

数据类型:float。

默认为3,取值范围为[3, 4]。

disable_last_linear

输入

是否自动回退至最后线性层linear。

当前该参数为True时,会自动回退最后一个线性层linear。例如LLaMA2-13B模型的[lm_head]层,ChatGLM2-6B的[transformer.output_layer]层。

可选。

数据类型:bool。

默认为True。

  • True:自动回退最后一个线性层linear。
  • False:不会回退最后一个线性层linear。

use_kvcache_quant

输入

是否使用kvcache量化功能。

可选。

数据类型:bool。

默认为False 。

  • True:使用kvcache量化功能。
  • False:不使用kvcache量化功能。

is_dynamic

输入

是否使用per-token动态量化功能。

可选。

数据类型:bool。

默认为False 。

  • True:使用per-token动态量化。
  • False:不使用per-token动态量化。

open_outlier

输入

是否开启权重异常值划分。

可选。

数据类型:bool。

默认为True。

  • True:开启权重异常值划分。
  • False:关闭权重异常值划分。
说明:
  • 仅在lowbit设置为True时生效。

group_size

输入

per_group量化中group的大小。

可选。

数据类型:int。

默认值为64,支持配置为64或128。

调用示例一

根据实际需求,在QuantConfig初始化中完成所有参数的配置。

from msmodelslim.pytorch.llm_ptq.llm_ptq_tools import Calibrator, QuantConfig
quant_config = QuantConfig(pr=0.5, mm_tensor=Flase)

调用示例二

在QuantConfig初始化中完成核心参数(w_bit,a_bit,disable_names,disable_last_linear,dev_type,dev_id)的配置后,再根据不同量化场景,配置表中的参数。目前支持的量化场景有稀疏量化、权重量化、kvcache量化和权重激活量化,具体参数配置情况和调用示例请参考表1

表1 量化配置表

量化类型

需配置参数列表

调用示例

weight_quant

权重量化的参数初始化,即 w8a16。

w_method,mm_tensor,w_sym,group_size

quant_config = QuantConfig(w_bit=8,disable_names=disable_names,dev_type='npu',dev_id=0).                    
weight_quant (w_sym=False)

weight_activation_quant

权重激活量化的参数初始化, 即w8a8。

act_method,pr,is_dynamic

quant_config = QuantConfig(w_bit=8,disable_names=disable_names,dev_type='npu',dev_id=0).           
weight_activation_quant (act_method=2)

sparse_quant

稀疏量化的参数初始化。

act_method,fraction,nonuniform,is_lowbit,do_smooth,use_sigma,sigma_factor

quant_config = QuantConfig(w_bit=4,disable_names=disable_names,dev_type='npu',dev_id=0).                    
sparse_quant(is_lowbit=True)

kv_quant

kvcache量化的参数初始化,无需输入参数,调用本函数后,会自动将use_kvcache_quant设置为True。

-

quant_config = QuantConfig(w_bit=8,disable_names=disable_names,dev_type='npu',dev_id=0).                   
kv_quant ()
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词