[ PROMPT_NODE_22796 ]
Optimization Awq 高级用法
[ SKILL_DOCUMENTATION ]
# AWQ 高级用法指南
## 量化算法细节
### AWQ 的工作原理
AWQ (激活感知权重量化) 基于一个核心洞察:大语言模型中的权重并非同等重要。该算法:
1. **识别显著权重** (~1%):通过检查激活分布
2. **应用数学缩放**:保护关键通道
3. **量化剩余权重**:以 4-bit 量化并保持最小误差
**核心公式**:`L(s) = ||Q(W * s)(s^-1 * X) - W * X||`
其中:
- `Q` 是量化函数
- `W` 是权重矩阵
- `s` 是缩放因子
- `X` 是输入激活
### 为什么 AWQ 优于 GPTQ
| 方面 | AWQ | GPTQ |
|--------|-----|------|
| 校准方法 | 激活感知缩放 | 基于 Hessian 的重构 |
| 过拟合风险 | 低(无反向传播) | 较高(基于重构) |
| 校准数据 | 128-1024 tokens | 需要更大的数据集 |
| 泛化能力 | 跨领域表现更好 | 可能对校准集过拟合 |
## WQLinear 内核变体
AutoAWQ 为不同用例提供了多种内核实现:
### WQLinear_GEMM
- **用例**:批处理推理、训练
- **最佳场景**:Batch size > 1,吞吐量优化
- **实现**:通用矩阵乘法
python
quant_config = {"version": "GEMM"}
### WQLinear_GEMV
- **用例**:单 token 生成
- **最佳场景**:流式传输、聊天应用
- **加速比**:对于 batch_size=1,比 GEMM 快约 20%
- **限制**:仅适用于 batch_size=1
python
quant_config = {"version": "GEMV"}
### WQLinear_GEMVFast
- **用例**:优化的单 token 生成
- **要求**:安装了 awq_v2_ext 内核
- **最佳场景**:极致的单 token 速度
python
# 需要安装 autoawq[kernels]
quant_config = {"version": "gemv_fast"}
### WQLinear_Marlin
- **用例**:高吞吐量推理
- **要求**:Ampere 及以上 GPU(计算能力 8.0+)
- **加速比**:在 A100/H100 上快 2 倍
python
from transformers import AwqConfig
config = AwqConfig(bits=4, version="marlin")
### WQLinear_Exllama / ExllamaV2
- **用例**:AMD GPU 兼容性,更快的预填充(prefill)
- **优势**:支持 ROCm
python
config = AwqConfig(bits=4, version="exllama")
### WQLinear_IPEX
- **用例**:Intel CPU/XPU 加速
- **要求**:Intel Extension for PyTorch, torch 2.4+
python
pip install autoawq[cpu]
## 分组大小配置
分组大小决定了权重如何分组