Skip to main content
Optimum Intel 是 🤗 Transformers 和 Diffusers 库与 Intel 提供的各种工具和库之间的接口,用于在 Intel 架构上加速端到端管道。
Intel® Extension for Transformers(ITREX)是一个创新工具包,旨在通过在 Intel Gaudi2、Intel CPU 和 Intel GPU 等各种 Intel 平台上优化基于 Transformer 的模型性能,在任何地方加速 GenAI/LLM。
本页介绍如何在 LangChain 中使用 optimum-intel 和 ITREX。

Optimum-intel

optimum-intelIPEX 相关的所有功能。

安装

使用以下命令安装 optimum-intel 和 ipex:
pip install "optimum[neural-compressor]"
pip install intel_extension_for_pytorch
请按照以下说明安装:
  • 按照此处所示安装 optimum-intel。
  • 按照此处所示安装 IPEX。

嵌入模型

查看使用示例。 我们还提供完整的教程 notebook rag_with_quantized_embeddings.ipynb,用于在 RAG 管道中使用嵌入器。
from langchain_community.embeddings import QuantizedBiEncoderEmbeddings

Intel® Extension for Transformers(ITREX)

(ITREX)是一个创新工具包,用于在 Intel 平台上加速基于 Transformer 的模型,特别是在第 4 代 Intel Xeon 可扩展处理器 Sapphire Rapids(代号 Sapphire Rapids)上效果显著。 量化是一个通过用较少位数表示权重来降低这些权重精度的过程。仅权重量化专门对神经网络的权重进行量化,而保持其他组件(如激活值)的原始精度。 随着大型语言模型(LLM)越来越普遍,对于能够在保持精度的同时满足这些现代架构计算需求的新型改进量化方法的需求日益增长。与 W8A8 等普通量化相比,仅权重量化可能是平衡性能和精度的更好权衡,因为我们将在下文中看到,部署 LLM 的瓶颈是内存带宽,而仅权重量化通常可以带来更好的精度。 这里,我们将介绍使用 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 参数详情

以下是 WeightOnlyQuantConfig 类的参数详情。

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

我们支持将权重量化为以下数据类型进行存储(WeightOnlyQuantConfig 中的 weight_dtype):
  • 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(模块名称列表):要跳过量化的模块,默认为无。

这是要跳过量化的模块列表。

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

目前只支持 “fp32”(float32)。

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

use_double_quant(布尔值):是否对缩放进行量化,默认为 false。

尚不支持。

double_quant_dtype(字符串):为双重量化保留。

double_quant_scale_dtype(字符串):为双重量化保留。

group_size(整数):量化时的组大小。

scheme(字符串):权重量化到哪种格式。默认为 “sym”。

  • sym:对称。
  • asym:非对称。

algorithm(字符串):用于提高精度的算法。默认为 “RTN”

  • RTN:舍入到最近值(RTN)是一种我们直观理解的量化方法。
  • AWQ:仅保护 1% 的显著权重可以大大减少量化误差。显著权重通道通过观察每个通道的激活和权重分布来选择。显著权重在量化前也通过乘以一个大比例因子来进行量化,以保持精度。
  • TEQ:一种可训练的等效变换,在仅权重量化中保持 FP32 精度。