SpinQuant
SpinQuant 简介
SpinQuant 是一个通过学习旋转矩阵来优化大规模语言模型(LLM)量化的工具。该工具具有以下主要发现和贡献:
- 旋转去除离群值:旋转是去除LLM中的离群值并辅助量化的有效手段。
- 非随机旋转:并非所有旋转都同样有效,随机旋转在量化模型中会产生很大的方差。
- Cayley优化学习旋转:使用Cayley优化方法学习旋转极大地提升了最终的模型性能。
通过这些贡献,SpinQuant显著缩小了LLaMA-2 7B模型在零样本推理任务中W4A4KV4量化和全精度之间的精度差距,仅为2.9个点,相比之下,比LLM-QAT(量化训练的LLM)高出19.1个点,比SmoothQuant高出25.0个点。
使用场景
SpinQuant主要用于以下场景:
- 大规模语言模型的低位量化:例如LLaMA-2 7B/13B、LLaMA-3 8B/70B等模型。
- 去除模型中的离群值:通过优化旋转矩阵减少离群值对量化精度的影响。
- 提高量化模型的推理精度:尤其在资源受限的硬件环境下,通过低位量化减少计算和存储开销。
运行步骤
-
环境配置:
- 安装Python 3.9和PyTorch>=2.0。
- 安装必要的Python包:
pip install -r requirement.txt
。 - 克隆并安装Fast Hadamard Transform库:
git clone https://github.com/Dao-AILab/fast-hadamard-transform.git cd fast-hadamard-transform pip install .
-
运行步骤:
- 优化旋转矩阵:
- 针对LLaMA-2 7B/13B和LLaMA-3 8B模型:
例如:对Llama-2-7b模型进行4位权重、4位激活、4位kv缓存的量化:
bash 10_optimize_rotation.sh $model_name $w_bit $a_bit $kv_bit
bash 10_optimize_rotation.sh meta-llama/Llama-2-7b 4 4 4
- 针对LLaMA-2 70B和LLaMA-3 70B模型:
例如:对Llama-2-70b模型进行4位权重、4位激活、4位kv缓存的量化:
bash 11_optimize_rotation_fsdp.sh $model_name $w_bit $a_bit $kv_bit
bash 11_optimize_rotation_fsdp.sh meta-llama/Llama-2-70b 4 4 4
- 针对LLaMA-2 7B/13B和LLaMA-3 8B模型:
- 运行PTQ评估:
bash 2_eval_ptq.sh $model_name $w_bit $a_bit $kv_bit
- 优化旋转矩阵:
参数说明
input_model
:模型名称或权重路径。output_rotation_path
:保存优化旋转矩阵的本地路径。per_device_train_batch_size
:旋转优化训练的批次大小。per_device_eval_batch_size
:PPL评估的批次大小。a_bits
:激活量化的位数。w_bits
:权重量化的位数。v_bits
:值量化的位数。k_bits
:键量化的位数。w_clip
:是否使用网格搜索来找到最佳的权重截断范围。w_rtn
:是否使用最近舍入量化,如果没有这个参数则使用GPTQ量化。rotate
:是否对模型进行旋转。optimized_rotation_path
:优化旋转矩阵的检查点路径,如果未提供路径则使用随机旋转。
通过这些步骤和参数配置,可以实现对LLM的高效量化和评估,有效提升模型在低位量化下的精度表现。
广告:私人定制视频文本提取,字幕翻译制作等,欢迎联系QQ:1752338621