flute

flute

专为LUT量化大语言模型开发的灵活查找表引擎

FLUTE是专为LUT量化大语言模型开发的灵活查找表引擎。该引擎支持整数、浮点和学习型等多种量化方案,可与vLLM和Hugging Face等主流框架无缝集成。FLUTE兼容LLaMA-3/3.1、Gemma-2等多种模型,能在保持模型性能的同时大幅降低内存占用和推理延迟,为大语言模型优化提供了高效解决方案。

FLUTE量化LLM查找表GPUGithub开源项目
<p align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/6b81cf53-225f-4abe-b391-fb790f4802af.png" alt="" width="40%" align="top" style="border-radius: 10px; padding-left: 120px; padding-right: 120px; background-color: white;"> </p> <p align="center"> <em><strong>FLUTE</strong>:用于LUT量化LLM的灵活查找表引擎<br></em> </p> <div align="center">

GitHub许可证 <a href="https://pypi.org/project/flute-kernel/">版本</a> <a href="https://arxiv.org/abs/2407.10960">arXiv</a>

</div> <div align="center">

[背景] [基准测试] [入门指南] [兼容性] [模型库]

</div>

更新

  • 2024年8月5日 添加量化的LLaMA-3.1(8B/70B)模型。
  • 2024年8月2日 添加对RTX4090的支持。
  • 2024年7月27日 添加对LLaMA-3.1(405B)的支持,并优化了BF16性能。FP16仍然是推荐的数据类型,尤其是在3比特设置下。

安装

通过pip安装FLUTE或从源代码构建

# 对于CUDA 12.1 pip install flute-kernel # 对于CUDA 11.8 pip install flute-kernel -i https://flute-ai.github.io/whl/cu118

前往入门指南并尝试使用!

背景

均匀量化将全精度权重转换为等大小的低精度区间。查找表(LUT)量化是非均匀量化的一种灵活变体,可以通过查找表将区间映射到任意值。

<table align="center"> <tr> <th>均匀(整数)量化</th> <th>查找表量化</th> </tr> <tr> <td align="center">

$$\widehat{\mathbf{W}} = \mathtt{float}(\mathbf{Q}) \cdot \mathbf{s}$$

</td> <td align="center">

$$\widehat{\mathbf{W}} = \mathtt{tableLookup}(\mathbf{Q}, \mathtt{table}) \cdot \mathbf{s}$$

</td> </tr> </table>

其中$\mathbf{Q}$表示量化权重,$\mathbf{s}$表示(分组)缩放,$\widehat{\mathbf{W}}$表示反量化权重。以下是FLUTE支持的一些查找表示例。

<table align="center"> <tr> <th>示例</th> <th>说明</th> </tr> <tr> <td align="left">

int4int3int2

</td> <td align="left">

恢复均匀/整数量化

</td> </tr> <tr> <td align="left">

fp4fp3fp2

</td> <td align="left"> </td> </tr> <tr> <td align="left">

nf4nf3nf2

</td> <td align="left">

泛化QLoRA引入的nf4数据格式

</td> </tr> </td> </tr> <tr> <td align="left">

任意表

</td> <td align="left">

甚至可以学习它!

</td> </tr> </table>

FLUTE支持的新模型

内核的灵活性可能会带来新的量化算法。作为概念证明,我们发布了一些使用**学习正态浮点(NFL)**量化的模型 — 这是对QLoRA引入的nf4数据格式的简单扩展。NFL使用NF量化的查找表和缩放初始化查找表和缩放。然后,它使用校准数据通过直通估计来学习缩放,以获得关于缩放的梯度。

基准测试

有关其他基准测试、详细分析和相应的指令调优模型,请参阅论文和模型库

<p align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/30948ddc-bd79-420f-b114-d094ac9e2445.jpg" /> </p>

LLaMA-3.1

Wiki PPLC4 PPLLLM评估平均值Wiki PPLC4 PPLLLM评估平均值
LLaMA-3.1 (8B)6.319.6069.75LLaMA-3.1 (70B)2.827.1875.45
+ NFL W4G646.2410.0669.13+ NFL W4G643.097.5374.84
+ NFL W3G647.2311.8365.66+ NFL W3G644.298.9172.65

Gemma-2

Wiki PPLC4 PPLLLM评估平均值Wiki PPLC4 PPLLLM评估平均值
Gemma-2 (9B)6.8810.1273.12Gemma-2 (27B)5.708.9875.71
+ NFL W4G646.4910.3572.50+ NFL W4G645.699.3174.11

入门指南

FLUTE + vLLM

FLUTE量化模型(模型库)可以直接使用现有框架(如vLLM)进行服务。

- python -m vllm.entrypoints.openai.api_server \ + python -m flute.integrations.vllm vllm.entrypoints.openai.api_server \ --model [模型] \ --revision [版本] \ --tensor-parallel-size [TP大小] \ + --quantization flute

例如,以下命令在单个GPU上运行FLUTE量化的LLaMA-3.1(8B)。

python -m flute.integrations.vllm vllm.entrypoints.openai.api_server \ --model radi-cho/Meta-Llama-3.1-8B-FLUTE \ --quantization flute

然后我们可以像往常一样查询vLLM服务器。

curl http://localhost:8000/v1/completions \ -H "Content-Type: application/json" \ -d '{ "model": "radi-cho/Meta-Llama-3.1-8B-FLUTE", "prompt": "San Francisco is a", "max_tokens": 7, "temperature": 0 }'

FLUTE + HuggingFace

FLUTE也可以与HuggingFace及其accelerate扩展无缝配合。这种集成主要是实验性的,尚未优化。对性能考虑敏感的用户应该使用vLLM集成。

以下示例对密集模型执行简单量化。之后,模型可以正常使用。(即将支持加载预量化模型!)

import flute.integrations.base flute.integrations.base.prepare_model_flute( name="model.model.layers", module=model.model.layers, # 适用于LLaMA-3和Gemma-2 num_bits=num_bits, group_size=group_size, fake=False, handle_hooks=True) # 用于`accelerate`钩子

支持和兼容性

内核

描述支持(通过pip)支持(从源代码构建)
输入数据类型torch.float16 torch.bfloat16
位数4位 3位2位
分组大小32 64 128 256
GPUA100 A6000 RTX 4090H100(未优化)

[!警告] 在当前版本中,我们注意到torch.bfloat16torch.float16慢。这可能是由于缺乏调优,以及Ampere GPU缺少对bfloat16矢量化原子加法的硬件加速。

[!警告] 我们注意到在使用位数=4,分组大小=256,GPU=A100时出现了一些数值不稳定的情况,尽管这种情况相对罕见(9360个测试用例中有8个失败)。我们还注意到在某些情况下使用位数=4,分组大小=256,数据类型=bfloat16,GPU=RTX4090时存在正确性问题(52个测试用例中有1个失败)。我们将对此进行调查,但目前建议避免使用这些特定配置(W4G256)。

模型

[!注意] 在当前版本中,由于历史原因,内核是形状专用的(即我们为每个矩阵形状调整tile大小等)。请参阅下表了解支持的用例,因为不同的平台和张量并行大小会改变矩阵形状。我们计划在不久的将来添加对广泛形状的支持。同时,如果您有任何特定的模型需求,请告诉我们,我们很乐意为其添加支持。

模型单GPU / 流水线并行张量并行
LLaMA-3/3.1 (8B)
LLaMA-3/3.1 (70B)2或4个GPU
LLaMA-3.1 (405B)4或8个GPU
Gemma-2 (9B)
Gemma-2 (27B)2或4个GPU

模型库

[!注意] 我们在此发布的模型是在更多数据上训练的,因此与论文中的模型不同。

[!提示] HuggingFace Hub链接默认使用NFL W4G64量化。要使用NFL W3G64量化,请添加--revision nfl_w3g64

LLaMA-3.1 (8B)

WikiC4PIQAARC-EARC-CHellaSwagWino平均
未量化6.319.6079.1682.2052.6560.7174.0369.75
NFL W4G646.2410.0679.3881.6151.5459.5773.5669.13
NFL W3G647.2311.8377.9176.9846.3356.7470.3265.66

LLaMA-3.1 (70B)

WikiC4PIQAARC-EARC-CHellaSwagWino平均
未量化2.827.1882.8185.3159.6467.4982.0075.45
NFL W4G643.097.5383.0385.5258.1967.0480.4374.84
NFL W3G644.298.9182.0483.2954.7864.9978.1472.65

LLaMA-3.1 Instruct (8B)

WikiC4
NFL W4G646.7811.11
NFL W3G647.7312.83

LLaMA-3.1 Instruct (70B)

WikiC4
NFL W4G644.159.18
NFL W3G644.749.48

LLaMA-3 (8B)

WikiC4PIQAARC-EARC-CHellaSwagWino平均
未量化6.19.279.980.150.460.272.868.6
NFL W4G646.119.3879.3379.7949.7459.2273.9568.41
NFL W3G647.1311.0678.7876.2244.3756.6970.3265.28

LLaMA-3 (70B)

WikiC4PIQAARC-EARC-CHellaSwagWino平均
未量化2.96.982.486.960.366.480.675.3
NFL W4G643.037.0382.1585.9857.8566.1779.7974.39
NFL W3G644.158.1080.7483.7155.2964.0578.4572.45

LLaMA-3 Instruct (8B)

WikiC4
NFL W4G646.7810.61
NFL W3G647.7512.28

LLaMA-3 Instruct (70B)

WikiC4
NFL W4G643.677.95
NFL W3G644.9010.86

Gemma-2 (9B)

WikiC4PIQAARC-EARC-CHellaSwagWino平均
未量化6.8810.1281.3987.3761.3561.2374.2773.12
NFL W4G646.4910.3581.2886.2459.3060.4075.3072.50
NFL W3G647.0611.1480.5283.1655.4658.2872.6970.02

Gemma-2 (27B)

WikiC4PIQAARC-EARC-CHellaSwagWino平均
未量化5.708.9883.2487.8462.8865.3579.2475.71
NFL W4G645.699.3182.5386.4559.2264.1378.2174.11

Gemma-2 Instruct (9B)

WikiC4
NFL W4G646.8811.02
NFL W3G647.3511.72

Gemma-2 Instruct (27B)

WikiC4
NFL W4G645.919.71

量化您自己的模型

我们提供了两个API来量化自定义模型。最简单的方法是使用命令行界面。

简单正态浮点量化

python -m flute.integrations.base \ --pretrained_model_name_or_path meta-llama/Meta-Llama-3-70B-Instruct \ --save_directory Meta-Llama-3-70B-Instruct-NF4 \ --num_bits 4 \ --group_size 128

CLI本质上包装了以下Python API,

from transformers import ( LlamaForCausalLM, Gemma2ForCausalLM, AutoModelForCausalLM) import flute.integrations.base model = AutoModelForCausalLM.from_pretrained( pretrained_model_name_or_path, device_map="cpu", torch_dtype="auto") if isinstance(model, (LlamaForCausalLM, Gemma2ForCausalLM)): flute.integrations.base.prepare_model_flute( name="model.model.layers", module=model.model.layers, num_bits=num_bits, group_size=group_size, fake=False) else: # 更多模型即将推出 raise NotImplementedError

学习正态浮点量化

即将推出!

从源代码构建

  1. 克隆CUTLASS库。
# 不幸的是,目前路径是硬编码的。如果您在不同的目录中安装CUTLASS, # 请确保更新了`setup.py`中相应的路径。 cd /workspace git clone https://github.com/NVIDIA/cutlass.git cd cutlass git checkout v3.4.1
  1. 构建。
git clone https://github.com/HanGuo97/flute cd flute pip install -e .

**注意:**构建过程要求本地CUDA版本(nvcc --version)与PyTorch的CUDA匹配。在构建过程中出现与CUDA版本不匹配相关错误的情况下,请尝试添加--no-build-isolation

致谢和引用

特别感谢Dmytro Ivchenko、Yijie Bei和Fireworks AI团队的有益讨论。如果您发现本仓库中的任何模型或代码有用,请随意引用:

@article{flute2024, title={Fast Matrix Multiplications for Lookup Table-Quantized LLMs}, author={Guo, Han and Brandon, William and Cholakov, Radostin and Ragan-Kelley, Jonathan and Xing, Eric P and Kim, Yoon}, journal={arXiv preprint arXiv:2407.10960}, year={2024} }

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多