Skip to main content
Open on GitHub

Intel

Optimum Intel is the interface between the 🤗 Transformers and Diffusers libraries and the different tools and libraries provided by Intel to accelerate end-to-end pipelines on Intel architectures.

Intel® Extension for Transformers (ITREX) is an innovative toolkit designed to accelerate GenAI/LLM everywhere with the optimal performance of Transformer-based models on various Intel platforms, including Intel Gaudi2, Intel CPU, and Intel GPU.

本页面介绍如何将 Optimum-Intel 和 ITREX 与 LangChain 一起使用。

Optimum-intel

optimum-intelIPEX 相关的所有功能。

安装

使用 optimum-intel 和 ipex 安装:

pip install optimum[neural-compressor]
pip install intel_extension_for_pytorch

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

  • 此处 所示安装 optimum-intel。
  • 按照说明安装 IPEX,详情请见 此处

嵌入模型

查看一个 使用示例。 我们还提供了一个完整的教程笔记本 "rag_with_quantized_embeddings.ipynb",用于在示例目录中将嵌入器用于RAG管道。

from langchain_community.embeddings import QuantizedBiEncoderEmbeddings

Intel® 转换器扩展(ITREX)

(ITREX) 是一个创新的工具包,用于加速基于 Transformer 的模型在英特尔平台上的运行,特别是在第四代英特尔至强可扩展处理器 Sapphire Rapids(代号 Sapphire Rapids)上表现尤为出色。

量化是一种通过使用更少的位数来表示权重,从而降低这些权重精度的过程。仅权重量化(Weight-only quantization)特别关注对神经网络的权重进行量化,同时保持其他组件(如激活值)的原始精度不变。

随着大型语言模型(LLMs)的日益普及,人们越来越需要新的、改进的量化方法,以满足这些现代架构的计算需求,同时保持准确性。与普通量化(如W8A8)相比,仅对权重进行量化可能是一个更好的权衡,可以在性能和准确性之间取得更好的平衡,因为下面我们会看到,部署LLMs的瓶颈在于内存带宽,而通常仅对权重进行量化可以带来更好的准确性。

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

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"。

我们支持将权重量化为以下数据类型以进行存储(weight_dtype in WeightOnlyQuantConfig):

  • int8: 使用 8 位数据类型。
  • int4_fullrange: 与正常的 int4 范围 [-7,7] 相比,使用了 int4 范围中的 -8 值。
  • int4_clip: 将值限制在 int4 范围内,超出范围的值设为零。
  • nf4: 使用归一化的浮点4位数据类型。
  • fp4_e2m1:使用常规的浮点4位数据类型。“e2”表示使用2位表示指数,“m1”表示使用1位表示尾数。

compute_dtype (字符串): 计算数据类型,默认为 "fp32"。

虽然这些技术将权重存储为4位或8位,但计算仍然在float32、bfloat16或int8(WeightOnlyQuantConfig中的compute_dtype)下进行。

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

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

这是一个要跳过量化处理的模块列表。

scale_dtype (字符串): 缩放数据类型,默认为 "fp32"。

现在仅支持 "fp32"(float32)。

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

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

暂不支持。

double_quant_dtype (string): 用于双量化预留。

double_quant_scale_dtype (string): 用于双量化预留。

group_size (int): 量化时的分组大小。

scheme (string): 指定权重量化格式。默认值为 "sym"。

  • 对称: 对称的。
  • asym: 非对称的。

算法(字符串):用于提高准确性的算法。默认值为“RTN”

  • RTN: 四舍五入到最接近的值(RTN)是一种我们可以非常直观理解的量化方法。
  • AWQ:仅保护1%的重要权重即可显著降低量化误差。重要权重通道通过观察每通道的激活和权重分布来选择。这些重要权重在量化前会乘以一个较大的缩放因子,以保留其特性。
  • TEQ: 一种可训练的等效变换,在仅量化权重的情况下保持FP32精度。