AI新工具
banner

SpinQuant


介绍:

SpinQuant是一种通过学习旋转矩阵优化量化的LLM方法,有效提升精度表现。









SpinQuant

SpinQuant 简介

SpinQuant 是一个通过学习旋转矩阵来优化大规模语言模型(LLM)量化的工具。该工具具有以下主要发现和贡献:

  1. 旋转去除离群值:旋转是去除LLM中的离群值并辅助量化的有效手段。
  2. 非随机旋转:并非所有旋转都同样有效,随机旋转在量化模型中会产生很大的方差。
  3. Cayley优化学习旋转:使用Cayley优化方法学习旋转极大地提升了最终的模型性能。

通过这些贡献,SpinQuant显著缩小了LLaMA-2 7B模型在零样本推理任务中W4A4KV4量化和全精度之间的精度差距,仅为2.9个点,相比之下,比LLM-QAT(量化训练的LLM)高出19.1个点,比SmoothQuant高出25.0个点。

使用场景

SpinQuant主要用于以下场景:

  1. 大规模语言模型的低位量化:例如LLaMA-2 7B/13B、LLaMA-3 8B/70B等模型。
  2. 去除模型中的离群值:通过优化旋转矩阵减少离群值对量化精度的影响。
  3. 提高量化模型的推理精度:尤其在资源受限的硬件环境下,通过低位量化减少计算和存储开销。
运行步骤
  1. 环境配置

    • 安装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 .
      
  2. 运行步骤

    • 优化旋转矩阵
      • 针对LLaMA-2 7B/13B和LLaMA-3 8B模型:
        bash 10_optimize_rotation.sh $model_name $w_bit $a_bit $kv_bit
        
        例如:对Llama-2-7b模型进行4位权重、4位激活、4位kv缓存的量化:
        bash 10_optimize_rotation.sh meta-llama/Llama-2-7b 4 4 4
        
      • 针对LLaMA-2 70B和LLaMA-3 70B模型:
        bash 11_optimize_rotation_fsdp.sh $model_name $w_bit $a_bit $kv_bit
        
        例如:对Llama-2-70b模型进行4位权重、4位激活、4位kv缓存的量化:
        bash 11_optimize_rotation_fsdp.sh meta-llama/Llama-2-70b 4 4 4
        
    • 运行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的高效量化和评估,有效提升模型在低位量化下的精度表现。

可关注我们的公众号:每天AI新工具

广告:私人定制视频文本提取,字幕翻译制作等,欢迎联系QQ:1752338621