使用 IPEX-LLM 在 Intel GPU 上进行本地嵌入¶
IPEX-LLM 是一个 PyTorch 库,用于在 Intel CPU 和 GPU(例如,带 iGPU 的本地 PC,或 Arc、Flex 和 Max 等独立 GPU)上以非常低的延迟运行 LLM。
本示例将介绍如何使用 LlamaIndex 在 Intel GPU 上利用 ipex-llm
优化来执行嵌入任务。这在 RAG、文档问答等应用中会很有帮助。
注意
您可以参考此处获取
IpexLLMEmbedding
的完整示例。请注意,要在 Intel GPU 上运行,请在运行示例时在命令行参数中指定-d 'xpu'
或-d 'xpu:<device_id>'
。
安装先决条件¶
为了从 Intel GPU 上的 IPEX-LLM 中获益,需要先安装工具并准备环境。
如果您是 Windows 用户,请访问使用 Intel GPU 在 Windows 上安装 IPEX-LLM 指南,并按照安装先决条件更新 GPU 驱动程序(可选)并安装 Conda。
如果您是 Linux 用户,请访问使用 Intel GPU 在 Linux 上安装 IPEX-LLM,并按照安装先决条件安装 GPU 驱动程序、Intel® oneAPI Base Toolkit 2024.0 和 Conda。
安装 llama-index-embeddings-ipex-llm
¶
安装先决条件后,您应该已经创建了一个包含所有先决条件的 conda 环境,激活您的 conda 环境并按如下方式安装 llama-index-embeddings-ipex-llm
:
conda activate <your-conda-env-name>
pip install llama-index-embeddings-ipex-llm[xpu] --extra-index-url https://pytorch-extension.intel.com/release-whl/stable/xpu/us/
此步骤还将安装 ipex-llm
及其依赖项。
注意
您也可以使用
https://pytorch-extension.intel.com/release-whl/stable/xpu/cn/
作为extra-index-url
。
运行时配置¶
为了获得最佳性能,建议根据您的设备设置一些环境变量:
对于使用 Intel Core Ultra 集成 GPU 的 Windows 用户¶
在 Anaconda Prompt 中
set SYCL_CACHE_PERSISTENT=1
set BIGDL_LLM_XMX_DISABLED=1
对于使用 Intel Arc A 系列 GPU 的 Linux 用户¶
# Configure oneAPI environment variables. Required step for APT or offline installed oneAPI.
# Skip this step for PIP-installed oneAPI since the environment has already been configured in LD_LIBRARY_PATH.
source /opt/intel/oneapi/setvars.sh
# Recommended Environment Variables for optimal performance
export USE_XETLA=OFF
export SYCL_PI_LEVEL_ZERO_USE_IMMEDIATE_COMMANDLISTS=1
export SYCL_CACHE_PERSISTENT=1
注意
每个模型首次在 Intel iGPU/Intel Arc A300 系列或 Pro A60 上运行时,可能需要几分钟来编译。
IpexLLMEmbedding
¶
在初始化 IpexLLMEmbedding
时设置 device="xpu"
会将嵌入模型放置在 Intel GPU 上,并从 IPEX-LLM 优化中获益。
from llama_index.embeddings.ipex_llm import IpexLLMEmbedding
embedding_model = IpexLLMEmbedding(
model_name="BAAI/bge-large-en-v1.5", device="xpu"
)
请注意,
IpexLLMEmbedding
当前仅为 Hugging Face BGE 模型提供优化。如果您有多个可用的 Intel GPU,您可以设置
device="xpu:<device_id>"
,其中device_id
从 0 开始计数。默认情况下,device="xpu"
等同于device="xpu:0"
。
然后您可以照常进行嵌入任务。
sentence = "IPEX-LLM is a PyTorch library for running LLM on Intel CPU and GPU (e.g., local PC with iGPU, discrete GPU such as Arc, Flex and Max) with very low latency."
query = "What is IPEX-LLM?"
text_embedding = embedding_model.get_text_embedding(sentence)
print(f"embedding[:10]: {text_embedding[:10]}")
text_embeddings = embedding_model.get_text_embedding_batch([sentence, query])
print(f"text_embeddings[0][:10]: {text_embeddings[0][:10]}")
print(f"text_embeddings[1][:10]: {text_embeddings[1][:10]}")
query_embedding = embedding_model.get_query_embedding(query)
print(f"query_embedding[:10]: {query_embedding[:10]}")