Intel
Optimum Intel 是 🤗 Transformers 和 Diffusers 庫以及 Intel 提供的不同工具和庫之間的介面,旨在加速 Intel 架構上的端對端管線。
Intel® Extension for Transformers (ITREX) 是一個創新的工具組,旨在透過在各種 Intel 平台上(包括 Intel Gaudi2、Intel CPU 和 Intel 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
請依照以下指定的安裝指示進行操作
嵌入模型
請參閱使用範例。我們也提供完整的教學筆記本 "rag_with_quantized_embeddings.ipynb",用於在 cookbook 目錄中的 RAG 管線中使用嵌入器。
from langchain_community.embeddings import QuantizedBiEncoderEmbeddings
Intel® Extension for Transformers (ITREX)
(ITREX) 是一個創新的工具組,旨在加速 Intel 平台上的基於 Transformer 的模型,尤其是在第 4 代 Intel Xeon 可擴充處理器 Sapphire Rapids(代號 Sapphire Rapids)上非常有效。
量化是一個過程,涉及透過使用較少位元來表示權重,從而降低這些權重的精確度。僅權重量化特別側重於量化神經網路的權重,同時保持其他組件(例如啟動)的原始精確度。
隨著大型語言模型 (LLM) 變得越來越普及,越來越需要新的和改良的量化方法,以滿足這些現代架構的計算需求,同時保持準確性。與 正常量化(如 W8A8)相比,僅權重量化可能是平衡效能和準確性的更好權衡,因為我們將在下面看到,部署 LLM 的瓶頸是記憶體頻寬,而正常情況下,僅權重量化可能會帶來更好的準確性。
在這裡,我們將介紹適用於具有 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 (字串):權重資料類型,預設為 "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 精度。