TensorFlow设置GPU运行显卡能设置虚拟内存内存问题

tensorflow gpu版本运行时怎么知道有没有调用gpu以及cuda加速_百度知道
tensorflow gpu版本运行时怎么知道有没有调用gpu以及cuda加速
我有更好的答案
可以下个显卡测温工具,看看运行的时候显卡占用率是不是升高。
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。代码的世界,即为完美的世界
tensorflow中指定GPU及GPU显存设置
查看机器上GPU情况
命令: nvidia-smi
功能:显示机器上gpu的情况
命令: nvidia-smi -l
功能:定时更新显示机器上gpu的情况
其中左上侧有0、1、2、3的编号,表示GPU的编号,在后面指定GPU时需要使用这个编号。
在终端执行程序时指定GPU
CUDA_VISIBLE_DEVICES=1
your_file.py
这样在跑你的网络之前,告诉程序只能看到1号GPU,其他的GPU它不可见
可用的形式如下:
CUDA_VISIBLE_DEVICES=1
Only device 1 will be seen
CUDA_VISIBLE_DEVICES=0,1
Devices 0 and 1 will be visible
CUDA_VISIBLE_DEVICES="0,1"
Same as above, quotation marks are optional
CUDA_VISIBLE_DEVICES=0,2,3
Devices 0, 2, 3 device 1 is maskedCUDA_VISIBLE_DEVICES=""
No GPU will be visible
在Python代码中指定GPU
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
设置定量的GPU使用量
config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.9 # 占用GPU90%的显存
session = tf.Session(config=config)
设置最小的GPU使用量
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
session = tf.Session(config=config)
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!希望多贡献一些技术博文
【Ubuntu-Tensorflow】GPU设置及显存资源分配
最近笔者在做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程序。
注意: 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运行
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的时候,出现显存占用情况,切优先级较低的设备在后续的程序运行过程中,显存占有并未增加。
参考博客:
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!tensorflow及GPU加速在win10下的安装教程
本文起源于谷歌2016年11月底发的一篇blog:
https://developers.googleblog.com/2016/11/tensorflow-0-12-adds-support-for-windows.html
宣布tensorflow正式支持windows且在其上运行NVIDIA的GPU加速。今早成功在自己的win10上安装tensorflow,下面讲一下安装的整个流程:
BTW,我的电脑显卡配置:
NVIDIA GeForce 940MX
1.安装Anaconda
由于xx(编译器什么的,没看清楚)原因,完整的tensorflow只支持python3.5,(使用Docker的情况除外)。所以Anaconda一般下载python3.5版本。
资源在这里,选对自己电脑对应的系统即可。下载完以后点开安装,跟着安装指导一步步走下去,最好选择默认路径C盘,可以省去不必要的麻烦。(我第一次放在E盘,出了点问题)。
3.下载 - CUDA for Deep Neural Networks
这其实就是CUDA的深度神经网络支持,下载下来以后解压出来一个cuda文件夹,放到你想放的位置,然后把这个cuda文件夹下的bin目录地址放到PATH里。
如果不在这里配置环境变量的话,结束安装流程以后,import tensorflow时会出一点问题
附上当时参考的网站:
http://stackoverflow.com/questions//tensorflow-on-windows-couldnt-open-cuda-library-cudnn64-5-dll
4.通过Pip安装tensorflow
谷歌官网上说的比较清楚,如何通过pip安装tensorflow的CPU版本和GPU版本。但是按照官网上的操作会出现一些问题。
举例:假如你打算安装GPU版本,则只需要在命令行输入如下命令:
C:\& pip install --upgrade https://storage.googleapis.com/tensorflow/windows/gpu/tensorflow_gpu-0.12.1-cp35-cp35m-win_amd64.whl
C:\& pip install --upgrade https://storage.googleapis.com/tensorflow/windows/gpu/tensorflow_gpu-0.12.1-cp35-cp35m-win_amd64.whl
但如果只输入这些,会报出
C:\& pip install --upgrade https://storage.googleapis.com/tensorflow/windows/gpu/tensorflow_gpu-0.12.1-cp35-cp35m-win_amd64.whl
cannot remove nonexistent setuptools的错误。
正确的做法:
C:\& pip install --upgrade https://storage.googleapis.com/tensorflow/windows/gpu/tensorflow_gpu-0.12.1-cp35-cp35m-win_amd64.whl
pip install --upgrade --ignore-installed https://storage.googleapis.com/tensorflow/windows/gpu/tensorflow-0.12.0rc0-cp35-cp35m-win_amd64.whl
一定要加上‘--ignore-installed’。
所以第四步总的来说就是在你的命令行里输入上面的代码。
5.在命令行里试运行:
可以看到所有库都加载成功,没有第三步里出现的问题。
C:\& pip install --upgrade https://storage.googleapis.com/tensorflow/windows/gpu/tensorflow_gpu-0.12.1-cp35-cp35m-win_amd64.whl
C:\& pip install --upgrade https://storage.googleapis.com/tensorflow/windows/gpu/tensorflow_gpu-0.12.1-cp35-cp35m-win_amd64.whl
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!学界| 阿里NIPS 2017 Workshop论文:基于TensorFlow的深度模型训练GPU显存优化学界| 阿里NIPS 2017 Workshop论文:基于TensorFlow的深度模型训练GPU显存优化机器之心百家号 选自 arXiv 作者:孟晨、孙敏敏、杨军、邱明辉、顾扬 机器之心编译 参与: 路雪、刘晓坤 NIPS 2017 在美国长滩举办,场面非常热烈。阿里巴巴一篇介绍深度模型训练 GPU 显存优化的论文《Training Deeper Models by GPU Memory Optimization on TensorFlow》将在 NIPS 2017 ML Systems Workshop 中做口头报告。这篇论文聚焦特征图,提出两种方法减少深度神经网络训练过程中的显存消耗,并且把这些方法的实现无缝整合到 TensorFlow 中,克服了 TensorFlow 训练大模型时无法有效优化显存的缺点。 近期深度学习在不同应用中发挥的作用越来越重要。训练深度学习模型的必要逻辑包括适合 GPU 的并行线性代数计算。但是,由于物理限制,GPU 的设备内存(即显存)通常比主机内存小。最新的高端 NVIDIA GPU P100 具备 12–16 GB 的显存,而一个 CPU 服务器有 128GB 的主机内存。然而,深度学习模型的趋势是「更深更宽」的架构。例如,ResNet [6] 包含多达 1001 个神经元层,神经网络机器翻译(NMT)模型包含 8 个使用注意力机制的层 [7][8],且 NMT 模型中的大部分的单个层是按顺序水平循环展开的,难以避免地带来大量显存消耗。 简言之,有限的 GPU 显存与不断增长的模型复杂度之间的差距使显存优化成为必然。下面将介绍深度学习训练流程中 GPU 显存使用的主要组成。 特征图(feature map)。对于深度学习模型,特征图是一个层在前向传输中生成的中间输出结果,且在后向传输的梯度计算中作为输入。图 1 是 ResNet-50 在 ImageNet 数据集上进行一次小批量训练迭代的 GPU 显存占用曲线。随着特征图的不断累积,曲线到达最高点。特征图的大小通常由批尺寸(batch size)和模型架构决定(如 CNN 架构的卷积步幅大小、输出通道数量;RNN 架构的门数量、时间步长和隐层大小)。不再需要作为输入的特征图占用的显存将会被释放,导致图 1 中显存占用曲线的下降。对于复杂的模型训练,用户必须通过调整批尺寸,甚至重新设计模型架构来避免「内存不足」的问题。尽管在分布式训练的情况下 [9],训练任务可以分配到多个设备上来缓解内存不足的问题,但是这也导致了额外的通信开销。设备的带宽限制也可能显著拖慢训练过程。 图 1:ResNet-50 的显存占用在一个训练步中的变化曲线。横轴代表分配/释放次数,纵轴代表当前显存占用的总比特数。 权重。与特征图相比,权重占用内存相对较少 [11]。在这篇论文中,权重作为 GPU 内存中的持久内存,只有整个训练任务完成后才可以被释放。 临时显存(Temporary memory)。一些算法(如基于 Fast-Fourier-Transform(FFT)的卷积算法)需要大量的额外显存。这些显存占用是暂时的,在计算结束后立即得到释放。临时显存的大小可以通过在 GPU 软件库(如 cuDNN)中列举每个算法来自动调整,因此可以被忽略。 很明显,特征图是 GPU 显存使用的主要组成部分。论文作者聚焦特征图,提出了两种方法来解决 GPU 显存限制问题,即通用的「swap-out/in」方法以及适用于 Seq2Seq 模型的内存高效注意力层。所有这些优化都基于 TensorFlow [13]。TensorFlow 具备内置内存分配器,实现了「best-fit with coalescing」的算法。该分配器旨在通过 coalescing 支持碎片整理(de-fragmentation)。但是,它的内置内存管理策略未考虑大模型训练时的显存优化。 该论文的贡献如下。聚焦于特征图,提出两种方法减少深度神经网络训练过程中的 GPU 显存消耗。基于数据流图的「swap-out/in」方法使用主机内存作为更大的内存池,从而放宽 GPU 显存上限的限制;而内存高效的注意力层可用来优化显存消耗量大的 Seq2Seq 模型。这些方法的实现被无缝整合到 TensorFlow 中,且可透明地应用于所有模型,无需对现有模型架构的描述作任何改变。 论文: Training Deeper Models by GPU Memory Optimization on TensorFlow 作者:孟晨、孙敏敏、杨军、邱明辉、顾扬 论文地址:https://github.com/LearningSys/nips17/blob/master/papers/18-CameraReadySubmission%5CMLSYS_camera.pdf 摘要: 随着大数据时代的到来、GPGPU 的获取成本降低以及神经网络建模技术的进步,在 GPU 上训练深度学习模型变得越来越流行。然而,由于深度学习模型的内在复杂性和现代 GPU 的显存资源限制,训练深度模型仍然是一个困难的任务,尤其是当模型大小对于单个 GPU 而言太大的时候。在这篇论文中,我们提出了一种基于通用数据流图的 GPU 显存优化策略,即「swap-out/in」,将主机内存当做一个更大的内存池来克服 GPU 的内存限制。同时,为了优化内存消耗大的 Seq2Seq 模型,我们还提出了专用的优化策略。我们将这些策略无缝整合到 TensorFlow 中,且优化不会造成准确率的损失。我们在大量的实验中观察到了显著的显存使用降低。给定一个固定的模型和系统配置,最大训练批尺寸可以增加 2 到 30 倍。 图 2:引用计数(reference count)。 图 3:swap out/in 优化的原子操作(Atomic operation)。删除从节点 e 到节点 b 的引用边,并添加了红色和蓝色的节点和边。 图 4:注意力操作(Attention operation)优化。d 指梯度。图左未经优化,图右经过了显存优化。 表 1:对 swap out/in 的评估。GPU 的显存上限是 12GB。 表 2:对显存高效序列模型的评估。
本文为机器之心编译, 转载请联系本公众号获得授权 。 ------------------------------------------------ 加入机器之心(全职记者/实习生): 投稿或寻求报道: 广告&商务合作:本文由百家号作者上传并发布,百家号仅提供信息发布平台。文章仅代表作者个人观点,不代表百度立场。未经作者许可,不得转载。机器之心百家号最近更新:简介:专业的人工智能媒体和产业服务平台作者最新文章相关文章

我要回帖

更多关于 显卡能设置虚拟内存 的文章

 

随机推荐