Skip to main content

英特尔

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

英特尔® Transformers 扩展 (ITREX) 是一个创新工具包,旨在在各种英特尔平台上以最佳性能加速 GenAI/LLM,包括英特尔 Gaudi2、英特尔 CPU 和英特尔 GPU。

本页面介绍如何在 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。

嵌入模型

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

from langchain_community.embeddings import QuantizedBiEncoderEmbeddings

英特尔® Transformers 扩展 (ITREX)

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

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

随着大型语言模型 (LLMs) 的普及,对新型和改进的量化方法的需求日益增长,这些方法能够满足这些现代架构的计算需求,同时保持准确性。与 普通量化(如 W8A8)相比,仅权重量化可能是平衡性能和准确性的更好折衷,因为我们将看到,部署 LLM 的瓶颈是内存带宽,而通常仅权重量化可以带来更好的准确性。

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

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 范围的 -8 值,与正常 int4 范围 [-7,7] 相比。
  • 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 (整数): 量化时的组大小。

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

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

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

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

Was this page helpful?


You can also leave detailed feedback on GitHub.

扫我,入群扫我,找书