麻省理工学院(MIT)Han 实验室一直在积极开展一系列项目,包括微小机器学习(Tiny Machine Learning)、SANA、SVDQuant 和 QServe,这些项目旨在提高人工智能计算的效率,并实现在边缘设备上的高效部署。

在这里插入图片描述

根据实验室的博文,SVDQuant 是一种用于扩散模型的后训练量化范式,可以实现精确的 4 位量化,并在 16GB 4090 笔记本电脑上支持 12B FLUX 模型,速度提高了 3 倍。这一突破使大型语言模型能够在笔记本电脑等边缘设备上部署,同时保持高性能。

SVDQuant 模型将 FLUX 模型的权重和激活量化为 4 位,在 16GB 4090 GPU 笔记本电脑上实现了 3.5 倍的内存缩减和 8.7 倍的延迟缩减。之所以能做到这一点,是因为使用了新的 W4A4 量化范式,该范式可通过 4 位扩散模型的低阶成分吸收异常值。

在这里插入图片描述

SVDQuant 模型是麻省理工学院 HAN 实验室为推动高效人工智能计算的发展而做出的更广泛努力的一部分。这包括开发新的技术和架构,以降低大型语言模型的计算要求和内存使用,同时保持高性能。

SVDQuant 模型的影响已超越自然语言处理领域,扩展到图像理解任务和视觉语言模型等领域。SVDQuant 与视觉语言模型(VLM)的集成可以通过支持 VILA 等领先的视觉语言模型来提高这些任务的性能。

总之,麻省理工学院 HAN 实验室开发的 SVDQuant 模型代表了深度学习领域的重大进步,尤其是在模型量化领域。它的主要特点包括 4 位量化、4 位扩散模型的低秩分量以及吸收异常值的能力。该模型的意义超出了自然语言处理的范畴,延伸到了图像理解任务等领域,其潜在应用是多样而广泛的。

性能

在这里插入图片描述
SVDQuant 将 12B FLUX.1 的模型大小减少了 3.6 倍。 此外,Nunchaku 还将 16 位模型的内存使用率进一步降低了 3.5 倍,并在台式机和笔记本电脑的英伟达 RTX 4090 GPU 上实现了比 NF4 W4A16 基准高 3.0 倍的速度提升。 值得注意的是,在笔记本电脑 4090 上,通过消除 CPU 卸载,它总共实现了 10.1 倍的速度提升。

与 LoRA 集成

在这里插入图片描述

部署

安装依赖项:

conda create -n nunchaku python=3.11
conda activate nunchaku
pip install torch==2.4.1 torchvision==0.19.1 torchaudio==2.4.1 --index-url https://download.pytorch.org/whl/cu121
pip install diffusers ninja wheel transformers accelerate sentencepiece protobuf
pip install huggingface_hub peft opencv-python einops gradio spaces GPUtil

安装 nunchaku 软件包: 确保有 gcc/g++>=11。 如果没有,可以通过 Conda 安装:

conda install -c conda-forge gxx=11 gcc=11

Build

git clone https://github.com/mit-han-lab/nunchaku.git
cd nunchaku
git submodule init
git submodule update
pip install -e . # 也可以用python setup.py install
example.py
import torch

from nunchaku.pipelines import flux as nunchaku_flux

pipeline = nunchaku_flux.from_pretrained(
    "black-forest-labs/FLUX.1-schnell",
    torch_dtype=torch.bfloat16,
    qmodel_path="mit-han-lab/svdquant-models/svdq-int4-flux.1-schnell.safetensors",  # download from Huggingface
).to("cuda")
image = pipeline("A cat holding a sign that says hello world", num_inference_steps=4, guidance_scale=0).images[0]
image.save("example.png")

具体来说,双节棍与扩散器共享相同的应用程序接口,可以类似的方式使用。 FLUX.1-dev 模型也可以同样的方式加载,方法是将所有 schnell 替换为 dev。

更多阅读和资料来源:

  • SVDQuant 论文:https://arxiv.org/abs/2411.05007
  • 量化库:https://github.com/mit-han-lab/deepcompressor
  • 推理引擎:https://github.com/mit-han-lab/nunchaku
  • 网站: https://hanlab.mit.edu/projects/svdquant
  • 演示: https://svdquant.mit.edu/
  • 博客: https://hanlab.mit.edu/blog/svdquant

最近测试下来,cuda要求过高,我本机cuda 12.6 gcc 14.2 build不了,换docker模拟12.1 和 12.4也存在问题,前者无法编译,后者编译成功,却无法解析ckpt(safetensors), 所以我修正了文章标题,以免误导。

感谢大家花时间阅读我的文章,你们的支持是我不断前进的动力。点赞并关注,获取最新科技动态,不落伍!🤗🤗🤗

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐