transformers - AWQ
本文翻译整理自:https://huggingface.co/docs/transformers/main/en/quantization/awq
文章目录
- 一、引言
- 二、加载 autoawq 量化的模型
- 三、Fused modules
- 支持的架构
- 不受支持的架构
- 四、ExLlamaV2
- 五、CPU
一、引言
Activation-aware Weight Quantization (AWQ) 激活感知权重量化 保留了对LLM性能很重要的一小部分权重,以将模型压缩到4位,同时性能下降最小。
有几个使用AWQ算法量化模型的库,如llm-awq、autoawq或 optimum-intel 。
transformers支持加载使用 llm-awq 和 autoawq 库量化的模型。
本指南将向您展示如何加载使用 autoawq 量化的模型,但过程与 llm-awq 量化模型相似。
资源:AWQ演示notebook
了解如何量化模型、将量化模型推送到集线器等的更多示例。
二、加载 autoawq 量化的模型
1、运行下面的命令安装autoawq
AutoAWQ将transformers降级到版本4.47.1。如果您想使用AutoAWQ进行推理,您可能需要在安装AutoAWQ后重新安装您的transformers版本。
pip install autoawq
pip install transformers==4.47.1
2、通过检查 模型的 config.json 文件中 quant_method键,标识 AWQ量化模型。
{"_name_or_path": "/workspace/process/huggingfaceh4_zephyr-7b-alpha/source","architectures": ["MistralForCausalLM"],........."quantization_config": {"quant_method": "awq","zero_point": true,"group_size": 128,"bits": 4,"version": "gemm"}
}
3、使用from_pretrained() 加载AWQ量化模型。
出于性能原因,这会自动将其他权重默认设置为fp16。
使用torch_dtype参数 以不同的格式 加载这些其他权重。
如果模型加载到CPU上,则使用device_map参数将其移动到GPU。
from transformers import AutoModelForCausalLM, AutoTokenizer
import torchmodel = AutoModelForCausalLM.from_pretrained("TheBloke/zephyr-7B-alpha-AWQ",torch_dtype=torch.float32,device_map="cuda:0"
)
4、使用attn_implementation启用FlashAtention2以进一步加速推理。
from transformers import AutoModelForCausalLM, AutoTokenizermodel = AutoModelForCausalLM.from_pretrained("TheBloke/zephyr-7B-alpha-AWQ",attn_implementation="flash_attention_2",device_map="cuda:0"
)
三、Fused modules
融合模块提高了准确性和性能。Llama和Mistral架构的AWQ模块开箱即用支持它们,但您也可以将AWQ模块融合到不受支持的架构中。
融合模块不能与 FlashAccention2 等其他优化技术结合使用。
支持的架构
创建一个AwqConfig并设置参数fuse_max_seq_len和do_fuse=True以启用融合模块。
fuse_max_seq_len参数是总序列长度,它应该包括上下文长度和预期的生成长度。将其设置为更大的值以确保安全。
下面的示例融合了TheBloke/Mistral-7B-OpenOrca-AWQ 模型的AWQ模块。
import torch
from transformers import AwqConfig, AutoModelForCausalLMquantization_config = AwqConfig(bits=4,fuse_max_seq_len=512,do_fuse=True,
)
model = AutoModelForCausalLM.from_pretrained("TheBloke/Mistral-7B-OpenOrca-AWQ",quantization_config=quantization_config
).to(0)
TheBloke/Mistral-7B-OpenOrca-AWQ 模型的基准测试为batch_size=1,有和没有融合模块。
未融合模块
| Batch Size | Prefill Length | Decode Length | Prefill tokens/s | Decode tokens/s | Memory (VRAM) |
|---|---|---|---|---|---|
| 1 | 32 | 32 | 60.0984 | 38.4537 | 4.50 GB (5.68%) |
| 1 | 64 | 64 | 1333.67 | 31.6604 | 4.50 GB (5.68%) |
| 1 | 128 | 128 | 2434.06 | 31.6272 | 4.50 GB (5.68%) |
| 1 | 256 | 256 | 3072.26 | 38.1731 | 4.50 GB (5.68%) |
| 1 | 512 | 512 | 3184.74 | 31.6819 | 4.59 GB (5.80%) |
| 1 | 1024 | 1024 | 3148.18 | 36.8031 | 4.81 GB (6.07%) |
| 1 | 2048 | 2048 | 2927.33 | 35.2676 | 5.73 GB (7.23%) |
融合模块
| Batch Size | Prefill Length | Decode Length | Prefill tokens/s | Decode tokens/s | Memory (VRAM) |
|---|---|---|---|---|---|
| 1 | 32 | 32 | 81.4899 | 80.2569 | 4.00 GB (5.05%) |
| 1 | 64 | 64 | 1756.1 | 106.26 | 4.00 GB (5.05%) |
| 1 | 128 | 128 | 2479.32 | 105.631 | 4.00 GB (5.06%) |
| 1 | 256 | 256 | 1813.6 | 85.7485 | 4.01 GB (5.06%) |
| 1 | 512 | 512 | 2848.9 | 97.701 | 4.11 GB (5.19%) |
| 1 | 1024 | 1024 | 3044.35 | 87.7323 | 4.41 GB (5.57%) |
| 1 | 2048 | 2048 | 2715.11 | 89.4709 | 5.57 GB (7.04%) |
融合和未融合模块的速度和吞吐量也用最佳基准库进行了测试。
前向峰值内存/批量大小

生成吞吐量/批量大小

不受支持的架构
对于不支持融合模块的体系结构,创建AwqConfig并在modules_to_fuse中定义自定义融合映射以确定需要融合哪些模块。
下面的示例融合了TheBloke/Yi-AWQ34B模型的AWQ模块。
import torch
from transformers import AwqConfig, AutoModelForCausalLMquantization_config = AwqConfig(bits=4,fuse_max_seq_len=512,modules_to_fuse={"attention": ["q_proj", "k_proj", "v_proj", "o_proj"],"layernorm": ["ln1", "ln2", "norm"],"mlp": ["gate_proj", "up_proj", "down_proj"],"use_alibi": False,"num_attention_heads": 56,"num_key_value_heads": 8,"hidden_size": 7168}
)model = AutoModelForCausalLM.from_pretrained("TheBloke/Yi-34B-AWQ",quantization_config=quantization_config
).to(0)
参数modules_to_fuse应包括以下键。
"attention":按以下顺序融合的关注层的名称:查询、键、值和输出投影层。如果不想融合这些层,传递一个空列表。"layernorm":要替换为自定义融合LayerNorm的所有LayerNorm层的名称。如果不想融合这些层,请传递一个空列表。"mlp":您要融合到单个MLP层中的MLP层的名称,顺序为:(门(密集、层、关注后)/上/下层)。"use_alibi":如果您的模型使用ALiBi位置嵌入。"num_attention_heads"”:关注头条号数量。"num_key_value_heads"":应用于实现分组查询关注(GQA)的键值头的数量。
| 参数值 | 注意力 |
|---|---|
num_key_value_heads=num_attention_heads | 多头注意力 |
num_key_value_heads=1 | 多查询注意力 |
num_key_value_heads=... | 分组查询注意力 |
"hidden_size":隐藏表示的维度。
四、ExLlamaV2
ExLlamaV2内核支持更快的预填充和解码。运行下面的命令来安装支持ExLlamaV2的最新版本的autoawq。
pip install git+https://github.com/casper-hansen/AutoAWQ.git
在AwqConfig中设置version="exllama"以启用ExLlamaV2内核。
AMD GPU支持ExLlamaV2。
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, AwqConfigquantization_config = AwqConfig(version="exllama")model = AutoModelForCausalLM.from_pretrained("TheBloke/Mistral-7B-Instruct-v0.1-AWQ",quantization_config=quantization_config,device_map="auto",
)
五、CPU
Intel Extension for PyTorch (IPEX) 旨在实现英特尔硬件的性能优化。运行下面的命令来安装支持IPEX的最新版本的autoawq。
pip install intel-extension-for-pytorch # for IPEX-GPU refer to https://intel.github.io/intel-extension-for-pytorch/xpu/2.5.10+xpu/
pip install git+https://github.com/casper-hansen/AutoAWQ.git
在version="ipex"中设置AwqConfig以启用 ExLlamaV2 内核。
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, AwqConfigdevice = "cpu" # set to "xpu" for Intel GPU
quantization_config = AwqConfig(version="ipex")model = AutoModelForCausalLM.from_pretrained("TheBloke/TinyLlama-1.1B-Chat-v0.3-AWQ",quantization_config=quantization_config,device_map=device,
)
2025-03-08(六)
相关文章:
transformers - AWQ
本文翻译整理自:https://huggingface.co/docs/transformers/main/en/quantization/awq 文章目录 一、引言二、加载 autoawq 量化的模型三、Fused modules支持的架构不受支持的架构 四、ExLlamaV2五、CPU 一、引言 Activation-aware Weight Quantization (AWQ) 激活…...
mysql下载与安装、关系数据库和表的创建
一、mysql下载: MySQL获取: 官网:www.mysql.com 也可以从Oracle官方进入:https://www.oracle.com/ 下载地址:https://downloads.mysql.com/archives/community/ 选择对应的版本和对应的操作系统ÿ…...
在华为设备上,VRRP与BFD结合使用可以快速检测链路故障并触发主备切换
在华为设备上,VRRP与BFD结合使用可以快速检测链路故障并触发主备切换。以下是VLAN接口下配置VRRP与BFD的步骤: 目录 1. 配置BFD会话 2. 配置VLAN接口 3. 配置VRRP 4. 验证配置 5. 保存配置 1. 配置BFD会话 在两台设备之间配置BFD会话,…...
RK3588开发笔记-fiq_debugger: cpu 0 not responding, reverting to cpu 3问题解决
目录 前言 一、FIQ Debugger介绍 二、rockchip平台配置方法 三、问题分析定位 IRQF_NOBALANCING 的含义 总结 前言 在进行 RK3588 开发的过程中,我们可能会遇到各种棘手的问题。其中,“fiq_debugger: cpu 0 not responding, reverting to cpu 3” 这个错误出现在RK3588的…...
新能源汽车充电综合解决方案:安科瑞电气助力绿色出行
安科瑞 华楠 18706163979 随着新能源汽车的迅猛发展,充电基础设施的建设成为了推动行业进步的关键。然而,充电技术滞后、运营效率低下、车桩比失衡等问题,依然困扰着广大车主和运营商。今天,我们要为大家介绍一款新能源汽车充电…...
大语言模型进化论:从达尔文到AI的启示与展望
文章大纲 引言大语言模型中的“进化论”思想体现遗传变异过度繁殖和生存斗争大模型“过度繁殖”与“生存竞争”机制解析**一、过度繁殖:技术迭代的指数级爆发****二、生存竞争:计算资源的达尔文战场****三、生存竞争胜出关键要素****四、行业竞争格局演化趋势**核心结论自然选…...
Spring Boot与Axon Framework整合教程
精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 简介 Axon Framework是一个用于构建CQRS(命令查询职责分离)和事件溯源(Event Sourcing)应用的框架࿰…...
深度学习Dropout
一、概念 Dropout是为了解决过拟合,当层数加深,就有可能过拟合,这个时候模型太复杂就会过拟合,那么可以让模型变得简单一点,所以就可以随机挑一些神经元,让某些神经元的输出是0,只保留部分神经…...
2025华为OD机试真题E卷 - 螺旋数字矩阵【Java】
题目描述 疫情期间,小明隔离在家,百无聊赖,在纸上写数字玩。他发明了一种写法:给出数字个数 n (0 < n ≤ 999)和行数 m(0 < m ≤ 999),从左上角的 1 开始,按照顺时针螺旋向内写方式,依次写出2,3,…,n,最终形成一个 m 行矩阵。小明对这个矩阵有些要求: 1、…...
DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)示例3: 行选择
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...
Linux驱动开发(1.基础创建)
序言:从高层逻辑到底层硬件的回归 在当今的软件开发中,我们习惯于用高级语言构建抽象层——通过框架、库和云服务快速实现功能。这种“软逻辑”的便利性让开发效率倍增,却也逐渐模糊了我们对计算机本质的认知:一切代码终将落地为…...
mmseg
系列文章目录 文章目录 系列文章目录bug bug File "/public/home/rsinfo/project/mmsegmentation/mmseg/__init__.py", line 61, in <module>assert (mmcv_min_version < mmcv_version < mmcv_max_version), \ AssertionError: MMCV2.2.0 is used but i…...
LangChain核心概念
下面整理的LangChain部分核心概念: 聊天模型【Chat models】:通过聊天 API 暴露的大语言模型(LLMs),将消息序列作为输入,并输出一条消息。消息【Messages】:聊天模型中的通信单元,…...
阿里巴巴全新推理模型QwQ-32B:性能比肩DeepSeek-R1,开源引领未来
摘要 阿里巴巴集团于深夜正式发布全新推理模型QwQ-32B,其性能与DeepSeek-R1完整版相当。该模型已通过Apache 2.0开源协议在Hugging Face和ModelScope平台发布。用户可通过Qwen Chat平台直接体验QwQ-32B的强大功能。这一举措不仅展示了阿里巴巴在人工智能领域的技术实…...
使用Arduino和ESP8266进行基于物联网的垃圾箱监控
使用 Arduino 和 ESP8266 的基于 IOT 的垃圾箱监控系统 在这个 DIY 中,我们将制作一个基于 IOT 的垃圾箱/垃圾监控系统,该系统将通过网络服务器告诉我们垃圾桶是空的还是满的,并且您可以通过互联网从世界任何地方了解“垃圾桶”或“垃圾箱”的状态。它将非常有用,可以安装…...
【Python爬虫】爬取公共交通路网数据
程序来自于Github,以下这篇博客作为完整的学习记录,也callback上一篇爬取公共交通站点的博文。 Bardbo/get_bus_lines_and_stations_data_from_gaode: 这个项目是基于高德开放平台和公交网获取公交线路及站点数据,并生成shp文件,…...
基于Matlab的人脸识别的二维PCA
一、基本原理 传统 PCA 在处理图像数据时,需将二维图像矩阵拉伸为一维向量,这使得数据维度剧增,引发高计算成本与存储压力。与之不同,2DPCA 直接基于二维图像矩阵展开运算。 它着眼于图像矩阵的列向量,构建协方差矩阵…...
SSM架构 +Nginx+FFmpeg实现rtsp流转hls流,在前端html上实现视频播放
序言: 本文介绍通过SSM架构 NginxFFmpeg实现rtsp流转hls流,在前端html上实现视频播放功能。此方法可用于网络摄像头RTSP视频流WEB端实时播放。(海康和大华都可以),我使用的是海康 步骤一:安装软件 FFmpeg…...
【实战ES】实战 Elasticsearch:快速上手与深度实践-3.2.3 案例:新闻搜索引擎的相关性优化
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 Elasticsearch新闻搜索引擎相关性优化实战3.2.3 案例:新闻搜索引擎的相关性优化项目背景1. 相关性问题诊断与分析1.1 初始查询DSL示例1.2 问题诊断矩阵1.3 性能基…...
SQL经典查询
查询不在表里的数据,一张学生表,一张学生的选课表,要求查出没有选课的学生? select students.student_name from students left join course_selection on students.student_idcourse_selection.student_id where course_selecti…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
MySQL:分区的基本使用
目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...
通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...
