使用SentenceTransformers后PyTorch模型峰值内存无法释放求助
SentenceTransformers推理后内存无法释放的问题
我正在使用SentenceTransformers库生成文本嵌入,调用预训练模型推理时内存出现峰值是预期情况,但获取到嵌入向量后,内存占用始终没有下降。
我用以下代码做内存分析:
from time import sleep import torch from sentence_transformers import SentenceTransformer @profile def encode_text(text): text_encoder = SentenceTransformer('paraphrase-albert-small-v2') embedding = text_encoder.encode(text) return embedding encode_text(['This is a sentance']) sleep(3)
通过memory-profiler工具执行命令:mprof run --python python main.py
之后用mprof plot生成内存分布图。
观察到内存从函数调用开始到结束持续增长(蓝色方括号标注区间),但函数执行完毕后内存完全没有被释放。这让我困惑,因为拿到embedding向量后,代码里应该没有再占用大量内存的内容了。
我已经尝试过这些操作,但都没有效果:
- 将推理代码包裹在
torch.no_grad()中 - 创建
text_encoder后设置text_encoder.requires_grad_(False)和text_encoder.eval() - 推理完成后执行
del text_encoder
请问这个现象的原因是什么?该如何释放内存?
我的运行环境:
- Ubuntu 18.04.6 LTS
- 库版本:
torch 1.13.0+cu117 sentence_transformers 2.2.2
内容的提问来源于stack exchange,提问作者Ananda
相关产品推荐
相关产品推荐

