Intel
Optimum Intel 是 🤗 Transformers 和 Diffusers 库与 Intel 提供的不同工具和库之间的接口,用于在 Intel 架构上加速端到端流水线。
Intel® Transformer 扩展 (ITREX) 是一个创新工具包,旨在通过在各种 Intel 平台(包括 Intel Gaudi2、Intel CPU 和 Intel GPU)上实现基于 Transformer 模型的最优性能,从而加速 GenAI/LLM 的 everywhere 应用。
此页面介绍如何使用 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
Intel® Transformer 扩展 (ITREX)
(ITREX) 是一个创新工具包,旨在加速基于 Transformer 的模型在 Intel 平台上的运行,特别是在第 4 代 Intel Xeon 可扩展处理器 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"。
我们支持将权重量化为以下数据类型以进行存储(weight_dtype 在 WeightOnlyQuantConfig 中):
- 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(布尔值):是否从范围 [0.805, 1.0, 0.005] 中搜索最佳裁剪范围,默认为 False。
use_double_quant (boolean): 是否对比例进行量化,默认值为 False。
尚不支持。
double_quant_dtype (字符串):保留用于双量量化。
double_quant_scale_dtype (字符串):保留用于双量量化。
group_size (int): 量化时的组大小。
scheme (string): 要量化的权重格式。默认为"sym"。
- sym: 对称。
- asym: 非对称。
algorithm (string): 用于提高准确率的算法。默认为"RTN"
- RTN: 最近舍入(RTN)是一种我们可以非常直观地理解的量化方法。
- AWQ: 仅保护 1% 的显著权重即可大幅降低量化误差。显著权重通道是通过观察每通道的激活值和权重分布来选择的。在量化之前,显著权重还会乘以一个较大的缩放因子进行量化,以予以保留。
- TEQ: 一种可训练的等价变换,可在仅量化权重的情况下保持 FP32 精度。