Skip to main content
在 GitHub 上打开

Intel

Optimum Intel 是 Transformers 和 Diffusers 库与 Intel 提供的不同工具和库之间的🤗接口,用于加速 Intel 架构上的端到端管道。

Intel® Extension for Transformers (ITREX) 是一个创新的工具包,旨在通过在各种 Intel 平台(包括 Intel Gaudi2、Intel CPU 和 Intel GPU)上实现基于 Transformer 的模型的最佳性能,随时随地加速 GenAI/LLM。

本页介绍了如何将 optimum-intel 和 ITREX 与 LangChain 一起使用。

Optimum-intel

optimum-intelIPEX 相关的所有功能。

安装

使用 optimum-intel 和 ipex 进行安装:

pip install optimum[neural-compressor]
pip install intel_extension_for_pytorch

请按照以下指定的安装说明进行作:

嵌入模型

请参阅使用示例。 我们还在 cookbook 目录中提供了一个完整的教程笔记本 “rag_with_quantized_embeddings.ipynb”,用于在 RAG 管道中使用嵌入器。

from langchain_community.embeddings import QuantizedBiEncoderEmbeddings

Intel® 变压器扩展 (ITREX)

(ITREX) 是一种创新工具包,可在 Intel 平台上加速基于 Transformer 的模型,特别是在第 4 代 Intel Xeon 可扩展处理器 Sapphire Rapids(代号 Sapphire Rapids)上有效。

量化是一个过程,涉及通过使用较少的位数来表示这些权重来降低这些权重的精度。仅权重量化特别侧重于量化神经网络的权重,同时保持其他组件(例如激活)的原始精度。

随着大型语言模型 (LLM) 变得越来越普遍,对新的和改进的量化方法的需求越来越大,这些方法既能满足这些现代架构的计算需求,又能保持准确性。与 W8A8 等普通量化相比,仅权重量化可能是平衡性能和精度的更好权衡,因为我们将在下面看到部署 LLM 的瓶颈是内存带宽,通常仅权重量化可以带来更好的精度。

在这里,我们将介绍使用 ITREX 为 Transformers 大型语言模型引入嵌入模型和仅权重量化。仅权重量化是深度学习中使用的一种技术,用于降低神经网络的内存和计算要求。在深度神经网络的上下文中,模型参数(也称为权重)通常使用浮点数表示,浮点数可能会消耗大量内存并需要大量计算资源。

intel-extension-for-transformers 相关的所有功能。

安装

安装 intel-extension-for-transformers。有关系统要求和其他安装提示,请参阅安装指南

pip install intel-extension-for-transformers

安装其他所需的软件包。

pip install -U torch onnx accelerate datasets

嵌入模型

请参阅使用示例

from langchain_community.embeddings import QuantizedBgeEmbeddings

使用 ITREX 进行仅重量量化

请参阅使用示例

配置参数详情

以下是WeightOnlyQuantConfig类。

weight_dtype (string):权重数据类型,默认为 “nf4”。

我们支持将权重量化为以下数据类型,以便在 WeightOnlyQuantConfig 中存储 (weight_dtype):

  • int8:使用 8 位数据类型。
  • int4_fullrange:使用 int4 范围的 -8 值,而不是正常的 int4 范围 [-7,7]。
  • int4_clip:剪辑并保留 int4 范围内的值,将其他值设置为零。
  • nf4:使用标准化浮点型 4 位数据类型。
  • fp4_e2m1:使用常规浮点型 4 位数据类型。“e2” 表示 2 位用于指数,“m1” 表示 1 位用于尾数。

compute_dtype (string):计算数据类型,默认为 “fp32”。

虽然这些技术以 4 位或 8 位存储权重,但计算仍然发生在 weightOnlyQuantConfig 中的 float32、bfloat16 或 int8(compute_dtype 中):

  • fp32:使用 float32 数据类型进行计算。
  • bf16:使用 bfloat16 数据类型进行计算。
  • int8:使用 8 bit 数据类型进行计算。

llm_int8_skip_modules (模块名称列表):跳过量化的模块,默认为 None。

它是一个要跳过量化的模块列表。

scale_dtype (string):Scale 数据类型,默认值为 “fp32”。

现在仅支持 “fp32”(float32)。

mse_range(布尔值):是否从范围 [0.805, 1.0, 0.005] 中搜索最佳剪辑范围,默认为 False。

use_double_quant (boolean):是否量化 Scale,默认为 False。

尚不支持。

double_quant_dtype (string):保留用于 Double Quantization。

double_quant_scale_dtype (string):保留用于 Double Quantization。

group_size (int):验证时的组大小。

scheme (string):将权重量化为哪种格式。默认值为 “sym”。

  • sym:对称。
  • asym:不对称。

algorithm (string):提高准确率的算法。默认值为 “RTN”

  • RTN:四舍五入到最接近 (RTN) 是一种我们可以非常直观地想到的量化方法。
  • AWQ:仅保护 1% 的突出权重可以大大减少量化误差。通过观察每个通道的 Activation 和 Weight 的分布来选择 Ssignificant Weight 通道。在量化之前,在量化之前,也会对显著权重进行量化,以便保留。.
  • TEQ:一种可训练的等效变换,在仅权重量化中保持 FP32 精度。