【Ubuntu-Tensorflow】GPU设置及显存资源分配

2023-05-16

最近笔者在做GPU显存资源分配的研究,发现在tf中gpu一些实用的方法和接口,共享出来,供大家参考学习,如有问题,欢迎留言讨论。

1.运行程序时,控制台设置GPU运行参数,占用显存全部资源

$ CUDA_VISIBLE_DEVICES=0 python predict.py # 只使用gpu:0设备运行predict.py程序。
这里写图片描述

$ CUDA_VISIBLE_DEVICES=1 python predict.py # 只使用gpu:1设备运行predict.py程序。
这里写图片描述

$ CUDA_VISIBLE_DEVICES=0,1 python predict.py # 只使用gpu:0,1设备运行predict.py程序。
这里写图片描述

【PS】2017/8/23
注意: CUDA_VISIBLE_DEVICES=0,1 是存在设备的优先级的,[0,1]和[1,0]排列的设备是不同的,排在前面的设备优先级高,运行程序的时候会优先使用。如[0,1]则先使用0号设备的gpu资源,[1,0]则先试用1号设备的gpu资源

以上三个指令运行predict.py程序,都会占用GPU显存的全部资源。

2.在tensorflow代码中with tf.device(‘/gpu:x’)

在tensorflow代码中with tf.device(‘/gpu:0’)
在tensorflow代码中with tf.device(‘/gpu:1’)
在tensorflow代码中with tf.device(‘/gpu:0,1’)

上面三种设定效果与1中控制台输入CUDA_VISIABLE_DEVICES=x 的效果相同,运行程序,都会占用全部资源

3.在程序中,设置GPU设备的环境变量

os.environ[“CUDA_DEVICE_ORDER”] = “PCI_BUS_ID” # 按照PCI_BUS_ID顺序从0开始排列GPU设备
os.environ[“CUDA_VISIBLE_DEVICES”] = “0” #设置当前使用的GPU设备仅为0号设备
os.environ[“CUDA_VISIBLE_DEVICES”] = “1” #设置当前使用的GPU设备仅为1号设备
os.environ[“CUDA_VISIBLE_DEVICES”] = “0,1” #设置当前使用的GPU设备为0,1号两个设备

设定的效果与1和2相同。

4.session初始化时设定GPU_Config

gpuConfig = tf.ConfigProto()
gpuConfig.allow_soft_placement = config.getboolean(‘gpu’, ‘allow_soft_placement’)#设置为True,当GPU不存在或者程序中出现GPU不能运行的代码时,自动切换到CPU运行
【PS】2017/8/24
GPU切换CPU的条件
1.运算无法在GPU上执行
2.没有GPU资源(指定GPU device num 错误)
3.运算输入包含对CPU计算结果的引用
gpuConfig.gpu_options.allow_growth = config.getboolean(‘gpu’, ‘allow_growth’)#设置为True,程序运行时,会根据程序所需GPU显存情况,分配最小的资源
gpuConfig.gpu_options.per_process_gpu_memory_fraction = config.getfloat(‘gpu’, ‘rate’)#程序运行的时,所需的GPU显存资源最大不允许超过rate的设定值

【PS】当allow_growth和per_process_gpu_memory_fraction 同时设定的时候,两者为或的关系

GPU_config = utils.GPU_config()

sess = tf.Session(config=GPU_config) #设定一个自定义GPU配置的session

【PS】上面的自定义GPU_config只会指定GPU内存分配情况,而不会选定GPU具体的device_id,而如何指定GPU device_id还是要使用1,2,3指出的方法

下面给出一个采用CUDA_VISIBLE_DEVICES=0,1两个gpu设备运行一段程序的显存占用情况,从下面这个运行结果来看,按照per_process_gpu_memory_fraction 自动占用最小分配显存的情况运行程序,两个GPU的资源并不是均匀分配,0号设备占用资源较多.
这里写图片描述
图1 CUDA_VISIBLE_DEVICES=0,1 python predict.py

下面给出一个采用CUDA_VISIBLE_DEVICES=1,0两个gpu设备运行一段程序的显存占用情况,从下面这个运行结果来看,按照per_process_gpu_memory_fraction 自动占用最小分配显存的情况运行程序,两个GPU的资源并不是均匀分配,1号设备占用资源较多.

这里写图片描述
图2 CUDA_VISIBLE_DEVICES=1,0 python predict.py

以上两幅图反映了,根据gpu设备号的排列,存在使用的优先级问题,排在前面的优先级较高。

如果认真观察在运行程序的时候的两个gpu显存的变化,就会发现,程序运行其实只占用了优先级较高的设备了,这是因为1个gpu设备已经满足程序运行的需要了,而对于第二个设备也占用了显存资源,仔细发现,你能够看到,两个gpu在程序进行初始化的,并未进行session run的时候,出现显存占用情况,切优先级较低的设备在后续的程序运行过程中,显存占有并未增加。

参考博客:tensorflow gpu使用说明

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Ubuntu-Tensorflow】GPU设置及显存资源分配 的相关文章

随机推荐

  • Kubernetes 1.20:最优秀、美妙、酷的版本

    你填了吗 xff1f 2020年CNCF中国云原生问卷 问卷链接 xff08 https www wjx cn jq 97146486 aspx xff09 作者 xff1a Kubernetes 1 20发布团队 我们很高兴地宣布Kube
  • C++常见问题总结

    C 43 43 问题总结模块 编程之路总是路漫漫其修远兮 xff0c 吾将上下而求索 1 no matching function for call to 借用CSDN某位的文章 xff0c 成功修改错误 大概截图如下 源代码 xff1a
  • 字符串函数strchr 、 strrchr 、strrstr的实现

    include lt stdio h gt include lt stdlib h gt include lt assert h gt char my strchr const char dst char c 由于我们只是查找 xff0c
  • cadence常见问题一

    1 在画元件库时 xff0c 双击编辑一个引脚 xff0c 编辑好了点了OK xff0c 引脚就从左边跑到了右边 xff1f xff1f xff1f 居然不是固定的 xff1f 我在user properties设置下引脚名字可视化 xff
  • keil,stm32,watch窗口,正确的串口数据后面还出现ASCII字符?

    这个问题不知道如何解决 xff0c 串口调试助手数据显示都是准确的 xff0c watch窗口看就不正确 不知道正确数据后面的是什么 xff1f
  • MS5611气压计数据测试报告

    气压计测得气压和温度值为模拟量 xff0c ms5611气压计会自动将模拟量转换成数字量 xff0c 对于不同的精度 xff0c 转换时间也不相同 本测试选用的精度为最高的OSR 61 4096 xff0c 如下表所示 xff0c 转换时间
  • Fatfs文件系统,f_open函数返回值为FR_DISK_ERR解决方法

    最近在操作TF卡 xff0c 芯片stm32f103c8t6 xff0c 编译环境KEIL xff0c 金士顿32G卡 xff0c 用Fatfs文件系统向卡中写入数据 出现的问题 xff1a f open函数返回值为FR DISK ERR
  • Fatfs文件系统向文件写内容出现f_write返回值为1的问题

    f write返回值为1 xff0c 则就是FR DISK ERR 1 A hard error occurred in the low level disk I O layer 低级磁盘I O层中发生硬错误 问题解决方式 xff1a 1
  • vl53l1x激光测距讲解

    使用模块 ATK VL53L0X激光测距模块或者淘宝其他模块 通信方式 xff1a IIC xff0c 接口SHUT用于开机启动时序中 xff0c int是中断模式中的引脚 xff08 触发中断 xff09 参考资料 xff1a https
  • 如何完成一篇发明专利

    专利的组成部分 xff1a 说明书摘要摘要附图权利要求书说明书说明书附图 参考的文献有 专利法 专利审查指南 xff0c 大致写完一篇发明专利需要半个月的时间 xff1b 参考网址 xff0c http www soopat com htt
  • cmd python 缩进 3个点

    问题描述 xff1a indentationerror expected an indented block for 语句和if语句都会遇到 xff0c 解决方法是for 语句和if语句冒号后 xff0c 按enter切换下一行 xff0c
  • 陀螺仪和加速度计MPU6050的单位换算方法

    对于四轴的初学者 xff0c 可能无法理解四轴源代码里面陀螺仪和加速度数据的那些数学转换方法 下面我们来具体描述下这些转换方法 我们首先来看陀螺仪数据 在MPU6050的手册里面 xff0c 提供了一个陀螺仪数据表如下 xff1a 在表格里
  • 【Final Project】Kitti的双目视觉里程计(1)

    1 从CMake文件了解整体结构 xff08 1 xff09 前置工作 0 xff09 文件结构 app CMakeLists txt run kitti stereo cpp CMakeLists txt cmake modules Fi
  • 觅香

    立于浮华之世 奏响天籁之音
  • 多旋翼无人机推荐书

    惯性仪器测试与数据分析 惯性导航 xff08 秦永元 xff09 先进 PID 控制 MATLAB 仿真 多旋翼飞行器设计与控制
  • 飞控PID详解

    串级PID xff1a 单极PID适合线性系统 xff0c 当输出量和被控制量呈线性关系时单极PID能获得较好的效果 xff0c 但是四轴不是线性系统 xff0c 现代学者认为 xff0c 四轴通常可以简化为一个二阶阻尼系统 为什么四轴不是
  • Keil:ST-LINK USB communication error

    error flash download failed target dll has been cancelled 1 USB口的问题 xff1a USB供电不好 xff0c 或则USB驱动程序或ST Link驱动程序有问题 我的解决方案就
  • Cadence OrCAD BOM如何输出封装信息

    Cadence OrCAD 如何输出带封装信息的BOM 1 选中DSN文件 xff0c 打开Tools菜单中 选择Bill of materials选项 2 Bill of materials对话框设置如下 3 ORCAD输出的BOM表是文
  • 随机排列算法及《算法导论》5.3节习题解答

    随机排列算法及 算法导论 5 3节习题解答 算法导论 介绍了两种随机排列数组的算法 第一种算法是为数组的每个元素A i 赋一个随机的优先级P i xff0c 然后依据优先级对数组A中的元素进行排序 例如 xff0c 如果初始数组A 61 1
  • 【Ubuntu-Tensorflow】GPU设置及显存资源分配

    最近笔者在做GPU显存资源分配的研究 xff0c 发现在tf中gpu一些实用的方法和接口 xff0c 共享出来 xff0c 供大家参考学习 xff0c 如有问题 xff0c 欢迎留言讨论 1 运行程序时 xff0c 控制台设置GPU运行参数