Project Icon

llmc

开源工具压缩大型语言模型提升效率

llmc是一个压缩大型语言模型的开源工具,采用先进压缩算法提高效率和减小模型体积。它支持多种LLM和压缩方法,可在单GPU上量化评估大模型,兼容多种推理后端。项目提供LLM量化基准,帮助用户选择合适的压缩策略。

llmc: 实现精准高效的大语言模型压缩

llmc

License arXiv GitHub Stars visitors Discord Banner QQ Doc Doc

[ English | 中文 | 日本語 ]

llmc 是一款现成的大语言模型压缩工具,利用最先进的压缩算法提高效率并减小模型大小,同时保持性能不受影响。

英文文档请点击这里

中文文档请点击这里

社区

新闻

comp

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

  • 2024年7月16日: 🔥我们现在支持Wanda/Naive(Magnitude)用于LLM稀疏化和逐层混合位量化!

  • 2024年7月14日: 🔥我们现在支持基于旋转的量化算法QuaRot!

  • 2024年7月4日: 📱 我们开放了讨论渠道。如果您有任何问题,请加入我们的社区:

  • 2024年5月17日: 🚀 我们现在支持一些先进的大型模型,如LLaVA、Mixtral、LLaMA V3和Qwen V2。欢迎尝试!

  • 2024年5月13日: 🍺🍺🍺 我们发布了量化基准测试论文:

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

    龚瑞昊*杨勇*顾世桥*黄宇时*张云辰刘祥龙📧陶大程

    (* 表示贡献相同, 📧 表示通讯作者。)

    comp

    我们从校准成本、推理效率和量化精度等方面对量化技术进行了模块化和公平的基准测试。在不同模型和数据集上进行的近600次实验提供了三个有见地的结论,涉及校准数据、算法流程和量化配置选择。基于这些结论,我们设计了LLM PTQ流程的最佳实践,以在各种场景下实现精度和效率性能的最佳平衡。

  • 2024年3月7日: 🚀 我们发布了一个强大高效的LLM压缩工具的量化部分。值得注意的是,我们的基准测试论文即将发布😊。

亮点功能

  • 在仅一张A100/H100/H800 GPU上量化LLM(如Llama2-70B、OPT-175B)并评估其PPL💥。
  • 提供多种最先进的压缩算法与原始仓库保持一致供用户选择,用户可以在一个LLM上顺序使用多种算法💥。
  • 我们工具导出的经特定压缩算法处理的转换模型(quant部分的save_trans模式,见配置)可通过多个后端(如LightllmTensorRT-LLM)进行简单量化,得到经特定压缩算法优化的模型,该模型可由相应后端进行推理💥。
  • 我们压缩后的模型(quant部分的save_lightllm模式,见配置)具有浅层内存占用,可直接由Lightllm进行推理💥。

使用方法

  1. 克隆此仓库并安装包:

    # 安装包
    cd llmc
    pip install -r requirements.txt
    
  2. 准备模型和数据。

    # 从huggingface下载LLM后,按如下方式准备校准和评估数据:
    cd tools
    python download_calib_dataset.py --save_path [校准数据路径]
    python download_eval_dataset.py --save_path [评估数据路径]
    
  3. 选择一种算法来量化您的模型:

# 以下是关于Awq的示例:
cd scripts
# 修改bash文件中的llmc路径,即``llmc_path``。您还可以选择位于``llmc/configs/quantization/Awq/``中的一个配置
# 来量化您的模型,或者通过更改run_awq_llama.sh中的``--config``参数来参考我们提供的配置创建您自己的配置。
bash run_awq_llama.sh

配置

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

  • model:

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

    # 注意:某些算法不需要``calib``,比如naive...因此,您可以删除这部分。
    calib:
        # 替换为校准数据名称,例如之前下载的pileval、c4、wikitext2或ptb。
        name: pileval
        download: False
        # 替换为之前下载的校准数据路径,例如pileval、c4、wikitext2或ptb。
        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: 评估数据路径
        # 对于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``或``save_trtllm``为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
            # 使用直通估计,这对于可学习的校准算法是必要的。
            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
    

支持的模型列表

BLOOM

LLaMA

LLaMA V2

StarCoder

OPT

Falcon

InternLM2

MistralLLaMA V3

Mixtral

Qwen V2

LLaVA

InternLM2.5

StableLM

Gemma2

Phi2

Phi 1.5

MiniCPM

SmolLM

您可以参考llmc/models/*.py下的文件添加自己的模型类型。

支持的算法列表

量化

✅ 朴素量化

AWQ

GPTQ

SmoothQuant

OS+

OmniQuant

NormTweaking

AdaDim

QUIK

SpQR

DGQ

OWQ

LLM.int8()

HQQ

QuaRot

剪枝

✅ 朴素剪枝(幅度)

Wanda

ShortGPT

致谢

我们的代码开发参考了以下仓库:

Star历史

Star历史图表

引用

如果您发现我们的LLM-QBench论文/llmc工具包对您的研究有用或相关,请引用我们的论文:

@misc{llmc,
   author = {llmc contributors},
   title = {llmc: Towards Accurate and Efficient LLM Compression},
   year = {2024},
   publisher = {GitHub},
   journal = {GitHub repository},
   howpublished = {\url{https://github.com/ModelTC/llmc}},
}

@misc{gong2024llmqbench,
      title={LLM-QBench: A Benchmark Towards the Best Practice for Post-training Quantization of Large Language Models},
      author={Ruihao Gong and Yang Yong and Shiqiao Gu and Yushi Huang and Yunchen Zhang and Xianglong Liu and Dacheng Tao},
      year={2024},
      eprint={2405.06001},
      archivePrefix={arXiv},
      primaryClass={cs.LG}
}

@misc{gong2024llmcbenchmarkinglargelanguage,
      title={LLMC: Benchmarking Large Language Model Quantization with a Versatile Compression Toolkit},
      author={Ruihao Gong and Yang Yong and Shiqiao Gu and Yushi Huang and Chentao Lv and Yunchen Zhang and Xianglong Liu and Dacheng Tao},
      year={2024},
      eprint={2405.06001},
      archivePrefix={arXiv},
      primaryClass={cs.LG},
      url={https://arxiv.org/abs/2405.06001},
}
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

白日梦AI

白日梦AI提供专注于AI视频生成的多样化功能,包括文生视频、动态画面和形象生成等,帮助用户快速上手,创造专业级内容。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

讯飞绘镜

讯飞绘镜是一个支持从创意到完整视频创作的智能平台,用户可以快速生成视频素材并创作独特的音乐视频和故事。平台提供多样化的主题和精选作品,帮助用户探索创意灵感。

Project Cover

讯飞文书

讯飞文书依托讯飞星火大模型,为文书写作者提供从素材筹备到稿件撰写及审稿的全程支持。通过录音智记和以稿写稿等功能,满足事务性工作的高频需求,帮助撰稿人节省精力,提高效率,优化工作与生活。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号