英特尔
Optimum Intel 是 🤗 Transformers 和 Diffusers 库与英特尔提供的不同工具和库之间的接口,用于加速英特尔架构上的端到端管道。
Intel® Extension for Transformers (ITREX) 是一个创新工具包,旨在通过在各种英特尔平台(包括 Intel Gaudi2、Intel CPU 和 Intel GPU)上实现基于 Transformer 模型的最佳性能,加速 GenAI/LLM 的普及。
本页介绍如何在 LangChain 中使用 optimum-intel 和 ITREX。
Optimum-intel
所有与 optimum-intel 和 IPEX 相关的功能。
安装
使用 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® Extension for Transformers (ITREX)
(ITREX) 是一个创新工具包,用于加速英特尔平台上的 Transformer 模型,特别是对第四代 Intel Xeon Scalable 处理器 Sapphire Rapids(代号 Sapphire Rapids)有效。
量化是一个通过使用更少位数表示权重来降低其精度的过程。仅权重(Weight-only)量化特指对神经网络的权重进行量化,同时保持激活等其他组件的原始精度。
随着大型语言模型 (LLMs) 越来越普及,对能够满足这些现代架构计算需求同时保持准确性的新型改进量化方法的需求也日益增长。与 普通量化(如 W8A8)相比,仅权重(weight only)量化可能是一个更好的权衡,能够平衡性能和准确性,因为我们将在下文中看到部署 LLMs 的瓶颈在于内存带宽,而通常仅权重量化可以带来更好的准确性。
在这里,我们将介绍用于 ITREX 的 Transformer 大型语言模型的嵌入模型和仅权重(Weight-only)量化。仅权重量化是深度学习中用于减少神经网络内存和计算需求的一种技术。在深度神经网络的上下文中,模型参数(也称为权重)通常使用浮点数表示,这会消耗大量内存并需要大量的计算资源。
所有与 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 进行仅权重(Weight-Only)量化
请参阅使用示例。
配置参数详情
以下是 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 位存储权重,但计算仍以 float32、bfloat16 或 int8 进行(WeightOnlyQuantConfig 中的 compute_dtype)
- fp32:使用 float32 数据类型进行计算。
- bf16:使用 bfloat16 数据类型进行计算。
- int8:使用 8 位数据类型进行计算。
llm_int8_skip_modules (list of module's name): 跳过量化的模块,默认为 None。
这是一个要跳过量化的模块列表。
scale_dtype (string): 缩放数据类型,默认为 "fp32"。
目前仅支持 "fp32"(float32)。
mse_range (boolean): 是否在范围 [0.805, 1.0, 0.005] 中搜索最佳裁剪范围,默认为 False。
use_double_quant (boolean): 是否量化比例,默认为 False。
暂不支持。
double_quant_dtype (string): 保留用于双重量化。
double_quant_scale_dtype (string): 保留用于双重量化。
group_size (int): 量化时的组大小。
scheme (string): 权重量化到的格式。默认为 "sym"。
- sym:对称。
- asym:非对称。
algorithm (string): 用于提高准确性的算法。默认为 "RTN"
- RTN:四舍五入(Round-to-nearest, RTN)是一种非常直观的量化方法。
- AWQ:仅保护 1% 的显著权重可以大大减少量化误差。显著权重通道通过观察每通道的激活和权重分布来选择。显著权重在量化之前还会乘以一个大比例因子进行量化以进行保留。
- TEQ:一种可训练的等效变换,可在仅权重量化中保持 FP32 精度。