基于 Transformer 的扩散模型日益完善,已被证明能够彻底改变文本到图像的生成方式。Transformer 的功能不仅能增强模型的可扩展性和性能,还会增加模型的复杂性。
在这种情况下,模型的复杂性越高,功耗和内存消耗也就越大。
例如,使用像 Stable Diffusion 3 这样的模型进行推理时,需要巨大的 GPU 内存,因为涉及到文本编码器、扩散主干和图像解码器等组件。这样的高内存需求可能会给使用消费级 GPU 的用户带来困扰,从而影响模型的可访问性和实验性。
这时,模型量化的作用就凸显出来了。想象一下,能够将资源密集型模型缩小到更易管理的大小,而不牺牲其效果。量化就像将高分辨率图像压缩成更紧凑的格式,将模型的参数转换为低精度表示。这不仅可以减少内存使用量,还能加快计算速度,使复杂模型更易于访问和使用。
在这篇文章中,你将了解 Quanto 的量化工具如何显著提高基于 Transformer 的扩散管道的内存效率。
Quanto 介绍:多功能 PyTorch 量化后端
量化是减少深度学习模型计算和内存需求的关键技术,使其更适合部署在消费设备上。通过使用低精度数据类型(如 8 位整数 (int8))代替 32 位浮点数 (float32),量化不仅可以降低内存存储要求,还可以针对特定硬件进行优化,例如 CUDA 设备上的 int8 或 float8 矩阵乘法。
Quanto是Hugging Face团队开发的一个Python库,它利用Transformer和XLM-RoBERTa技术进行跨语言文本转换。Quanto通过量化和解量化处理实现高效、泛化和易用的多语言任务解决,适用于信息检索、社交媒体监控等多种场景。
Quanto 是 Optimum 的新量化后端,旨在提供多功能且直接的量化过程。Quanto 以其对各种功能的全面支持而脱颖而出,确保与各种模型配置和设备的兼容性:
- Eager Mode 兼容性:与不可跟踪的模型无缝协作。
- 设备灵活性:量化模型可以部署在任何设备上,包括 CUDA 和 MPS。
- 自动集成:自动插入量化/反量化存根、功能操作和量化模块。
- 简化的工作流程:提供从浮点模型到动态和静态量化模型的轻松过渡。
- 序列化支持:兼容 PyTorch weight_only 和 Safetensors 格式。
- 加速矩阵乘法:支持 CUDA 设备上的各种量化格式(int8-int8、fp16-int4、bf16-int8、bf16-int4)。
- 广泛的支持:处理 int2、int4、int8 和 float8 权重和激活。
虽然许多工具专注于缩小大型 AI 模型,但 Quanto 的设计简单且适用于各种模型。
Quanto 工作流程
要使用 pip 安装 Quanto,请使用以下代码:-
!pip install optimum-quanto
- 量化模型
以下代码将有助于将标准模型转换为量化模型
from optimum.quanto import quantize, qint8
quantize(model, weights=qint8, activations=qint8)
- 校准
Quanto 的校准模式可确保量化参数根据模型中的实际数据分布进行调整,从而提高量化模型的准确性和效率。
from optimum.quanto import Calibration
with Calibration(momentum=0.9):
model(samples)
- 量化感知训练
如果模型性能受到影响,可以对模型进行几个时期的调整,以提高模型性能。
import torch
model.train()
for batch_idx, (data, target) in enumerate(train_loader):
data, target = data.to(device), target.to(device)