Project Icon

flute

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

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

FLUTE:用于LUT量化LLM的灵活查找表引擎

GitHub许可证 版本 arXiv

更新

  • 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)量化是非均匀量化的一种灵活变体,可以通过查找表将区间映射到任意值。

均匀(整数)量化查找表量化

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

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

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

示例说明

int4int3int2

恢复均匀/整数量化

fp4fp3fp2

nf4nf3nf2

泛化QLoRA引入的nf4数据格式

任意表

甚至可以学习它!

FLUTE支持的新模型

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

基准测试

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

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}
}
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

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

Project Cover

AI写歌

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

Project Cover

有言AI

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

Project Cover

Kimi

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

Project Cover

阿里绘蛙

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

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

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

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