FlagEmbedding icon indicating copy to clipboard operation
FlagEmbedding copied to clipboard

embedding model前向推理时,不同batchsize,相同文本,输出embedding小数点后几位不同

Open liangleikun opened this issue 1 year ago • 7 comments

embedding model前向推理时,不同batchsize,相同文本,输出embedding小数点后几位不同,请问这是什么原因导致的?理论上相同的输入应该会有完全相同的输出才对? 使用的是示例代码:

  sentences_1 = ["样例数据"]
  sentences_2 = ["样例数据", "样例数据", "样例数据", "样例数据"]
  model_path='./model_dir/bge-base-zh-v1.5'
  model = FlagModel(model_path, 
                  query_instruction_for_retrieval="为这个句子生成表示以用于检索相关文章:",
                  # query_instruction_for_retrieval="",
                  use_fp16=False) # Setting use_fp16 to True speeds up computation with a slight performance degradation
  embeddings_1 = model.encode(sentences_1)
  embeddings_2 = model.encode(sentences_2)

  print(embeddings_1[0][0])
  print(embeddings_2[0][0])

输出 -0.0024678216 -0.0024678234

liangleikun avatar Sep 18 '24 08:09 liangleikun

试试把seed设置成0

smoothdvd avatar Sep 22 '24 09:09 smoothdvd

试试把seed设置成0

还是一样有差异,而且应该和seed没关系,不是训练阶段,是模型eval()推理的时候,理论上推理的时候不应该有某个随机结果,没想通差异是为啥

liangleikun avatar Sep 23 '24 03:09 liangleikun

感觉不是随机结果,更像是精度损失导致的。在用CPU推理的时候复现出了类似的情况,用GPU推理暂时没有发现这个问题。猜测有可能是硬件加载模型、数据传输或计算过程导致的误差

ZiyiXia avatar Sep 24 '24 08:09 ZiyiXia

Screenshot 2024-09-24 at 4 22 19 PM

在codespaces里试了一下是一样的

smoothdvd avatar Sep 24 '24 08:09 smoothdvd

我也遇到了一样的问题 批量请求的结果和单条请求的向量小数位最后几位不一致 导致量化的时候也会有点问题 进而影响查询精度

masterwang22327 avatar Dec 12 '24 02:12 masterwang22327

可以试试ollama+bge-m3

smoothdvd avatar Dec 12 '24 04:12 smoothdvd