量化脚本说明
MindIE LLM中提供统一的脚本${ATB_SPEED_HOME_PATH}/examples/convert/model_slim/quantifier.py供用户生成量化权重。
使用说明
由于不同模型量化特性参数配置不同,模型基于公共脚本编写各自的量化脚本。具体使用方式见模型Readme文件(${ATB_SPEED_HOME_PATH}/examples/models/{模型名称}/README.md)。
不同量化方式下的参数配置方法见后续章节。
参数说明
参数名称  | 
是否为必选  | 
类型  | 
默认值  | 
描述  | 
|---|---|---|---|---|
--save_directory  | 
是  | 
string  | 
-  | 
量化权重保存路径。  | 
--part_file_size  | 
否  | 
int  | 
None  | 
量化权重保存文件切分大小,单位GB,默认不切分。  | 
--calib_texts  | 
否  | 
string  | 
None  | 
量化时的校准数据,多条数据间使用空格分割。  说明:  
脚本基于calib_texts进行推理,若用户传入数值过大,会出现由out of memory导致的报错信息。  | 
--calib_file  | 
否  | 
string  | 
${ATB_SPEED_HOME_PATH}/examples/convert/model_slim/teacher_qualification.jsonl  | 
包含校准数据的文件。  | 
--w_bit  | 
否  | 
int  | 
8  | 
权重量化bit。 
  | 
--a_bit  | 
否  | 
int  | 
8  | 
激活值量化bit。 可选值为8和16。 
  | 
--disable_names  | 
否  | 
string  | 
None  | 
需排除量化的节点名称,即手动回退的量化层名称。如精度太差,推荐回退量化敏感层,如分类层、输入层、检测head层等。  | 
--device_type  | 
否  | 
string  | 
"cpu"  | 
量化时的硬件类型,仅支持"cpu"或"npu"。  | 
--fraction  | 
否  | 
float  | 
0.01  | 
稀疏量化精度控制。  | 
--act_method  | 
否  | 
int  | 
1  | 
激活值量化方法,仅支持1或2或3。 
  | 
--co_sparse  | 
否  | 
bool  | 
False  | 
是否开启稀疏量化功能。 大模型稀疏量化场景下,优先使用lowbit稀疏量化功能,开启lowbit稀疏量化后,co_sparse参数自动失效。  | 
--anti_method  | 
否  | 
string  | 
""  | 
离群值抑制算法,默认不开启。 
  | 
--disable_level  | 
否  | 
string  | 
"L0"  | 
自动回退等级。 
  | 
--do_smooth  | 
否  | 
bool  | 
False  | 
是否开启smooth功能。启用do_smooth功能后,平滑激活值。默认为"False",不开启smooth功能。  | 
--use_sigma  | 
否  | 
bool  | 
False  | 
是否启动sigma功能。启用use_sigma功能后,可根据正态分布数值特点进行异常值保护。默认为"False",不开启sigma功能。  | 
--use_reduce_quant  | 
否  | 
bool  | 
False  | 
是否使用lccl reduce量化功能,默认不开启。  | 
--tp_size  | 
否  | 
int  | 
1  | 
lccl reduce量化时需要用到的卡数,默认为1。  | 
--sigma_factor  | 
否  | 
float  | 
3.0  | 
启用sigma功能后sigma_factor的值,用于限制异常值的保护范围。默认为3.0,取值范围为[3.0, 4.0]。  | 
--is_lowbit  | 
否  | 
bool  | 
False  | 
是否开启lowbit量化功能。 默认为"False",不开启lowbit量化功能。  | 
--mm_tensor  | 
否  | 
bool  | 
True  | 
选择进行per-channel量化或per-tensor量化。 
  | 
--w_sym  | 
否  | 
bool  | 
True  | 
权重量化是否为对称量化,默认开启对称量化。  | 
--use_kvcache_quant  | 
否  | 
bool  | 
False  | 
是否使用KV Cache量化功能,默认不开启KV Cache量化功能。  | 
--use_fa_quant  | 
否  | 
bool  | 
False  | 
是否使用Attention量化功能,默认不开启Attention量化功能。  | 
--fa_amp  | 
否  | 
int  | 
0  | 
Attention量化的自动回退层数,以整个Attention为单位进行回退。 默认值为0。  | 
--open_outlier  | 
否  | 
bool  | 
True  | 
是否开启权重异常值划分。 
  | 
--group_size  | 
否  | 
int  | 
64  | 
per_group量化中group的大小。 默认值为64,支持配置为64或128。  | 
--is_dynamic  | 
否  | 
bool  | 
False  | 
是否开启per token量化,当前仅W8A8支持per token量化。 
  | 
--input_ids_name  | 
否  | 
string  | 
"input_ids"  | 
tokenize后input_ids对应的键名。  | 
--attention_mask_name  | 
否  | 
string  | 
"attention_mask"  | 
tokenize后attention_mask对应的键名。  | 
--tokenizer_args  | 
否  | 
符合json格式的string  | 
"{}"  | 
对校准数据集做tokenize时可额外配置的参数。 例如:'{"padding_side":"left","pad_token":"!"}'  | 
--disable_last_linear  | 
否  | 
bool  | 
True  | 
是否禁用最后一层全连接层量化,默认为True,即禁用。  | 
--trust_remote_code  | 
否  | 
bool  | 
store_true  | 
是否信任模型权重路径下的自定义代码文件。默认不执行。若传入此参数,则transformers会执行用户权重路径下的自定义代码文件,这些代码文件的功能的安全性需由用户保证,请提前做好安全性检查。  | 
 calib_texts参数包含校准数据,量化校准时间和传入数据量成正比。当使用NPU进行量化时,输入会被转换成token id搬运至NPU,传入数据量过大可能会导致NPU tensor占用显存过大,而出现由out of memory导致的报错信息。