跳到主要内容
Open on GitHub

Intel

Optimum Intel 是 🤗 Transformers 和 Diffusers 库与英特尔提供的不同工具和库之间的接口,旨在加速英特尔架构上的端到端流水线。

Intel® Extension for Transformers (ITREX) 是一款创新工具包,旨在通过 Transformer 模型在各种英特尔平台(包括 Intel Gaudi2、英特尔 CPU 和 英特尔 GPU)上的最佳性能,加速各处的 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。

嵌入模型

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

from langchain_community.embeddings import QuantizedBiEncoderEmbeddings

Intel® Extension for Transformers (ITREX)

(ITREX) 是一款创新工具包,旨在加速英特尔平台上的 Transformer 模型,尤其是在第四代英特尔至强可扩展处理器 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 (字符串): 权重数据类型,默认为 "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 (模块名称列表):要跳过量化的模块,默认为 None。

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

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 (整数):Auantization 时的组大小。

scheme (字符串):权重量化成的格式。默认为 "sym"。

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

algorithm (字符串):提高准确性的算法。默认为 "RTN"

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

此页是否对您有帮助?