You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从内存中卸载HuggingFace Sentence Transformers模型?

如何卸载LangChain加载的Sentence Transformers模型并释放内存?

问题场景

我使用以下LangChain脚本加载Sentence Transformers模型:

from langchain_community.embeddings import HuggingFaceEmbeddings

embedding_function = HuggingFaceEmbeddings(
    model_name="sentence-transformers/all-MiniLM-L12-v2", model_kwargs={'device': 'cpu'})

使用完毕后希望删除该模型并从内存中卸载,但常规的Python删除流程无法生效。

当前环境版本

python==3.11.7
langchain==0.1.16
langchain_community==0.0.32
langchain_core==0.1.42
sentence-transformers==2.6.1

已尝试的无效操作

import gc
del embedding_function
gc.collect()

通过Windows任务管理器观察:移除加载模型的代码行时,终端内存占用低于50MB;添加加载代码并执行上述删除操作后,内存仍高于400MB。

解决方案

LangChain的HuggingFaceEmbeddings内部持有模型(client属性)和分词器(tokenizer属性)的直接引用,单纯删除外层对象无法彻底释放内存,需要先手动清理这些内部引用,再执行垃圾回收:

方法一:显式删除内部引用

# 清除模型实例引用
if hasattr(embedding_function, 'client'):
    del embedding_function.client
# 清除分词器实例引用
if hasattr(embedding_function, 'tokenizer'):
    del embedding_function.tokenizer

# 删除外层对象并触发垃圾回收
del embedding_function
import gc
gc.collect()

方法二:置空内部引用(更简洁)

# 置空内部模型和分词器引用
embedding_function.client = None
embedding_function.tokenizer = None

# 删除对象并回收内存
del embedding_function
gc.collect()

原理说明

Sentence Transformers的模型和分词器实例被封装在HuggingFaceEmbeddings的内部属性中,可能存在模块缓存或其他隐式引用导致内存无法自动释放。先手动清除/置空这些内部引用,再触发Python的垃圾回收机制,才能彻底释放模型占用的内存。

内容的提问来源于stack exchange,提问作者Znium

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 11:20:59