SVDQuant:MIT 推出的扩散模型后训练的量化技术,能够将模型的权重和激活值量化至4位,减少内存占用并加速推理过程

本文涉及的产品
视觉智能开放平台,分割抠图1万点
视觉智能开放平台,图像资源包5000点
视觉智能开放平台,视频资源包5000点
简介: SVDQuant是由MIT研究团队推出的扩散模型后训练量化技术,通过将模型的权重和激活值量化至4位,显著减少了内存占用并加速了推理过程。该技术引入了高精度的低秩分支来吸收量化过程中的异常值,支持多种架构,并能无缝集成低秩适配器(LoRAs),为资源受限设备上的大型扩散模型部署提供了有效的解决方案。

❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发非常感兴趣,我会每日跟你分享最新的 AI 资讯和开源应用,也会不定期分享自己的想法和开源实例,欢迎关注我哦!

🥦 微信公众号|搜一搜:蚝油菜花 🥦


🚀 快速阅读

  1. 量化压缩:将扩散模型的权重和激活值量化到4位,减少模型大小和内存占用。
  2. 加速推理:通过量化减少计算复杂度,提高模型在GPU上的推理速度。
  3. 低秩分支:引入低秩分支处理量化中的异常值,减少量化误差,提升图像质量。

正文(附运行示例)

SVDQuant 是什么

公众号: 蚝油菜花 - nunchaku

SVDQuant是由MIT研究团队推出的后训练量化技术,专门针对扩散模型进行优化。该技术通过将模型的权重和激活值量化至4位,显著减少了内存占用,并加速了推理过程。SVDQuant引入了一个高精度的低秩分支,用于吸收量化过程中的异常值,从而在保持图像质量的同时,实现了在16GB 4090 GPU上3.5倍的显存优化和8.7倍的延迟减少。

SVDQuant支持DiT和UNet架构,并能无缝集成现成的低秩适配器(LoRAs),无需重新量化。这为在资源受限的设备上部署大型扩散模型提供了有效的解决方案。

SVDQuant 的主要功能

  • 量化压缩:将扩散模型的权重和激活值量化到4位,减少模型大小,降低内存占用。
  • 加速推理:量化减少计算复杂度,提高模型在GPU上的推理速度。
  • 低秩分支吸收异常值:引入低秩分支处理量化中的异常值,减少量化误差。
  • 内核融合:设计推理引擎Nunchaku,基于内核融合减少内存访问,进一步提升推理效率。
  • 支持多种架构:兼容DiT和UNet架构的扩散模型。
  • LoRA集成:无缝集成低秩适配器(LoRAs),无需重新量化。

SVDQuant 的技术原理

  • 量化处理:对模型的权重和激活值进行4位量化,对保持模型性能构成挑战。
  • 异常值处理:用平滑技术将激活值中的异常值转移到权重上,基于SVD分解权重,将权重分解为低秩分量和残差。
  • 低秩分支:引入16位精度的低秩分支处理权重中的异常值,将残差量化到4位,降低量化难度。
  • Eckart-Young-Mirsky定理:移除权重中的主导奇异值,大幅减小权重的幅度和异常值。
  • 推理引擎Nunchaku:设计推理引擎,基于融合低秩分支和低比特分支的内核,减少内存访问和内核调用次数,降低延迟。

如何运行 SVDQuant

安装依赖

首先,创建并激活一个conda环境,然后安装所需的依赖包:

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

然后从源码构建并安装nunchaku包:

git clone https://github.com/mit-han-lab/nunchaku.git
cd nunchaku
git submodule init
git submodule update
pip install -e .

使用示例

example.py中,提供了一个运行INT4 FLUX.1-schnell模型的最小脚本:

import torch
from diffusers import FluxPipeline
from nunchaku.models.transformer_flux import NunchakuFluxTransformer2dModel

transformer = NunchakuFluxTransformer2dModel.from_pretrained("mit-han-lab/svdq-int4-flux.1-schnell")
pipeline = FluxPipeline.from_pretrained(
    "black-forest-labs/FLUX.1-schnell", transformer=transformer, torch_dtype=torch.bfloat16
).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")

资源


❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发非常感兴趣,我会每日跟你分享最新的 AI 资讯和开源应用,也会不定期分享自己的想法和开源实例,欢迎关注我哦!

🥦 微信公众号|搜一搜:蚝油菜花 🥦

相关文章
|
5月前
|
KVM 虚拟化
KVM的热添加技术之内存
文章介绍了KVM虚拟化技术中如何通过命令行调整虚拟机内存配置,包括调小和调大内存的步骤,以及一些相关的注意事项。
128 4
KVM的热添加技术之内存
|
5月前
|
程序员 编译器 C++
【C++核心】C++内存分区模型分析
这篇文章详细解释了C++程序执行时内存的四个区域:代码区、全局区、栈区和堆区,以及如何在这些区域中分配和释放内存。
73 2
|
4月前
|
机器学习/深度学习 算法 物联网
大模型进阶微调篇(一):以定制化3B模型为例,各种微调方法对比-选LoRA还是PPO,所需显存内存资源为多少?
本文介绍了两种大模型微调方法——LoRA(低秩适应)和PPO(近端策略优化)。LoRA通过引入低秩矩阵微调部分权重,适合资源受限环境,具有资源节省和训练速度快的优势,适用于监督学习和简单交互场景。PPO基于策略优化,适合需要用户交互反馈的场景,能够适应复杂反馈并动态调整策略,适用于强化学习和复杂用户交互。文章还对比了两者的资源消耗和适用数据规模,帮助读者根据具体需求选择最合适的微调策略。
1331 5
|
5月前
ARM64技术 —— MMU处于关闭状态时,内存访问是怎样的?
ARM64技术 —— MMU处于关闭状态时,内存访问是怎样的?
|
6月前
|
机器学习/深度学习 数据采集 PyTorch
构建高效 PyTorch 模型:内存管理和优化技巧
【8月更文第27天】PyTorch 是一个强大的深度学习框架,被广泛用于构建复杂的神经网络模型。然而,在处理大规模数据集或使用高性能 GPU 进行训练时,有效的内存管理对于提升模型训练效率至关重要。本文将探讨如何在 PyTorch 中有效地管理内存,并提供一些优化技巧及代码示例。
537 1
|
7月前
|
机器学习/深度学习 存储 缓存
操作系统中的内存管理技术
在数字世界的复杂架构中,操作系统扮演着枢纽的角色,其中内存管理作为其核心组件之一,保障了计算资源的高效利用与稳定运行。本文将深入探讨操作系统中内存管理的关键技术,包括虚拟内存、分页和分段机制,以及现代操作系统如何通过这些技术优化性能和提高系统稳定性。通过具体实例和数据分析,我们将揭示这些技术如何在实际应用中发挥作用,并讨论它们面临的挑战及未来发展方向。 【7月更文挑战第16天】
132 6
|
7月前
|
存储 缓存 Java
Android性能优化:内存管理与LeakCanary技术详解
【7月更文挑战第21天】内存管理是Android性能优化的关键部分,而LeakCanary则是进行内存泄漏检测和修复的强大工具。
|
7月前
|
物联网 云计算
操作系统中的内存管理技术解析
【7月更文挑战第13天】本文将深入探讨操作系统中至关重要的内存管理技术,包括虚拟内存、分页和分段机制等核心概念。我们将从内存管理的基本原理出发,逐步过渡到高级技术如交换空间和文件映射,最后讨论现代操作系统中内存管理面临的挑战与未来发展方向。文章旨在为读者提供对操作系统内存管理全面而深入的理解。
109 7
|
7月前
|
机器学习/深度学习 自然语言处理 算法
ICML 2024:零阶优化器微调大模型,大幅降低内存
【7月更文挑战第14天】ICML 2024研究表明,零阶优化用于大模型微调能大幅降低内存需求。该论文通过避免反向传播,减少LLM(大型语言模型)微调的内存开销,提出新方法,适用于资源受限环境。虽然性能可能不及一阶优化器,但为高效NLP计算开辟了新途径。论文链接:[arxiv.org/abs/2402.11592](https://arxiv.org/abs/2402.11592)**
136 3
|
7月前
|
存储 缓存 NoSQL
Java中的内存数据库与缓存技术
Java中的内存数据库与缓存技术

热门文章

最新文章