MindIE LLM中提供统一的脚本${ATB_SPEED_HOME_PATH}/examples/convert/model_slim/quantifier.py供用户生成量化权重。
由于不同模型量化特性参数配置不同,模型基于公共脚本编写各自的量化脚本。具体使用方式见模型Readme文件(${ATB_SPEED_HOME_PATH}/examples/models/{模型名称}/README.md)。
不同量化方式下的参数配置方法见后续章节。
参数名称 |
是否为必选 |
类型 |
默认值 |
描述 |
---|---|---|---|---|
--model_path |
是 |
string |
- |
模型权重路径。 |
--save_directory |
是 |
string |
- |
量化权重保存路径。 |
--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" |
自动回退等级。
|
--input_ids_name |
否 |
string |
"input_ids" |
tokenize后input_ids对应的键名。 |
--attention_mask_name |
否 |
string |
"attention_mask" |
tokenize后attention_mask对应的键名。 |
--do_smooth |
否 |
bool |
False |
是否开启smooth功能。启用do_smooth功能后,平滑激活值。默认为"False",不开启smooth功能。 |
--use_sigma |
否 |
bool |
False |
是否启动sigma功能。启用use_sigma功能后,可根据正态分布数值特点进行异常值保护。默认为"False",不开启sigma功能。 |
--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量化功能。 |
--open_outlier |
否 |
bool |
True |
是否开启权重异常值划分。
|
--group_size |
否 |
int |
64 |
per_group量化中group的大小。 默认值为64,支持配置为64或128。 |
--is_dynamic |
否 |
bool |
False |
是否开启per token量化,当前仅W8A8支持per token量化。
|
--tokenizer_args |
否 |
符合json格式的string |
"{}" |
对校准数据集做tokenize时可额外配置的参数。 例如:'{"padding_side":"left","pad_token":"!"}' |
--use_reduce_quant |
否 |
bool |
False |
是否使用lccl reduce量化功能,默认不开启。 |
--tp_size |
否 |
int |
1 |
lccl reduce量化时需要用到的卡数,默认为1。 |
--is_dynamic |
否 |
bool |
False |
|
--tokenizer_args |
否 |
符合json格式的string |
"{}" |
tokenize扩展参数。 |
--part_file_size |
否 |
int |
None |
量化权重保存文件切分大小,单位GB,默认不切分。 |
calib_texts参数包含校准数据,量化校准时间和传入数据量成正比。当使用NPU进行量化时,输入会被转换成token id搬运至NPU,传入数据量过大可能会导致NPU tensor占用显存过大,而出现由out of memory导致的报错信息。