You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Langchain中启用多进程/线程运行Chroma.from_documents()?

解决方案

核心结论

Chroma.from_documents()本身没有直接支持多线程/多进程的参数,但可以通过优化嵌入模型的并行配置、手动拆分批量处理等方式大幅提升嵌入速度,充分利用你的硬件资源。

具体优化方案

1. 优化HuggingFace嵌入模型的并行能力

你使用的mpnet模型属于HuggingFace生态,LangChain的HuggingFaceEmbeddings类自带多进程/批量并行的配置项,这是提升速度的关键:

  • 启用多进程嵌入:设置multi_process=True,利用CPU多核心并行处理文本预处理和嵌入计算(WSL2环境下多进程兼容性良好)
  • 调大批量大小:通过encode_kwargs={"batch_size": 128}(可根据RTX4090显存调整到256甚至更高),让GPU一次性处理更多文本,最大化CUDA并行效率
  • 强制绑定GPU:确保模型加载到CUDA设备,避免意外跑在CPU上

示例代码:

from langchain.embeddings import HuggingFaceEmbeddings

embeddings = HuggingFaceEmbeddings(
    model_name="sentence-transformers/all-mpnet-base-v2",
    model_kwargs={"device": "cuda"},
    encode_kwargs={"batch_size": 128},
    multi_process=True
)

# 正常调用Chroma.from_documents
db = Chroma.from_documents(documents, embeddings, persist_directory="./chroma_db")

2. 手动拆分文档并行处理(进阶)

如果多进程嵌入仍有瓶颈,可以手动拆分文档批次,用线程池并行生成嵌入后再导入Chroma(GPU场景下线程池比进程池更友好,避免CUDA上下文冲突):

from langchain.vectorstores import Chroma
from langchain.embeddings import HuggingFaceEmbeddings
from concurrent.futures import ThreadPoolExecutor

embeddings = HuggingFaceEmbeddings(
    model_name="sentence-transformers/all-mpnet-base-v2",
    model_kwargs={"device": "cuda"},
    encode_kwargs={"batch_size": 128}
)

# 拆分文档为多个批次
batch_size = 64
batches = [documents[i:i+batch_size] for i in range(0, len(documents), batch_size)]

# 线程池并行处理批次
def process_batch(batch):
    return [embeddings.embed_documents([doc.page_content for doc in batch]), batch]

with ThreadPoolExecutor(max_workers=4) as executor:
    results = list(executor.map(process_batch, batches))

# 合并结果并初始化Chroma
all_embeddings = []
all_docs = []
for embeds, docs in results:
    all_embeddings.extend(embeds)
    all_docs.extend(docs)

db = Chroma.from_embeddings(
    embeddings=all_embeddings,
    documents=all_docs,
    embedding=embeddings,
    persist_directory="./chroma_db"
)

3. 基础检查与版本升级

  • 确认CUDA生效:运行print(torch.cuda.is_available())和print(embeddings.client.device),确保输出True和cuda:0
  • 升级依赖库:你的LangChain(0.0.253)和Chroma(0.4.2)版本较旧,新版本对并行嵌入和GPU优化有提升,建议升级到LangChain 0.1.x系列、Chroma 0.5.x+

内容的提问来源于stack exchange,提问作者Paris Char

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 11:25:11