
LlamaIndex 在 Intel Gaudi 上的嵌入集成GaudiEmbedding 安装、参数解析与 Graph RAG 实战【免费下载链接】llama_indexLlamaIndex is the document processing platform for AI项目地址: https://gitcode.com/GitHub_Trending/ll/llama_index本篇技术指南聚焦 LlamaIndex 官方集成包llama-index-embeddings-gaudi完整讲解如何在 Intel GaudiHabana加速器上运行 HuggingFace 嵌入模型从安装依赖、初始化GaudiEmbedding、理解其全部构造参数与底层 tokenize 覆盖逻辑到以thenlper/gte-large为例完成文本/查询嵌入并进一步跑通基于 Neo4j 知识图谱与本地 Gaudi LLM 的 Graph RAG 完整链路。读完本文你将掌握在 Gaudi 硬件上构建 LlamaIndex 嵌入层与知识图谱检索应用的直接可运行方案。一、集成包概览什么是 llama-index-embeddings-gaudillama-index-embeddings-gaudi是 LlamaIndex 官方为 Intel Gaudi 加速器HPU提供的嵌入模型接入层其核心类是llama_index.embeddings.gaudi.GaudiEmbedding源码位于 llama_index/embeddings/gaudi/base.py。它通过包装 HuggingFace 生态的SentenceTransformer模型让原本面向 CPU/GPU 的文本嵌入流程可以在 Gaudi HPU 上获得加速执行。从包配置 pyproject.toml 可以确认该包的版本与依赖约束当前版本0.4.0Python 要求3.10,4.0运行时依赖optimum[habana]1.21.2与llama-index-core0.13.0,0.15。其中optimum[habana]是 Intel 官方在 HuggingFace Optimum 框架上的 Habana 适配分支负责把 Transformer/SentenceTransformer 模型调度到 HPU 上执行是运行本集成的硬件驱动基础。从源码结构看GaudiEmbedding直接继承llama_index.core.base.embeddings.base.BaseEmbedding因此它与 LlamaIndex 的索引构建、检索器、查询引擎天然兼容可以无缝替换默认的OpenAIEmbedding等实现。二、环境准备与安装2.1 硬件前提本集成面向 Intel Gaudi 加速器如 Gaudi 1/2 及后续型号设计示例脚本通过--device hpu参数显式指定推理设备。运行前需要确认宿主机已正确安装 Intel Gaudi 软件栈含 HPU 驱动与torch的 Habana 版本。2.2 安装命令在 Intel Gaudi 主机上按以下顺序安装摘自 examples/README.mdpip install --upgrade-strategy eager optimum[habana] pip install llama-index-embeddings-gaudi第一条命令安装带 Habana 适配的 Optimum 生态使用--upgrade-strategy eager是为了让相关依赖统一升级到与 Habana 软件栈匹配的版本第二条命令安装本集成包本身。2.3 安装验证安装完成后可通过导入与实例化快速验证对应 examples/basic.py 的写法from llama_index.embeddings.gaudi import GaudiEmbedding embed_model GaudiEmbedding( embedding_input_size-1, model_namethenlper/gte-large, )若没有抛出 ImportError 且模型加载完成说明环境就绪。GaudiEmbedding由包入口 llama_index/embeddings/gaudi/init.py 导出导入路径为llama_index.embeddings.gaudi。三、基础用法文本嵌入与查询嵌入3.1 最小可运行示例以下代码来自 examples/basic.py演示了 GaudiEmbedding 的最基本调用方式from llama_index.embeddings.gaudi import GaudiEmbedding if __name__ __main__: embed_model GaudiEmbedding( embedding_input_size-1, model_namethenlper/gte-large, ) # Basic embedding example embeddings embed_model.get_text_embedding(It is raining cats and dogs here!) print(len(embeddings), embeddings[:10])运行方式需在 Gaudi 主机上启用 HPU 惰性执行与分布式集合模式PT_HPU_LAZY_ACC_PAR_MODE1 PT_HPU_ENABLE_LAZY_COLLECTIVEStrue python basic.pyPT_HPU_LAZY_ACC_PAR_MODE1与PT_HPU_ENABLE_LAZY_COLLECTIVEStrue是 Habana 运行时的环境开关前者控制惰性累积的并行执行模式后者启用惰性集合通信是官方示例要求的启动前提。3.2 面向 LlamaIndex 的完整 APIGaudiEmbedding作为BaseEmbedding的子类向 LlamaIndex 上层暴露以下嵌入接口见 base.py方法说明get_text_embedding(text)对单条文本生成向量底层调用_get_text_embeddingget_text_embeddings(texts)批量生成向量底层调用_get_text_embeddingsget_query_embedding(query)对查询语句生成向量底层调用_get_query_embeddingaget_query_embedding(query)查询嵌入的异步版本aget_text_embedding(text)文本嵌入的异步版本所有方法最终汇聚到_embed()方法它调用底层GaudiSentenceTransformer.encode()完成真正的向量化并返回 Python 列表格式的浮点向量def _embed(self, sentences, prompt_nameNone): return self._model.encode( sentences, batch_sizeself.embed_batch_size, prompt_nameprompt_name, normalize_embeddingsself.normalize, ).tolist()3.3 在索引/查询流程中接入因为GaudiEmbedding实现了 LlamaIndex 标准嵌入接口可以直接挂到全局Settings.embed_model或在构建索引、查询引擎时作为embed_model参数传入下文 Graph RAG 示例即采用传入参数的方式。向量维度由所选模型决定例如thenlper/gte-large输出 1024 维向量具体可通过len(embeddings)验证。四、GaudiEmbedding 构造参数与源码级解析4.1 构造参数一览根据 base.py 的__init__签名GaudiEmbedding支持以下参数参数类型默认值说明model_namestrthenlper/gte-largeHuggingFace 模型名或本地模型路径embedding_input_sizeint-1传给底层 transformer 的输入长度控制见 4.2max_lengthOptional[int]512输入最大长度gt0约束与embedding_input_size配合决定 tokenize 的max_lengthnormalizeboolTrue是否对输出向量做 L2 归一化直接透传给encode(normalize_embeddings...)query_instructionOptional[str]None拼接在查询文本前的指令当前实现中该字段保留但未激活 prompts 映射见 4.3text_instructionOptional[str]None拼接在文本前的指令同上tokenizerOptional[Any]None预留的自定义 tokenizer 参数embed_batch_sizeintDEFAULT_EMBED_BATCH_SIZE批量嵌入的批次大小透传给encode(batch_size...)callback_managerOptional[CallbackManager]NoneLlamaIndex 回调管理器用于链路追踪**model_kwargs——透传给SentenceTransformer的其余关键字如cache_folder等需要注意示例代码中的embedding_input_size并不在 pydantic 字段声明中而是通过**model_kwargs透传给底层的GaudiSentenceTransformer。4.2 核心实现GaudiSentenceTransformer 的 tokenize 覆盖GaudiSentenceTransformer是SentenceTransformer的子类base.py其关键改动是重写了tokenize方法以适配 HPU 上静态 shape 的执行特性def tokenize(self, texts): return self._first_module().tokenizer( texts, max_lengthself.max_seq_length if ( self.embedding_input_size -1 or self.embedding_input_size self.max_seq_length ) else self.embedding_input_size, paddingmax_length, return_tensorspt, truncationTrue, )该逻辑的含义当embedding_input_size -1时使用模型自身的max_seq_length作为max_length当embedding_input_size大于max_seq_length时同样退回到max_seq_length避免超出模型能力其他情况下使用用户指定的embedding_input_size作为max_length统一采用paddingmax_length补齐到定长与truncationTrue超长截断从而保证 HPU 上每个 batch 的输入 shape 固定减少重编译开销。这解释了为何示例统一传入embedding_input_size-1让模型按自身最大序列长度处理输入同时保持张量形状稳定。4.3 指令instruction字段的当前实现状态从源码看query_instruction与text_instruction字段在构造时被记录base.py但原本用于把指令注入SentenceTransformerprompts 的代码块当前处于注释状态且_embed调用时prompt_nameNone。因此可以推断在当前版本中指令字段主要用于保持与 HuggingFace 集成包 API 的一致性指令文本暂不会自动拼接到输入。若需为 BGE/Instructor 类模型附加检索指令可参考同目录 utils.py 中预留的指令模板DEFAULT_EMBED_INSTRUCTION、DEFAULT_QUERY_INSTRUCTION、DEFAULT_QUERY_BGE_INSTRUCTION_EN/ZH以及get_query_instruct_for_model_name/get_text_instruct_for_model_name辅助函数自行在预处理阶段拼接。4.4 默认模型与模型缓存包内 utils.py 定义了默认模型常量为BAAI/bge-small-en-v1.5而 base.py 中GaudiEmbedding的默认模型为thenlper/gte-large。模型加载时通过cache_folderget_cache_dir()即 LlamaIndex 的统一缓存目录复用已下载的 HuggingFace 权重避免重复下载。utils.py同时保留了 BGE 系列与 Instructor 系列模型的清单及对应指令生成逻辑可作为选择其他模型的参考。五、Graph RAG 实战Gaudi 本地 LLM Neo4j 知识图谱官方示例 graphrag.py 展示了在 Intel Gaudi 上完全本地化运行 Graph RAG图分析与检索增强生成的完整方案用GaudiEmbedding生成节点嵌入、用GaudiLLM做三元组抽取与回答生成、用 Neo4j 存储知识图谱最后通过图查询完成检索问答。5.1 架构与数据流从 graphrag.py 的run_code()可以还原整体流程用WikipediaReader加载维基百科页面文本示例为 Guardians of the Galaxy Vol. 3初始化GaudiLLM模型HuggingFaceH4/zephyr-7b-alpha配置messages_to_prompt与query_wrapper_prompt与GaudiEmbedding模型thenlper/gte-large通过Settings.llm llm、Settings.chunk_size 512配置全局默认值连接 Neo4jNeo4jGraphStore构建StorageContext用KnowledgeGraphIndex.from_documents(...)从文档抽取三元组并生成知识图谱索引max_triplets_per_chunk3include_embeddingsTrue用index.as_query_engine(...)embedding_modehybrid、similarity_top_k5、response_modetree_summarize执行图检索问答将查询结果按 zephyr 对话模板包装后打印答案。该示例同时依赖 LlamaIndex 的其他官方集成包llama-index-llms-gaudiGaudi LLM、llama-index-graph-stores-neo4jNeo4j 图存储、llama-index-readers-wikipedia维基百科读取器详见 examples/requirements.txt。5.2 第一步启动 Neo4j 数据库服务器Graph RAG 示例需要 Neo4j含 APOC 插件作为图存储后端。官方给出的 Docker 启动命令如下docker run --restart always --publish7474:7474 --publish7687:7687 --env NEO4J_AUTHneo4j/neo4j-server-password -v $PWD/data:/data -v $PWD/plugins:/plugins --name neo4j-apoc -e NEO4J_apoc_export_file_enabledtrue -e NEO4J_apoc_import_file_enabledtrue -e NEO4J_apoc_import_file_use__neo4j__configtrue -e NEO4JLABS_PLUGINS\[\apoc\\] -e NEO4J_dbms_security_procedures_unrestrictedapoc.\\\* neo4j:5.22.0要点解读--publish7474:7474暴露 Neo4j 浏览器界面HTTP--publish7687:7687暴露 Bolt 协议端口供驱动连接NEO4J_AUTHneo4j/password设置初始账号密码需替换neo4j-server-password-v $PWD/data:/data与-v $PWD/plugins:/plugins挂载数据与插件目录通过多个NEO4J_apoc_*环境变量启用 APOC 的导入导出能力并安装apoc插件、放开过程执行限制镜像版本固定为neo4j:5.22.0。5.3 第二步安装附加依赖并设置环境变量官方文档要求 Intel Gaudi 软件版本1.18.0 或更高然后安装pip install llama-index-llms-huggingface pip install llama-index-llms-gaudi pip install requirements.txt其中requirements.txt即本包的 examples/requirements.txt包含llama-index-graph-stores-neo4j、llama-index-readers-wikipedia、wikipedia、InstructorEmbedding1.0.1、python-dotenv等。随后设置 Neo4j 连接环境变量对应 graphrag.py 中的读取逻辑export NEO4J_USERNAMEneo4j export NEO4J_PASSWORDneo4j-server-password #default: neo4j export NEO4J_URLneo4j://neo4j-server-host-ip:7687 export NEO4J_DATABASEneo4j四个变量分别对应Neo4jGraphStore的username、password、urlBolt 地址与database缺一不可否则图存储连接会失败。5.4 第四步运行 Graph RAG 示例PT_HPU_LAZY_ACC_PAR_MODE1 PT_HPU_ENABLE_LAZY_COLLECTIVEStrue python graphrag.py运行时会先构建知识图谱LLM 抽取三元组 嵌入生成节点向量随后对问题List the cast of Guardians of the Galaxy Vol. 3进行图检索混合嵌入模式与tree_summarize式回答合成。示例 graphrag.py 的setup_parser()还内置了大量 Gaudi 推理调优参数如--bf16、--use_hpu_graphs、--max_new_tokens、--batch_size、--use_flash_attention、--bucket_size等可通过命令行覆盖默认值用于吞吐与延迟调优。六、常见问题与注意事项必须在 Gaudi 硬件上运行optimum[habana]与 HPU 惰性执行环境变量是运行前提普通 CPU/GPU 环境无法发挥该集成价值输入长度控制需要控制嵌入输入长度时设置embedding_input_size建议保持-1使用模型默认max_seq_length以简化 shape 管理向量归一化normalizeTrue默认会对输出做 L2 归一化适合余弦相似度检索场景若底层向量库内部已归一化可关闭以减少计算Graph RAG 的软件版本约束官方明确 Intel Gaudi 软件版本需 ≥ 1.18.0且 Neo4j 使用5.22.0镜像升级前应核对版本兼容性指令字段暂不自动生效当前版本的query_instruction/text_instruction仅作为字段保留需要指令注入时请自行在输入文本前拼接参考 utils.py 中的模板。七、延伸阅读集成包入口文档README.md官方示例说明examples/README.md核心实现base.py、utils.py可运行示例basic.py、graphrag.py包配置与依赖pyproject.toml、examples/requirements.txt配套的GaudiLLM实现位于 llama-index-llms-gaudiNeo4j 图存储实现位于 llama-index-graph-stores-neo4j如需将本方案集成进更大的 LlamaIndex 应用可直接参考这两个包的文档与源码。【免费下载链接】llama_indexLlamaIndex is the document processing platform for AI项目地址: https://gitcode.com/GitHub_Trending/ll/llama_index创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考