ModelScope像这种基于tensorflow的模型,处理完请求后显存满的,有没有像torch.cuda.empty_cache()能清除显存的方法?
在TensorFlow中,有多种方式可以清理显存:
tf.keras.backend.clear_session()
,可以清除会话中的所有资源;tf.keras.backend.get_session().close()
,可以销毁当前会话;with
语句,确保会在完成后自动关闭所有的会话和资源。此外,还有其他一些方法可以清理显存,例如重新初始化TensorFlow的图层等等
在 TensorFlow 中,可以使用 tf.keras.backend.clear_session()
来清除显存缓存:
from tensorflow.keras import backend as K
def clean_session():
K.clear_session()
请注意,这仅仅清空了 TensorFlow 的缓存,但并没有释放 GPU 内存;为释放 GPU 内存,您还需要关闭所有 TensorFlow 图形会话:
import os
os.system('taskkill /F /IM tensorboard.exe')
os.system('taskkill /F /IM tensorboard-shutdown-server.exe')
在TensorFlow中,没有直接提供类似于PyTorch的torch.cuda.empty_cache()
的函数来清除显存。不过,你可以尝试以下几种方法来释放显存:
import tensorflow as tf
# 创建会话
sess = tf.Session()
# 进行推理
...
# 关闭会话
sess.close()
# 删除变量
del variable_name
# 删除占用的显存
tf.reset_default_graph()
tf.train.Saver
和tf.train.Optimizer
,它们可以用来保存和恢复模型参数,或者进行模型优化。通过使用这些优化器,你可以将模型参数保存到磁盘上,并从磁盘加载模型参数,从而释放显存。tf.cache.Cache
或tf.cache.LRUCache
等缓存类来实现缓存机制。tf.config.experimental.VirtualMemory
来使用虚拟内存来存储大型数据。这可以帮助你更好地管理显存的使用。您试一下这个环境。
conda create -n modelscope python=3.7
source activate
conda activate modelscope
pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu113
pip install modelscope
pip install "modelscope[cv]" -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html
pip install --upgrade tensorflow-gpu==1.15 # GPU 版,此回答整理自钉群“魔搭ModelScope开发者联盟群 ①”