FlagEmbedding icon indicating copy to clipboard operation
FlagEmbedding copied to clipboard

[ rerakner] 关于reranker全精度和半精度运行的一些问题

Open Tian14267 opened this issue 1 year ago • 7 comments

大神们好。 我在对rerakner进行一些实验的时候,发现一些问题。(bge-reranker-v2-m3模型) 问题: 1:全精度(fp32)比 半精度(fp16),整体推理耗时慢太多了(差不多5倍的差距)。请问这是正常的吗 2:我对token耗时和模型推理耗时进行了统计。发现全精度的token耗时占比太大了,比半精度大多了。正常直觉来看,不应该是全精度的模型推理耗时上升吗,为啥是token耗时(文本-->token)剧烈增加?如下图 1

另外,如何才能降低 token转换 的耗时 ?

Tian14267 avatar Jul 18 '24 06:07 Tian14267

请问token耗时指的是哪块时间?

staoxiao avatar Jul 18 '24 08:07 staoxiao

请问token耗时指的是哪块时间?

2

inputs = self.tokenizer(
                sentences_batch,
                padding=True,
                truncation=True,
                return_tensors='pt',
                max_length=max_length,
            ).to(self.device)

这部分耗时

Tian14267 avatar Jul 18 '24 08:07 Tian14267

哥们你不会用的是a800以上级别的显卡进行推理吧

adol001 avatar Jul 18 '24 09:07 adol001

哥们你不会用的是a800以上级别的显卡进行推理吧

嗯。A800。现在来看,token效率低了,这部分主要是CPU的原因。不知道能不能优化。

Tian14267 avatar Jul 18 '24 09:07 Tian14267

哥们你不会用的是a800以上级别的显卡进行推理吧

嗯。A800。现在来看,token效率低了,这部分主要是CPU的原因。不知道能不能优化。

你看看a800 fp16的算力和fp32的算力差多少。

adol001 avatar Jul 18 '24 11:07 adol001

@Tian14267 , 这块涉及到tokenizer和数据从cpu转到gpu,可能是数据转移花费了较多时间。 但理论上使用fp16和fp32这块时间应该是一致的,可以多测几次取平均值。

tokenizer这块有很大的提速空间,可以使用dataloader进行多线程处理,参考https://github.com/FlagOpen/FlagEmbedding/blob/master/FlagEmbedding/flag_reranker.py#L16 也可以使用一些加速推理库,如https://github.com/huggingface/text-embeddings-inference

staoxiao avatar Jul 18 '24 14:07 staoxiao

@Tian14267 , 这块涉及到tokenizer和数据从cpu转到gpu,可能是数据转移花费了较多时间。 但理论上使用fp16和fp32这块时间应该是一致的,可以多测几次取平均值。

tokenizer这块有很大的提速空间,可以使用dataloader进行多线程处理,参考https://github.com/FlagOpen/FlagEmbedding/blob/master/FlagEmbedding/flag_reranker.py#L16 也可以使用一些加速推理库,如https://github.com/huggingface/text-embeddings-inference

好嘞,非常感谢建议。我测试了很多次,全精度和半精度,在token这边的耗时差距非常大。建议你们那边也可以测试一下。其他的加速库我回头看一下。主要想在xinference上进行使用。

Tian14267 avatar Jul 19 '24 02:07 Tian14267