当前位置: 首页 > backend >正文

模型量化与保存

模型量化‌是将神经网络中的浮点计算(如32位/16位)转换为低比特定点计算(如8位整型)的技术,通过减少数值精度来压缩模型体积并加速计算。其本质是一种针对模型参数的‌有损信息压缩‌,在保证模型性能的前提下优化部署效率。

一、模型量化‌的目标

  • 压缩模型体积‌
    将浮点权重转换为低位宽整数存储,模型体积可减少至原大小的1/4。
  • 加速推理计算‌
    硬件对低位宽计算(如INT8)的支持效率通常比FP32快2-4倍

二、transfomers 进行模型量化‌与保存

  • 前提环境
pip install --upgrade transformers accelerate bitsandbytes
1、4bit
  • 4 位量化模型可将内存使用量减少 4 倍,对于大型模型,设置“device_map=“auto””可有效地在所有可用 GPU 上分配权重。
from transformers import AutoModelForCausalLM, BitsAndBytesConfig#配置量化参数
quantization_config = BitsAndBytesConfig(load_in_4bit=True)model_4bit = AutoModelForCausalLM.from_pretrained("bigscience/bloom-1b7",device_map="auto",quantization_config=quantization_config
)
2、8bit
  • 8 位量化模型可将内存使用量减半,对于大型模型,设置“device_map=“auto””以有效地将权重分配到所有可用的 GPU 上。
from transformers import AutoModelForCausalLM, BitsAndBytesConfigquantization_config = BitsAndBytesConfig(load_in_8bit=True)model_8bit = AutoModelForCausalLM.from_pretrained("bigscience/bloom-1b7", device_map="auto",quantization_config=quantization_config
)
3、量化模型保存与加载
  • 保存
# 保存量化模型
model.save_pretrained("./quant_llama2")
tokenizer.save_pretrained("./quant_llama2")
  • 加载
from transformers import AutoModelForCausalLM, AutoTokenizermodel = AutoModelForCausalLM.from_pretrained("本地模型路径", device_map="auto")
4、模型反(去除)量化
  • 量化后,您可以通过反量化(dequantize())将模型恢复到原始精度,但这可能会导致一些质量损失。请确保您拥有足够的 GPU 内存来容纳反量化后的模型。
from transformers import AutoModelForCausalLM, BitsAndBytesConfig, AutoTokenizermodel = AutoModelForCausalLM.from_pretrained("facebook/opt-125m", BitsAndBytesConfig(load_in_4bit=True))
model.dequantize()

三、torch 进行模型量化‌与保存

import torch.quantization# 动态量化示例
model = torch.nn.Linear(100, 50)
quantized_model = torch.quantization.quantize_dynamic(model,{torch.nn.Linear},  # 指定量化层dtype=torch.qint8
)# 保存量化模型
torch.save(quantized_model.state_dict(), "dynamic_quant.pth")[1,14](@ref)
http://www.xdnf.cn/news/7969.html

相关文章:

  • Python实例题:Python实现简单画板
  • 网络安全之身份验证绕过漏洞
  • 【AI+开发】什么是LLM、MCP和Agent?
  • 容器网络中的 veth pair 技术详解
  • 求无符号字符型数据乘积的高一半
  • 隧道自动化监测解决方案
  • 【攻防实战】MacOS系统上线Cobalt Strike
  • 高并发内存池|六、page cache的设计
  • 13、自动配置【源码分析】-自动包规则原理
  • Springboot2
  • Qt enabled + geometry 属性(2)
  • 微信小游戏流量主广告自动化浏览功能案例5
  • 【IP101】图像质量评价体系:从主观评价到客观度量的完整解析
  • RL电路的响应
  • Spring AI 1.0 GA 于 2025 年 5 月 20 日正式发布,都有哪些特性?
  • 防火墙高可靠性
  • AI预测3D新模型百十个定位预测+胆码预测+去和尾2025年5月21日第84弹
  • nlohmann json:检查类型并取出数据
  • 【八股战神篇】Spring高频面试题汇总
  • 企业数字化转型是否已由信息化+自动化向智能化迈进?
  • YCKC【二分答案专题】题解
  • 关于C++使用位运算交换变量值的分析
  • Vue学习记录
  • docker面试题(5)
  • LeetCode 1004. 最大连续1的个数 III
  • PH热榜 | 2025-05-21
  • 影刀Fun叉鸟-打刀刀
  • PyTorch的基本操作
  • 5月21日星期三今日早报简报微语报早读
  • 架构的设计