Huggingface 与 bitsandbytes 合作集成 AutoGPTQ 库到 Transformers
Huggingface 与 bitsandbytes 合作,将 AutoGPTQ[1] 库集成到了 Transformers 中。这一整合使用户能够以低至 8、4、3 或甚至 2 位的精度级别量化和操作模型,采用了 Frantar 等人在 2023 年[2] 引入的 GPTQ 算法。值得注意的是,使用 4 位量化几乎不会损失精度,同时在处理小批量数据时仍能保持与 fp16 基准相似的推理速度。值得一提的是,GPTQ 方法与 bitsandbytes 提出的训练后量化技术略有不同,因为它需要使用校准数据集。
GPTQ 是什么?
GPTQ 是一种神经网络压缩技术,使得生成预训练变换器(Generative Pretrained Transformers)[3]的高效部署成为可能。
大多数大型语言模型(LLMs)拥有数十亿甚至数百亿的参数。运行这些模型需要数百 GB 的存储空间和多 GPU 服务器,成本可能非常高。
目前有两个主要的研究方向旨在降低 GPTs
的推理成本:
•一种是训练更高效、更小的模型。•第二种方法是训练后使现有模型变小。
第二种方法的优势在于不需要重新训练,重新训练对于 LLMs 来说既昂贵又耗时。GPTQ 属于第二类。
GPTQ 如何工作?
GPTQ 是一种逐层量化算法。GPTQ 逐一量化 LLM 的权重。GPTQ 将每个权重矩阵的浮点参数转换为量化整数,以最小化输出处的误差。量化还需要少量数据用于校准,这在消费级 GPU 上可能需要超过一个小时。
量化后,模型可以在更小的 GPU 上运行。例如,原始的 Llama 2 7B 在 12 GB VRAM(大约是免费 Google Colab 实例上的量)上无法运行,但量化后可以轻松运行。不仅能运行,而且还会留下大量未使用的 VRAM,允许使用更大批量进行推理。
逐层量化
逐层量化旨在找到最小化输出误差的量化值。
在查看上述公式时需要注意以下几点:
•该公式要求了解输入的统计特性。GPTQ 是一种一次性量化,而不是零次量化,因为它依赖于输入特征的分布。•它假设在运行算法之前设置了量化步骤。
实现所需的包
LLM:Zephyr 7B Alpha:
Zephyr 是一系列旨在作为有用助手的语言模型。Zephyr-7B-α 是该系列中的第一个模型,它是 mistralai/Mistral-7B-v0.1[4] 的微调版本,使用 直接偏好优化(DPO)[5] 在公开可用的合成数据集上进行了训练。我们发现去除这些数据集的内置对齐提高了在 MT Bench[6] 上的性能,并使模型更有帮助。
模型描述:
•模型类型:在公开可用的合成数据集上微调的 7B 参数 GPT 类型模型。•语言(NLP):主要是英语•许可证:MIT•微调自模型:mistralai/Mistral-7B-v0.1[7]
TRL 库:
trl 是一个全栈库,提供了一套工具来使用强化学习训练变换器语言模型和稳定扩散模型,从监督微调(SFT)、奖励建模(RM)到近似策略优化(PPO)步骤。该库建立在