shibing624 / text2vec

text2vec, text to vector. 文本向量表征工具,把文本转化为向量矩阵,实现了Word2Vec、RankBM25、Sentence-BERT、CoSENT等文本表征、文本相似度计算模型,开箱即用。
https://pypi.org/project/text2vec/
Apache License 2.0
4.39k stars 392 forks source link

如何使用多卡进行im_model.model.encode() #126

Closed newbietuan closed 1 year ago

newbietuan commented 1 year ago

from text2vec import Similarity, semantic_search sim_model = Similarity(model_name_or_path="./data/model/text2vec-base-chinese", max_seq_length=512) embedding_query = sim_model.model.encode(query) corpus_embedding = sim_model.model.encode(corpus, batch_size=64, convert_to_numpy=False, show_progress_bar=True) result_list = semantic_search(query_embeddings=embedding_query, corpus_embeddings=corpus_embedding) embedding的过程占用时间较多,请问如何将sim_model.model.encode使用多卡进行?

shibing624 commented 1 year ago

数据并行,数据切分8份,每个卡执行一份数据,写个shell跑。

newbietuan commented 1 year ago

数据并行,数据切分8份,每个卡执行一份数据,写个shell跑。

就是说要手动起多个任务去跑,不能用torch的并行或multiprocessing直接一个程序里进行并行的意思吗?要如何在一个程序里进行多卡

shibing624 commented 1 year ago

参考多卡预测:https://github.com/shibing624/MedicalGPT/blob/main/inference_multigpu_demo.py 可以自己写。 跟shell每个卡执行一遍是一样速度。

newbietuan commented 1 year ago

参考多卡预测:https://github.com/shibing624/MedicalGPT/blob/main/inference_multigpu_demo.py 可以自己写。 跟shell每个卡执行一遍是一样速度。

shell多卡多次执行的话就不能方便的把每一部分的embedding合并起来嘛,后面进行检索要在全量数据上进行

shibing624 commented 1 year ago

为啥不能?你存个jsonl,检索时多文件加载合并起来。

newbietuan commented 1 year ago

为啥不能?你存个jsonl,检索时多文件加载合并起来。

嗯~就是最近很多东西都是这样多线程存了jsonl再读,所以想试试直接不用这种方法的。。。还一个顾虑就是全存一遍的话可能占空间会比较多吧

shibing624 commented 11 months ago

支持多卡推理(多进程实现多GPU、多CPU推理),text2vec支持多卡推理(计算文本向量): examples/computing_embeddings_multi_gpu_demo.py