跳转到内容

在英特尔GPU上使用IPEX-LLM实现本地嵌入

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.

本示例演示了如何在英特尔GPU上使用LlamaIndex执行嵌入任务,并采用ipex-llm优化。这在RAG、文档问答等应用中非常有用。

备注

您可以参考此处查看IpexLLMEmbedding的完整示例。请注意,若要在英特尔GPU上运行,请在运行示例时于命令行参数中指定-d 'xpu'-d 'xpu:<device_id>'

要在英特尔GPU上受益于IPEX-LLM,需要完成工具安装和环境准备的几个前提步骤。

如果您是Windows用户,请访问在Windows上使用英特尔GPU安装IPEX-LLM指南,并按照安装先决条件更新GPU驱动程序(可选)并安装Conda。

如果您是Linux用户,请访问在配备英特尔GPU的Linux系统上安装IPEX-LLM,并按照安装先决条件的指引安装GPU驱动程序、英特尔® oneAPI基础工具包2024.0和Conda。

安装 llama-index-llms-ipex-llmllama-index-embeddings-ipex-llm

Section titled “Install llama-index-embeddings-ipex-llm”

在完成先决条件安装后,您应该已经创建了一个包含所有先决条件的conda环境,激活您的conda环境并按如下方式安装llama-index-embeddings-ipex-llm

Terminal window
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-indel-url

为获得最佳性能,建议根据您的设备设置以下环境变量:

适用于配备英特尔酷睿Ultra集成显卡的Windows用户

Section titled “For Windows Users with Intel Core Ultra integrated GPU”

在 Anaconda 提示符中:

set SYCL_CACHE_PERSISTENT=1
set BIGDL_LLM_XMX_DISABLED=1

适用于配备英特尔锐炫 A 系列 GPU 的 Linux 用户

Section titled “For Linux Users with Intel Arc A-Series GPU”
Terminal window
# 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

备注

首次在英特尔集成显卡/英特尔锐炫 A300 系列或 Pro A60 上运行每个模型时,可能需要几分钟时间进行编译。

对于其他GPU类型,Windows用户请参考此处,Linux用户请参考此处

在初始化 IpexLLMEmbedding 时设置 device="xpu" 将把嵌入模型部署在英特尔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 模型提供优化。

如果您有多个英特尔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]}")