tf.ConfigProto和tf.GPUOptions用法总结

2023-10-31 13:41

本文主要是介绍tf.ConfigProto和tf.GPUOptions用法总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【时间】2018.12.13

【题目】tf.ConfigProto和tf.GPUOptions用法总结

概述

tf.ConfigProto一般用在创建session的时候,用来对session进行参数配置,而tf.GPUOptions可以作为设置tf.ConfigProto时的一个参数选项,一般用于限制GPU资源的使用。

一、tf.ConfigProto

tf.ConfigProto一般用在创建session的时候,用来对session进行参数配置。

1.1 tf.ConfigProto()的参数

log_device_placement=True : 是否打印设备分配日志allow_soft_placement=True : 如果你指定的设备不存在,允许TF自动分配设备

1.2 tf.ConfigProto()使用参数的两种方法

(1)第一种实在构造config对象时直接赋值,如下:

tf.ConfigProto(log_device_placement=True,allow_soft_placement=True)

(2)第二种是先构造config对象,再对构造的config对象进行赋值,如下:

config = tf.ConfigProto()config.log_device_placement= Trueconfig.allow_soft_placement=True

PS:tf.ConfigProto()含有的部分参数(属性与方法,可使用dir(tf.ConfigProto())进行查看)如下:

1.3 让参数设置生效的方法

session = tf.Session(config=config)

PS:在Keras中使用:

from keras.backend.tensorflow_backend import set_sessionset_session(tf.Session(config=config))

二、使用tf.GPUOptions限制GPU资源的使用

参考链接:https://blog.csdn.net/dcrmg/article/details/79091941

tf.GPUOptions可以作为设置tf.ConfigProto时的一个参数选项,一般用于限制GPU资源的使用。同样有两种方法实现。

为了加快运行效率,TensorFlow在初始化时会尝试分配所有可用的GPU显存资源给自己,这在多人使用的服务器上工作就会导致GPU占用,别人无法使用GPU工作的情况。

tf提供了两种控制GPU资源使用的方法,一是让TensorFlow在运行过程中动态申请显存,需要多少就申请多少;第二种方式就是限制GPU的使用率。

2.1 动态申请显存

方法一:

config = tf.ConfigProto()config.gpu_options.allow_growth = Truesession = tf.Session(config=config)

方法二:

gpu_options=tf.GPUOptions(allow_growth = True)config=tf.ConfigProto(gpu_options=gpu_options)session = tf.Session(config=config)

2.2 限制GPU的使用率

方法一:

config = tf.ConfigProto()config.gpu_options.per_process_gpu_memory_fraction = 0.85  #占用85%显存session = tf.Session(config=config)

方法二:

gpu_options=tf.GPUOptions(per_process_gpu_memory_fraction=0.85)config=tf.ConfigProto(gpu_options=gpu_options)session = tf.Session(config=config)

【注意】当限制GPU使用率时,GPU所占的显存是一直占着的,哪怕你Ctrl+Z 终止了程序,这时你需要手动kill进程。(参考链接:https://blog.csdn.net/c20081052/article/details/82345454)具体如下:

如果你在linux终端运行深度学习python脚本文件,运行中发现占用多个GPU和内存资源,可用下面的方法解决:

(1)请先查看占用资源的进程归属方是谁,以及使用的是什么指令:

   ps -f PID号

(2)然后确认该进程可以kill掉情况下直接杀掉:

    kill -9 PID号   #注意必须加-9,否则可能杀不掉进程

 

 

 

 

 

 

这篇关于tf.ConfigProto和tf.GPUOptions用法总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

pytorch之torch.flatten()和torch.nn.Flatten()的用法

《pytorch之torch.flatten()和torch.nn.Flatten()的用法》:本文主要介绍pytorch之torch.flatten()和torch.nn.Flatten()的用... 目录torch.flatten()和torch.nn.Flatten()的用法下面举例说明总结torch

Python Faker库基本用法详解

《PythonFaker库基本用法详解》Faker是一个非常强大的库,适用于生成各种类型的伪随机数据,可以帮助开发者在测试、数据生成、或其他需要随机数据的场景中提高效率,本文给大家介绍PythonF... 目录安装基本用法主要功能示例代码语言和地区生成多条假数据自定义字段小结Faker 是一个 python

前端高级CSS用法示例详解

《前端高级CSS用法示例详解》在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交互和动态效果的关键技术之一,随着前端技术的不断发展,CSS的用法也日益丰富和高级,本文将深... 前端高级css用法在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

java之Objects.nonNull用法代码解读

《java之Objects.nonNull用法代码解读》:本文主要介绍java之Objects.nonNull用法代码,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录Java之Objects.nonwww.chinasem.cnNull用法代码Objects.nonN

JavaScript Array.from及其相关用法详解(示例演示)

《JavaScriptArray.from及其相关用法详解(示例演示)》Array.from方法是ES6引入的一个静态方法,用于从类数组对象或可迭代对象创建一个新的数组实例,本文将详细介绍Array... 目录一、Array.from 方法概述1. 方法介绍2. 示例演示二、结合实际场景的使用1. 初始化二

java常见报错及解决方案总结

《java常见报错及解决方案总结》:本文主要介绍Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常... 目录1. 语法错误 (Syntax Errors)示例 1:解决方案:2. 空指针异常 (NullPoi

一文带你了解SpringBoot中启动参数的各种用法

《一文带你了解SpringBoot中启动参数的各种用法》在使用SpringBoot开发应用时,我们通常需要根据不同的环境或特定需求调整启动参数,那么,SpringBoot提供了哪些方式来配置这些启动参... 目录一、启动参数的常见传递方式二、通过命令行参数传递启动参数三、使用 application.pro

关于@RequestParam的主要用法详解

《关于@RequestParam的主要用法详解》:本文主要介绍关于@RequestParam的主要用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 基本用法2. 默认值3. 可选参数4. 绑定到对象5. 绑定到集合或数组6. 绑定到 Map7. 处理复杂类