如何用llama-index的SimpleDirectoryReader/VectorStoreIndex并行处理文件?
优化PDF读取与Embedding生成的并行处理方案
一、优化PDF文件读取的并行效率
SimpleDirectoryReader 支持通过 num_workers 参数开启多进程并行读取解析文件,直接指定该参数为你的CPU核心数(比如12)即可利用全部核心加速处理:
from llama_index.core import SimpleDirectoryReader reader = SimpleDirectoryReader( input_dir="/home/ovo/code/datasets/ebooks/compsci/", num_workers=12 # 设置为CPU核心数,启用多进程并行 ) docs = reader.load_data() print(f"Loaded {len(docs)} docs")
该参数会让阅读器同时启动多个进程处理不同的PDF文件,充分利用多核CPU资源,大幅提升读取解析速度。
二、优化Embedding生成的并行效率
针对Embedding生成速度慢的问题,可以从以下几点优化:
1. 调整Embedding模型的批量与并行参数
给 HuggingFaceEmbedding 设置更大的 batch_size,同时开启多进程处理的 num_workers,并启用半精度计算减少内存占用、提升速度:
from llama_index.embeddings.huggingface import HuggingFaceEmbedding from llama_index.core import Settings, VectorStoreIndex Settings.embed_model = HuggingFaceEmbedding( model_name="BAAI/bge-small-en-v1.5", batch_size=64, # 根据内存情况调大,比如32/64/128 num_workers=8, # 启用多进程处理Embedding model_kwargs={"device": "cuda", "torch_dtype": "float16"} # 用GPU半精度加速 ) # 生成索引时指定并行处理的worker数 index = VectorStoreIndex.from_documents(docs, num_workers=12)
2. 确保模型正确加载到GPU
如果GPU显存充足,确认模型加载到CUDA设备上(上述代码已设置device="cuda"),避免默认用CPU计算导致速度慢。半精度(float16)能大幅降低显存占用,让GPU同时处理更多数据。
3. 文档分块的并行处理
如果文档分块后数量极大,构建索引时通过 num_workers 参数让分块的Embedding计算并行执行,充分利用多核CPU或GPU的并行能力。
内容的提问来源于stack exchange,提问作者J. Taylor
相关产品推荐
相关产品推荐

