Intel
Optimum Intel 是 🤗 Transformers 和 Diffusers 库与 Intel 提供的不同工具和库之间的接口,用于加速 Intel 架构上的端到端管道。
Intel® Extension for Transformers (ITREX) 是一个创新的工具包,旨在通过在各种英特尔平台上(包括英特尔Gaudi2、英特尔CPU和英特尔GPU)优化基于Transformer的模型的性能,加速GenAI/LLM的普及。
本页面介绍了如何将optimum-intel和ITREX与LangChain结合使用。
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
英特尔® Transformers扩展 (ITREX)
(ITREX) 是一个创新的工具包,用于在英特尔平台上加速基于Transformer的模型,特别是在第四代英特尔至强可扩展处理器Sapphire Rapids(代号Sapphire Rapids)上效果显著。
量化是一个通过使用较少的位数来表示这些权重来降低其精度的过程。仅权重量化特别关注于量化神经网络的权重,同时保持其他组件(如激活)的原始精度。
随着大型语言模型(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".
我们支持将权重量化为以下数据类型以进行存储(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 (模块名称列表): 要跳过量化的模块,默认为 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: 四舍五入(RTN)是一种我们可以非常直观地理解的量化方法。
- AWQ: 仅保护1%的重要权重可以大大减少量化误差。重要权重通道是通过观察每个通道的激活和权重分布来选择的。重要权重在量化前会乘以一个大比例因子以进行保留。
- TEQ: 一种可训练的等效变换,在仅权重量化中保持FP32精度。