2. 简介¶
TopsCompressor 是一个大模型量化压缩工具包,旨在提供便捷python api帮助模型开发人员进行模型量化压缩等任务。
3. 安装使用说明¶
TopsCompressor支持Python3.8及以上版本,可以从whl包直接安装。
3.1. 使用预编译的whl包安装¶
pip3 install topscompressor-<version>-py3-none-any.whl
GPU量化: 依赖于pytorch gpu版本
GCU量化: 依赖于torch gcu
4. 用户使用说明¶
TopsCompressor当前提供awq、gptq、w8a16和int8 kvcache量化功能。
4.1. 支持范围¶
支持Huggingface模型格式。
AWQ量化
W4A16:只支持group size是64或64整数倍的模型量化。
其余配置暂不支持。
GPTQ量化
W4A16:只支持group size是64或64整数倍的模型量化。
当前算子实现不支持g_idx是乱序情况,即量化时,desc_act=True, static_groups=False的情况。
W8A16量化
当前量化方式:per-channel,group size=-1的int8对称量化。
Int8 KVCache量化
当前量化支持int8对称和非对称量化,当前量化int8 kv需要在原模型基础上与上述量化分开执行。
4.2. 功能列表¶
GPTQ
AWQ
PTQ
AWQ量化¶
使用python api量化方式¶
from topscompressor.quantization.quantize import quantize, save_quantized_model
from topscompressor.quantization.config import QuantConfig
# create awq quant config
quant_config = QuantConfig.create_config("awq")
# create calibration dataset, such as 'wikitext'
calib_data_name = 'wikitext'
calib_data_config = {
'name': 'wikitext-2-raw-v1',
'split': 'validation',
}
# quantize model, such as LLaMA2 7b, the model name can be local or online checkpoint (hf format).
model = quantize(
"Llama-2-7b-hf",
quant_config,
calib_data=calib_data_name,
calib_data_load_fn_kwargs=calib_data_config,
calib_data_max_len=512,
n_samples=128,
device='gcu'
)
# save quantized model
save_quantized_model(model, quant_config, "saved_dir")
GPTQ量化¶
上述代码只需修改quant_config部分
# create gptq quant config
quant_config = QuantConfig.create_config("gptq")
W8A16量化¶
上述代码只需修改quant_config部分
# create w8a16 quant config
quant_config = QuantConfig.create_config("w8a16")
Int8 kvcache量化¶
from topscompressor.quantization.quantize import quantize, save_kvcache_params, accelerate_gptq_pack_model
from topscompressor.quantization.config import QuantConfig
def main(args):
accelerate_gptq_pack_model()
kv_config = QuantConfig.create_config('int8_kv')
kv_config.sym_quant_kv = False
kv_config.is_quantized_model = False
calib_data_name = 'wikitext'
calib_data_config = {
'name': 'wikitext-2-raw-v1',
'split': 'validation',
}
model = quantize(
"Llama-2-7b-hf",
kv_config,
calib_data=calib_data_name,
calib_data_load_fn_kwargs=calib_data_config,
calib_data_max_len=512,
n_samples=128,
device='gcu'
)
save_kvcache_params(model, quant_config, "saved_dir")
自定义数据集¶
对于自定义数据集,当前支持一种简单方式,将文本保存到list中,然后传递给quantize函数。
calib_data = [
'sample 1',
'sample 2',
...,
'sample n'
]
...
quantize(
model,
quant_config,
calib_data=calib_data,
...
)
量化后模型¶
模型量化后以Huggingface models形式组织,将原始模型中其余相关文件(tokenizer等)拷贝到量化模型目录下即可使用。