解决tensorflow模型加载时把GPU显存占满的问题(亲测效果显著)

本文主要是介绍解决tensorflow模型加载时把GPU显存占满的问题(亲测效果显著),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第一次用tensorflow模型进行推理。

初始状态下,显存的占用情况

在这里插入图片描述

模型加载后,电脑显存直接快拉满了,但是模型参数量并不大,这就很奇怪,究竟这是一股什么神秘的力量,竟要试图侵占我可怜的显卡宝贝

在这里插入图片描述

原因分析:安装了tensorflow-gpu后,运行程序默认是把GPU的内存全部占满的,但是正常人都不希望这样,都希望能自己掌握自己的资源,而不是任人摆布,可以这样操作。

解决代码:

import tensorflow as tf
import os# 指定使用的GPU
os.environ['CUDA_VISIBLE_DEVICES'] = "0"  # 指定使用的GPU编号,"0"表示使用第一块GPU。如果有多个GPU,可以更改为其他编号。# 配置TensorFlow使用的GPU资源
config = tf.compat.v1.ConfigProto()# 设置GPU内存分配策略
config.gpu_options.allow_growth = True  # 动态分配GPU内存。程序刚开始会少量申请显存,然后随着需求增长,逐渐增加显存的分配,避免一次性占满整个显存。
"""
好处:默认情况下,TensorFlow会尝试占满所有可用的GPU显存,
这可能会导致其他GPU任务无法运行。通过设置 allow_growth 为 True,
TensorFlow会根据实际需求动态分配显存,而不是一次性占满。
"""# 如果想设置最大GPU显存占用比例,可以使用下面的代码(可选)
# config.gpu_options.per_process_gpu_memory_fraction = 0.8  # 限制TensorFlow进程最多使用80%的GPU显存
"""
如果需要限制TensorFlow进程使用GPU显存的最大比例,
可以通过这个参数来设置。例如,设置为 0.8 表示最多使用80%的显存。
这在多任务环境中非常有用。
"""# 创建Session,并应用配置
sess = tf.compat.v1.Session(config=config)

在这里插入图片描述

适用场景

  • 多任务环境:如果一台机器上有多个GPU任务同时运行,控制每个任务的显存使用是非常重要的,这样可以避免冲突。
  • 显存有限的GPU:在显存较小的GPU上运行大型模型时,动态显存分配可以帮助防止因显存不足而导致的程序崩溃。

这篇关于解决tensorflow模型加载时把GPU显存占满的问题(亲测效果显著)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1111463

相关文章

MybatisGenerator文件生成不出对应文件的问题

《MybatisGenerator文件生成不出对应文件的问题》本文介绍了使用MybatisGenerator生成文件时遇到的问题及解决方法,主要步骤包括检查目标表是否存在、是否能连接到数据库、配置生成... 目录MyBATisGenerator 文件生成不出对应文件先在项目结构里引入“targetProje

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

numpy求解线性代数相关问题

《numpy求解线性代数相关问题》本文主要介绍了numpy求解线性代数相关问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 在numpy中有numpy.array类型和numpy.mat类型,前者是数组类型,后者是矩阵类型。数组

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

Redis缓存问题与缓存更新机制详解

《Redis缓存问题与缓存更新机制详解》本文主要介绍了缓存问题及其解决方案,包括缓存穿透、缓存击穿、缓存雪崩等问题的成因以及相应的预防和解决方法,同时,还详细探讨了缓存更新机制,包括不同情况下的缓存更... 目录一、缓存问题1.1 缓存穿透1.1.1 问题来源1.1.2 解决方案1.2 缓存击穿1.2.1

Mysql DATETIME 毫秒坑的解决

《MysqlDATETIME毫秒坑的解决》本文主要介绍了MysqlDATETIME毫秒坑的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 今天写代码突发一个诡异的 bug,代码逻辑大概如下。1. 新增退款单记录boolean save = s

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne

vue解决子组件样式覆盖问题scoped deep

《vue解决子组件样式覆盖问题scopeddeep》文章主要介绍了在Vue项目中处理全局样式和局部样式的方法,包括使用scoped属性和深度选择器(/deep/)来覆盖子组件的样式,作者建议所有组件... 目录前言scoped分析deep分析使用总结所有组件必须加scoped父组件覆盖子组件使用deep前言