量化脚本说明

MindIE LLM中提供统一的脚本${ATB_SPEED_HOME_PATH}/examples/convert/model_slim/quantifier.py供用户生成量化权重。

使用说明

由于不同模型量化特性参数配置不同,模型基于公共脚本编写各自的量化脚本。具体使用方式见模型Readme文件(${ATB_SPEED_HOME_PATH}/examples/models/{模型名称}/README.md)。

不同量化方式下的参数配置方法见后续章节。

参数说明

详情可参考《CANN msModelSlim工具指南》的“模型量化 > 简介”章节

表1 量化脚本参数说明

参数名称

是否为必选

类型

默认值

描述

--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。

  • 可配置为4或8。
  • per_group的场景下需配置为4。
  • 稀疏量化场景下,需配置为4。

--a_bit

int

8

激活值量化bit。

可选值为8和16。

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

--disable_names

string

None

需排除量化的节点名称,即手动回退的量化层名称。如精度太差,推荐回退量化敏感层,如分类层、输入层、检测head层等。

--device_type

string

"cpu"

量化时的硬件类型,仅支持"cpu"或"npu"。

--fraction

float

0.01

稀疏量化精度控制。

--act_method

int

1

激活值量化方法,仅支持1或2或3。

  • 1代表Label-Free场景的min-max量化方式。
  • 2代表Label-Free场景的histogram量化方式。
  • 3代表Label-Free场景的自动混合量化方式。
  • 开启lowbit稀疏量化功能时不支持选择值3。

--co_sparse

bool

False

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

--anti_method

string

""

离群值抑制算法,默认不开启。

  • "m1": Smooth Quant算法。
  • "m2": Outlier Suppression算法。
  • "m3": AWQ算法。
  • "m4": Smooth Quant优化算法。
  • "m5": CBQ量化算法。

--disable_level

string

"L0"

自动回退等级。

  • "L0":不执行回退
  • "L1":回退1层
  • "L2":回退2层
  • "L3":回退3层
  • "L4":回退4层
  • "L5":回退5层

--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量化。

  • True: per-tensor量化。
  • False: per-channel量化。

--w_sym

bool

True

权重量化是否为对称量化,默认开启对称量化。

--use_kvcache_quant

bool

False

是否使用KV Cache量化功能,默认不开启KV Cache量化功能。

--open_outlier

bool

True

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

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

--group_size

int

64

per_group量化中group的大小。 默认值为64,支持配置为64或128。

--is_dynamic

bool

False

是否开启per token量化,当前仅W8A8支持per token量化。

  • True:开启。
  • False:不开启。

--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

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

--tokenizer_args

符合json格式的string

"{}"

tokenize扩展参数。

--part_file_size

int

None

量化权重保存文件切分大小,单位GB,默认不切分。

calib_texts参数包含校准数据,量化校准时间和传入数据量成正比。当使用NPU进行量化时,输入会被转换成token id搬运至NPU,传入数据量过大可能会导致NPU tensor占用显存过大,而出现由out of memory导致的报错信息。