tensorflow释放显存

news/2024/11/24 13:22:54/

经过测试,通过sess.close释放资源并不能释放显存,导致重新建立一个session分配资源时失败。

stackoverflow上提到了两种方法:

1.利用numba库(需要安装numba库)

背后原理:
Tensorflow只是为GPU分配显存,而CUDA负责管理GPU内存。
如果在用sess.close()清除了所有图形后,CUDA以某种方式拒绝释放GPU显存,那么您可以使用cuda库直接控制CUDA以清除GPU显存。

from numba import cudadef train():...train()
cuda.select_device(0) # 选择GPU设备
cuda.close() # 释放GPU资源

缺点:
以这种方式清除GPU显存会存在问题,再次开启session时会失败,原因貌似是cuda.close破坏了tensorflow开启session的环境。

from numba import cudadef train():...train()
cuda.select_device(0) # 选择GPU设备
cuda.close() # 释放GPU资源
train() # 失败(抛出异常)

2.利用multiprocessing的Process

背后原理:
进程结束后会自动释放和进程相关的资源,这就好比模型训练完成退出程序后会自动释放显存。

from multiprocessing import Processdef train():...if __name__'__main__': # 在windows必须在这句话下面开启多进程p = Process(target=train)p.start()p.join() # 进程结束后,GPU显存会自动释放p = Process(target=train) # 重新训练p.start()p.join()

优点:
相比第一种方法,可以在释放GPU显存后重新开启session。

参考资料:
stackoverflow


http://www.ppmy.cn/news/464702.html

相关文章

GPU 显存 - Caffe 内存优化

Caffe - 显存优化 1. Caffe - memory multiloading 功能 原文 - Squeezing Memory out of Caffe Caffe 的一个优化版本 - caffe-yjxiong. 测试了一下, ResNet101 相对于官方 caffe, 能够明显节省显存占用, batchsize 可以增加很多. 显存优化的 Caffe 主要实现的功能: memor…

GPU程序缓存(GPU Program Caching)

GPU程序缓存 翻译文章: GPU Program Caching 总览 / 为什么 因为有一个沙盒, 每一次加载页面, 我们都会转化, 编译和链接它的GPU着色器. 当然不是每一个页面都需要着色器, 合成器使用了一些着色器, 这些着色器需要为tab选项卡重新渲染. 我们应该去缓存一些之前的缓存程序, 并在…

关于CPU cache

1、cache基础 简单来说&#xff0c;cache快&#xff0c;内存慢&#xff0c;硬盘更慢。 L1速度> L2速度> L3速度> RAM L1容量< L2容量< L3容量< RAM L1 Cache也被划分成指令cachaL1i (i for instruction)和数据cacheL1d (d for data)两种专门用途的缓存。…

src/storage/storage.cc: Compile with USE_CUDA=1 to enable GPU usage【MXNET GPU版】

【环境】Win10 一、想在GPU上运行MXNET&#xff0c;报错如下&#xff1a; MXNetError: [23:23:48] src/storage/storage.cc:xxx: Compile with USE_CUDA1 to enable GPU usage【原因】安装的是cpu版的mxnet&#xff0c;不是gpu版的 【解决】卸载原来cpu版本的mxnet&#xff…

Locality-Driven Dynamic GPU Cache Bypassing

文章目录 abstractintroduction问题背景内存请求处理 GPU缓存效率分析过滤器的设计decoupled 设计Decoupled L1D:operationSM Dueling 实验性能评估 abstract 本篇文章主要介绍了一个缓存优化的方法&#xff0c;这个方法专门对大吞吐量的架构&#xff0c;比如GPU应用&#xff…

SpringBoot中集成Redis

目标 在原有SpringBoot项目中&#xff0c;集成Redis&#xff0c;并实现Dao层&#xff0c;Service层&#xff0c;Controller层。 pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</…

DTC143ZM理解介绍(含电路应用)

前人种树&#xff0c;后人乘凉&#xff1b;创造不易&#xff0c;请勿迁移~ author daisy.skye的博客_CSDN博客-嵌入式,Qt,Linux领域博主 daisy.skye的博客_CSDN博客-嵌入式,Qt,Linux领域博主daisy.skye擅长嵌入式,Qt,Linux,等方面的知识https://blog.csdn.net/qq_40715266?t…

MTU是什么?

最大传输单元&#xff08;Maximum Transmission Unit&#xff0c;MTU&#xff09; 是指一种通信协议的某一层上面所能通过的最大数据包大小&#xff08;以字节为单位&#xff09;。最大传输单元这个参数通常与通信接口有关&#xff08;网络接口卡、串口等&#xff09; 一个帧中…