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等)拷贝到量化模型目录下即可使用。