2026年7月2日 周四晚上19:30,报名腾讯会议了解“如何构建自进化的动态知识库(Brain)”(限30人)
免费POC, 零成本试错
FDE知识库

FDE知识库

学习大模型的前沿技术与行业落地应用


收藏

动手实践:如何利用 H100 GPU +Quanto 优化 AI 模型性能且不损效果?

发布日期:2024-09-03 22:17:33 浏览次数: 2847
作者:卓普云 AI Droplet

微信搜一搜,关注“卓普云 AI Droplet”

基于 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

1、量化模型

以下代码将有助于将标准模型转换为量化模型

from optimum.quanto import quantize, qint8quantize(model, weights=qint8, activations=qint8)
2、校准
Quanto 的校准模式可确保量化参数根据模型中的实际数据分布进行调整,从而提高量化模型的准确性和效率。
from optimum.quanto import Calibration
with Calibration(momentum=0.9):model(samples)


3、量化感知训练

如果模型性能受到影响,可以对模型进行几个时期的调整,以提高模型性能。

import torchmodel.train()for batch_idx, (data, target) in enumerate(train_loader):data, target = data.to(device), target.to(device)optimizer.zero_grad()output = model(data).dequantize()loss = torch.nn.functional.nll_loss(output, target)loss.backward()optimizer.step()


4、冻结整数权重

冻结模型时,浮点权重将转换为量化权重。

from optimum.quanto import freezefreeze(model)

H100 基准测试研究

H100 GPU 是一款高性能显卡,专为要求苛刻的 AI 任务而设计,包括对大型模型(如变压器和扩散模型)进行训练和推理。以下是它被选为基准测试的原因:
  • 顶级性能:H100 提供卓越的速度和功能,使其成为处理大型模型(如文本到图像和文本到视频生成管道)所需的复杂操作的理想选择。

  • 支持 FP16此 GPU 可高效处理 FP16(半精度浮点)中的计算,从而减少内存使用量并加快计算速度,而不会显著牺牲准确性。

  • 高级硬件功能:H100 支持针对混合精度训练和推理的优化操作,使其成为旨在减小模型大小同时保持性能的量化技术的绝佳选择。

在这里,我们使用的是 DigitalOcean 旗下 Paperspace 平台的 H100 云服务器。该平台GPU 服务器按秒计费,并提供在线 notebook 环境,一键部署人工智能相关工具、框架与库,并支持模型部署服务,可直接将训练后的模型部署为 API 供其他应用调用。同时,该平台除了提供 H100 以外,还提供 H100x8、A6000、A5000等多种型号的 GPU。

如果需要咨询更多其它型号的 GPU 价格,可访问 DigitalOcean 文档或 Paperspace 官网。如果需要了解 GPU 云服务细节,获取更多存 GPU 资源,中国地区用户可以扫码联系 DigitalOcean 中国区独家战略合作伙伴卓普云的销售团队和技术支持团队?

言归正传,在基准测试研究中,主要关注的是将新的量化工具 Quanto 应用于扩散模型。虽然量化在大型语言模型 (LLM) 的从业者中广为人知,但它在扩散模型中的使用并不多。Quanto 用于探索它是否可以在这些模型中节省内存,同时几乎不损失质量。

以下是研究内容:

环境设置:

  • CUDA 12.2:使用的 CUDA 版本,对于在 H100 GPU 上运行计算至关重要。

  • PyTorch 2.4.0:用于模型训练和推理的深度学习框架。

  • 扩散器:用于构建和运行扩散模型的库,从特定提交安装以确保一致性。

  • Quanto:量化工具,也从特定提交安装。

  • FP16 中的计算:默认情况下,所有计算均在 FP16 中执行,以减少内存使用量并提高速度。但是,VAE(变分自动编码器)未量化,以避免潜在的数值不稳定性。

  • 关注关键管道:在本研究中,从扩散器中选择了三个基于变压器的扩散管道。之所以选择这些管道,是因为它们代表了一些最先进的文本到图像生成模型,因此非常适合测试 Quanto 在保持模型质量的同时减少内存使用量的有效性。

  • PixArt-Sigma

  • 稳定扩散 3

  • Aura Flow


通过使用 H100 GPU 并专注于这些关键模型,该研究旨在展示 Quanto 在量化方面弥合 LLM 和扩散模型之间差距的潜力,从而显著节省内存,同时将对性能的影响降至最低。

模型检查点# 参数(十亿)
PixArthttps://huggingface.co/PixArt-alpha/PixArt-Sigma-XL-2-1024-MS0.611
Stable Diffusion 3https://huggingface.co/stabilityai/stable-diffusion-3-medium-diffusers2.028
Aura Flowhttps://huggingface.co/fal/AuraFlow/6.843


应用 Quanto 量化扩散管道

使用 Quanto 量化模型遵循一个简单的过程:
首先安装所需的软件包,这里我们安装 transformers、quanto、torch、sentencepiece。但请注意,您可能需要根据需要安装更多软件包。
!pip install transformers==4.35.0!pip install quanto==0.0.11!pip install torch==2.1.1!pip install sentencepiece==0.2.0!pip install optimum-quanto
在要量化的模块上调用 quantize() 函数,指定要量化的组件。在这种情况下,只有参数被量化,而激活保持不变。参数被量化为 FP8 数据类型。最后,调用 freeze() 函数用新量化的参数替换原始参数。
from optimum.quanto import freeze, qfloat8, quantizefrom diffusers import PixArtSigmaPipelineimport torch
pipeline = PixArtSigmaPipeline.from_pretrained("PixArt-alpha/PixArt-Sigma-XL-2-1024-MS", torch_dtype=torch.float16).to("cuda")
quantize(pipeline.transformer, weights=qfloat8)freeze(pipeline.transformer)

完成后,就使用管道。


image = pipeline("ghibli style, a fantasy landscape with castles").images[0]

图:使用 FP8 中的扩散变压器生成的图像


以下代码可用于量化文本编码器。

quantize(pipeline.text_encoder, weights=qfloat8)freeze(pipeline.text_encoder)


文本编码器同样是一个变换器模型,因此也可以进行量化。通过量化文本编码器和扩散主干,可以显著节省内存。

LLM 管道

?optimum-quanto 提供帮助类来量化、保存和重新加载 Hugging Face 量化模型。
以下代码将使用 Transformers 库加载预训练语言模型 (Meta-Llama-3-8B)。然后,它使用 Optimum Quanto 的 QuantizedModelForCausalLM 类对模型进行量化,具体来说就是将模型的权重转换为 qint4 数据类型。lm_head(输出层)被排除在量化之外,以保持其精度,从而确保最终输出质量保持较高水平。



from transformers import AutoModelForCausalLMfrom optimum.quanto import QuantizedModelForCausalLM, qint4model = AutoModelForCausalLM.from_pretrained('meta-llama/Meta-Llama-3-8B')qmodel = QuantizedModelForCausalLM.quantize(model, weights=qint4, exclude='lm_head')



# quantized model can be saved using save_pretrainedqmodel.save_pretrained('./Llama-3-8B-quantized')



# reload the model using from_pretrainedfrom optimum.quanto import QuantizedModelForCausalLMqmodel = QuantizedModelForCausalLM.from_pretrained('Llama-3-8B-quantized')

与 Transformers 的集成

Quanto 与 Hugging Face Transformers 库无缝集成。任何模型都可以通过 QuantoConfig 进行量化。



from transformers import AutoModelForCausalLM, AutoTokenizer, QuantoConfigmodel_id = "facebook/opt-125m"tokenizer = AutoTokenizer.from_pretrained(model_id)quantization_config = QuantoConfig(weights="int8")quantized_model = AutoModelForCausalLM.from_pretrained(model_id,quantization_config= quantization_config)

?使用 Quanto,无论使用 CPU/GPU/MPS(Apple Silicon),你都可以量化和运行你的模型。


from transformers import AutoModelForSpeechSeq2Seqmodel_id = "openai/whisper-large-v3"quanto_config = QuantoConfig(weights="int8")model = AutoModelForSpeechSeq2Seq.from_pretrained( model_id, torch_dtype=torch.float16, device_map="cuda", quantization_config=quanto_config)

Quanto 中的张量

  • Quanto 的作用:Quanto 使用特殊的张量(数据结构),对其进行修改以适应较小的数据类型,如 int8 或 float8。这使模型更节省内存,运行速度更快。

  • 转换过程:

  • 对于浮点数,它只使用 PyTorch 的内置转换。

  • 对于整数,它会对数字进行四舍五入以使其适合较小的数据类型。

  • 准确性:Quanto 试图通过避免过多的极端值(太大或太小)来保持转换的准确性,因为这些极端值可能会扭曲模型的性能。

  • 优化操作:使用这些较小的数据类型(较低位宽)可以使模型运行得更快,因为这些类型的操作更快。

Quanto 中的模块

  • 替换 Torch 模块:Quanto 可以将常规 PyTorch 组件替换为适用于这些较小张量的特殊 Quanto 版本。

  • 权重转换:当模型仍在微调时,权重(模型的可调参数)会动态转换,这可能会使速度稍微变慢。但是一旦模型最终确定(冻结),此转换就会停止。

  • 偏差:偏差(另一组模型参数)不会被转换,因为转换它们会降低准确性或需要非常高的精度,从而导致效率低下。

  • 激活:模型的激活(中间输出)也会转换为较小的数据类型,但只有在校准模型以找到最佳转换设置后才会转换。

可量化的模块

  • 线性层:这些是模型中的全连接层,其中权重始终量化,但偏差保持原样。

  • Conv2D 层:这些是图像处理中经常使用的卷积层。在这里,权重也始终量化,而偏差则不量化。

  • LayerNorm:这会对模型中的数据进行规范化。在 Quanto 中,输出可以量化,但权重和偏差保持原样。

这种设置允许模型变得更小、更快,同时仍保持良好的准确性。

研究的观察结果

量化扩散模型中的文本编码器(例如稳定扩散中使用的模型)会显著影响性能和内存效率。对于使用三个不同文本编码器的稳定扩散 3,与量化这些编码器相关的观察结果如下:

  1. 量化第二个文本编码器这种方法效果不佳,可能是由于第二个编码器的特定特性。

  2. 量化第一个文本编码器 (CLIPTextModelWithProjection):建议使用此选项,并且通常有效,因为第一个编码器的量化在内存节省和性能之间提供了良好的平衡。

  3. 量化第三个文本编码器 (T5EncoderModel):也建议使用此方法。量化第三个编码器可以节省大量内存,而不会显著影响模型的性能。

  4. 量化第一个和第三个文本编码器结合第一个和第三个文本编码器的量化可以成为最大化内存效率同时保持可接受性能水平的良好策略。

在内存节省方面,该表详细说明了通过应用每种量化策略可以节省多少内存,特别关注量化不同文本编码器组合之间的相对利益和权衡。

  • 在所有情况下量化扩散变换器可确保观察到的内存节省主要归因于文本编码器量化。

  • 当考虑强大的 GPU(例如 H100 或 4090)时,使用 bfloat16 会更快。

  • 由于高效的整数运算和硬件优化,qint8 通常推理速度更快。

  • 融合 QKV 投影会加厚 int8 内核,从而通过减少运算次数和利用高效的数据处理进一步优化计算。

  • 在 H100 GPU 上使用带有 bfloat16 的 qint4 时,内存使用率会有所提高,因为 qint4 每个值仅使用 4 位,从而减少了存储权重所需的内存量。但是,这是以增加推理延迟为代价的。这是因为 H100 GPU 仍然不支持使用 4 位整数(int4)的计算。尽管权重以压缩的 4 位格式存储,但实际计算仍以 bfloat16(16 位浮点格式)执行,这意味着硬件必须处理更复杂的操作,从而导致处理时间变慢。

结论

Quanto 为 PyTorch 提供了强大的量化后端,通过将权重转换为较低精度格式来优化模型性能。通过支持 qint8 和 qint4 等技术,Quanto 减少了内存消耗并加快了推理速度。此外,Quanto 可在不同设备(CPU、GPU、MPS)上工作,并与各种设置兼容。但是,在 MPS 设备上,使用 float8 会导致错误。

总体而言,Quanto 可以更有效地部署深度学习模型,在内存节省和性能权衡之间取得平衡。


    53AI,企业落地大模型首选服务商

    产品:场景落地咨询+大模型应用平台+行业解决方案

    承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

    联系我们

    售前咨询
    186 6662 7370
    预约演示
    185 8882 0121

    微信扫码

    添加专属顾问

    回到顶部

    加载中...

    扫码咨询

    扫码登录
    登录即表示您同意《53AI网站服务协议》
    服务协议

    欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。

    在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。

    一、 定义

    本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。

    会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。

    知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。

    二、 账号注册与登录

    登录方式:本网站支持以下登录方式,您可根据实际情况选择:

    微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。

    手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。

    账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。

    实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。

    未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。

    三、 服务内容与规范

    知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。

    服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。

    禁止行为:您在使用服务时不得实施以下行为:

    利用技术手段批量爬取、下载、转存知识库内容;

    将知识库内容用于商业目的或未经授权地向第三方传播;

    干扰本网站正常运行或侵犯其他用户合法权益;

    发布违法违规信息或从事违反公序良俗的活动。

    四、 知识产权声明

    权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。

    有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。

    侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。

    五、 个人信息保护

    我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。

    您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。

    您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。

    六、 免责声明

    内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。

    不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。

    第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。

    七、 违约责任

    如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。

    如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。

    八、 法律适用与争议解决

    本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。

    因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。

    九、 其他

    本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。

    本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。

    我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。


    已查阅