LLM之llmc:llmc的简介、安装和使用方法、案例应用之详细攻略

LLM之llmc:llmc的简介、安装和使用方法、案例应用之详细攻略

目录

llmc的简介

1、新闻

2、突出特性

3、支持的模型列表、量化算法、剪枝算法

llmc的安装和使用方法

1、安装

克隆此仓库并安装包:

准备模型和数据

选择一个算法来量化你的模型:

2、使用方法

model

calib

eval

save

quant

llmc的案例应用


llmc的简介

llmc 是一个即插即用的工具,旨在通过最先进的压缩算法进行大型语言模型的压缩,以提高效率并减小模型大小,同时不牺牲性能。

1、新闻

2024 年 7 月 23 日: ������ 我们发布了全新版本的基准论文:

LLMC:使用多功能压缩工具包对大型语言模型量化进行基准测试。

Ruihao Gong*, Yang Yong*, Shiqiao Gu*, Yushi Huang*, Chengtao Lv, Yunchen Zhang, Xianglong Liu��, Dacheng Tao(* 表示同等贡献,�� 表示通讯作者。)

我们不关注最佳实践,而是考虑校准数据、算法和数据格式,以模块化和公平的方式对 LLM 量化进行基准测试。通过详细的观察和分析,我们为不同配置下的性能和方法改进提供了各种类型的新点。借助强大的工具包 LLMC 和全面的见解,未来的 LLM 研究人员可以有效地将合适的算法和低位格式集成到他们的应用中,从而使大型语言模型的压缩变得民主化。

2024年7月16号: ��我们现在已经支持了大模型稀疏算法Wanda/Naive(Magnitude)和层间混合bit量化!

2024年7月14号: ��我们现在已经支持了旋转类量化算法QuaRot!

2024年7月4日: �� 我们提供了公开的讨论渠道. 如果您有任何问题,可以加入我们的社区:

2024年5月13日: ������ 我们发布了量化基准论文:

LLM-QBench:大型语言模型训练后量化的最佳实践基准.

Ruihao Gong*, Yang Yong*, Shiqiao Gu*, Yushi Huang*, Yunchen Zhang, Xianglong Liu��, Dacheng Tao(* 表示共同第一作者, �� 表示通讯作者.)

我们模块化并公正地基准测试了量化技术,考虑到校准成本、推理效率和量化精度。在多种模型和数据集上进行的近 600 项实验提供了三个洞见: 关于校准数据、算法流程和量化配置选择。基于这些洞见,设计了一个最佳的大型语言模型 PTQ 流程,实现了在各种场景下最佳的精确度和效率性能平衡。

2024年3月7日: �� 我们发布了强大且高效的大型语言模型压缩工具的量化部分。值得注意的是,我们的基准论文即将发布��。

2、突出特性

量化大型语言模型,如 Llama2-70B、OPT-175B,并在仅一个 A100/H100/H800 GPU上评估其 PPL。

为用户提供选择的最新的与原论文代码仓库精度对齐的压缩算法,并且用户可以在一个大型语言模型上依次使用多个算法。

由我们工具通过特定压缩算法导出的转换模型(save_trans模式在quant部分的配置)可以通过多个后端进行简单量化,得到经过特定压缩算法优化的模型,相应的后端可以进行推断。

我们的压缩模型(save_lightllm模式在quant部分的[配置](#配置))具有较低的内存占用,可以直接通过Lightllm进行推断。

3、支持的模型列表量化算法剪枝算法

支持的模型包括 BLOOM、LLaMA、LLaMA V2、StarCoder、OPT、Falcon、InternLM2、Mistral 和 LLaMA V3。你可以参考 llmc/models/*.py 目录下的文件,添加你自己的模型类型。

支持的算法有两类:

量化算法包括 Naive、AWQ、GPTQ、SmoothQuant、OS+、OmniQuant、NormTweaking、AdaDim、QUIK、SpQR、DGQ、OWQ、LLM.int8()、HQQ 和 QuaRot;

剪枝算法包括 Naive (Magnitude)、Wanda 和 ShortGPT

llmc的安装和使用方法

1、安装

克隆此仓库并安装包:

# 安装包

# 安装包
cd llmc
pip install -r requirements.txt

准备模型和数据

# 在从huggingface下载LLM后,按以下方式准备校准和评估数据:
cd tools
python download_calib_dataset.py --save_path [校准数据路径]
python download_eval_dataset.py --save_path [评估数据路径]

选择一个算法来量化你的模型:

# 这是一个关于 Awq 的例子:
cd scripts
# 修改 bash 文件中的 llmc 路径,``llmc_path``。你也可以选择``llmc/configs/quantization/Awq/``中的一个配置来量化你的模型,或者通过更改``--config``参数在 run_awq_llama.sh 中使用我们提供的配置。
bash run_awq_llama.sh

2、使用方法

配置

为了帮助用户设计他们的配置,我们现在解释我们在llmc/configs/下提供的所有配置中的一些通用配置:

model

model:
    # 用``llmc/models/*.py``中的类名替换。
    type: Llama
    # 用你的模型路径替换。
    path: model path
    torch_dtype: auto

calib

# 注意:一些算法不需要``calib``,如 naive... 所以,你可以移除这部分。
calib:
    # 用之前下载的校准数据名称替换,例如,pileval、c4、wikitext2 或 ptb。
    name: pileval
    download: False
    # 用之前下载的某个校准数据的路径替换,例如,pileval、c4、wikitext2 或 ptb。
    path: calib data path
    n_samples: 128
    bs: -1
    seq_len: 512
    # 用``llmc/data/dataset/specified_preproc.py``中的函数名称替换。
    preproc: general
    seed: *seed

eval

# 如果你想评估你的预训练/转换/假量化模型的 PPL。
eval:
    # 你可以评估预训练、转换、假量化模型,并设置你想要评估的位置。
    eval_pos: [pretrain, transformed, fake_quant]
    # 用之前下载的评估数据的名称替换,例如,c4、wikitext2、ptb 或 [c4, wikitext2]。
    name: wikitext2
    download: False
    path: eval data path
    # 对于 70B 模型评估,bs 可以设置为 20,并且可以将 inference_per_block 设置为 True。
    # 对于 7B / 13B 模型评估,bs 可以设置为 1,并且可以将 inference_per_block 设置为 False。
    bs: 1
    inference_per_block: False
    seq_len: 2048

save

save:
    # 如果``save_trans``为 True,这意味着你想要导出转换模型,例如,参数修改的模型,其性能和结构与原始模型相同,用户可以对转换模型进行简单量化,以获得与特定算法量化模型相同的性能。
    save_trans: False
    # 如果``save_lightllm``为 True,这意味着你想要导出真实的量化模型,例如,低位权重和权重及激活量化参数。
    save_lightllm: False
    # 如果``save_fake``为 True,意味着你想要导出假量化模型,例如,去量化的权重和激活量化参数。
    save_fake: False
    save_path: ./save

quant

quant:
    # 用``llmc/compression/quantization/*.py``中的类名替换。
    method: OmniQuant
    # 仅权重量化没有``act``部分。
    weight:
        bit: 8
        symmetric: True
        # 量化粒度:per_channel, per_tensor, per_head(不推荐)。
        granularity: per_channel
        group_size: -1
        # 校准算法:learnble, mse, 以及 minmax(默认)。
        calib_algo: learnable
        # 使用直通估计(Stright-Through Estimation),这对于可学习的校准算法是必需的。
        ste: True
    act:
        bit: 8
        symmetric: True
        # 量化粒度:per_token, per_tensor
        granularity: per_token
        ste: True
        # 静态量化(校准期间的量化)或动态量化(推理期间的量化)。
        static: True
    # 这部分是为特定算法设计的,用户可以参考我们提供的算法来设计他们自己的算法。
    special:
        let: True
        lwc_lr: 0.01
        let_lr: 0.005
        use_shift: False
        alpha: 0.5
        deactive_amp: True
        epochs: 20
        wd: 0
    # 如果 quant_out 为 True,使用前一个量化块的输出作为后续块的校准数据。
    quant_out: True

llmc的案例应用

持续更新中……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个处女座的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值