FlagOpen / FlagEmbedding

Retrieval and Retrieval-augmented LLMs
MIT License
6.88k stars 498 forks source link

运行一段时间,显存不释放,最终CUDA out of memory #185

Open caoyutingtjpu opened 11 months ago

caoyutingtjpu commented 11 months ago

使用官方示例 transformers做serving,显存40G,循环调用,A100 40G显存直接打满,如果不重启,这部分显存不释放

from FlagEmbedding import FlagModel
sentences_1 = ["样例数据-1", "样例数据-2"]
sentences_2 = ["样例数据-3", "样例数据-4"]
model = FlagModel('BAAI/bge-large-zh-v1.5', 
                  query_instruction_for_retrieval="为这个句子生成表示以用于检索相关文章:",
                  use_fp16=True) # 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)
staoxiao commented 11 months ago

可以调小batch size,降低显存占用。

caoyutingtjpu commented 11 months ago

可以调小batch size,降低显存占用。

你指的batch size是传入的token数吗? 测试发现,batch_size在128,如果同时请求serving数过多,也会一直不释放,除非重启serving

linchen111 commented 11 months ago

我也碰到这个问题,我是一次传入batchsize的数据循环做,batchsize每次传入都是一样的,为什么显存占用越来越高?

staoxiao commented 11 months ago

文本越长,相同的batch size也会占用更多显存。

putdoor commented 10 months ago

import torch

torch.cuda.empty_cache() # 在每次推理结束后,释放显存 希望可以帮助到你。

caoyutingtjpu commented 10 months ago

import torch

torch.cuda.empty_cache() # 在每次推理结束后,释放显存 希望可以帮助到你。

谢谢,这个方式我们之前尝试过,随着运行时间的增加,显存占用非常高,当前是限制了总的使用显存大小

Homura2333 commented 1 month ago

import torch torch.cuda.empty_cache() # 在每次推理结束后,释放显存 希望可以帮助到你。

谢谢,这个方式我们之前尝试过,随着运行时间的增加,显存占用非常高,当前是限制了总的使用显存大小

你好,我也遇到了这个问题,请问您后来又解决吗