GPU及GPU显存查看:

在终端中打印出GPU的各种属性:

nvidia-smi

train gpu利用率 gpu利用率1_数据

如果需要实时监测GPU的状态(便于排查 GPU使用率低的原因):

watch -n 0.1 nvidia-smi

nvidia-smi 各项指标意义可参考blog1:

一般关注两个指标:利用率和显存占有率。

 

tensorflow中指定GPU及GPU显存设置:

参考blog2: 

在终端执行程序时指定GPU   

CUDA_VISIBLE_DEVICES=1   python  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 will be visible; device 1 is masked
CUDA_VISIBLE_DEVICES=" "          No GPU will be visible

在Python代码中指定GPU

import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0"

 

GPU运行Tensorflow的几点建议:

1.在运行之前先查看GPU的使用情况: 
指令:nvidia-smi 备注:查看GPU此时的使用情况 
或者 
指令:watch nvidia-smi 备注:实时返回GPU使用情况

2.指定GPU训练: 
方法一、在python程序中设置: 
代码:os.environ[‘CUDA_VISIBLE_DEVICES’] = ‘0’ 备注:使用 GPU 0 
代码:os.environ[‘CUDA_VISIBLE_DEVICES’] = ‘0,1’ 备注:使用 GPU 0,1 
方法二、在执行python程序时候: 
指令:CUDA_VISIBLE_DEVICES=2 python yourcode.py 
指令:CUDA_VISIBLE_DEVICES=0,1 python yourcode.py 
备注:‘=’的左右不允许有空格

**注:**TensorFlow会默认直接占满我们模型部署的GPU的存储资源,只允许一个小内存的程序也会占用所有GPU资源。因此有的时候我们通过nvidia-smi查看GPU状态的时候,会发现有些GPU的计算利用率很低或者计算利用率为0,但是存储被占满了,而这个时候其他人也不能使用这块GPU。但是现在公司的问题是模型多,卡不够用,所有只能“文明”使用GPU,如果设置为允许动态增长的话,这样这个GPU没有被占的存储还可以被其他人使用。

3.两种限定GPU占用量的方法: 
方法一、设置定量的GPU显存使用量: 
config = tf.ConfigProto() 
config.gpu_options.per_process_gpu_memory_fraction = 0.4 # 占用GPU40%的显存 
session = tf.Session(config=config) 
方法二、设置最小的GPU显存使用量,动态申请显存:(建议) 
config = tf.ConfigProto() 
config.gpu_options.allow_growth = True 
session = tf.Session(config=config)

注:还有一个问题就是计算资源闲置,发现计算资源闲置的一个很简单的方法就是使用命令nvidia-smi查看GPU的使用状态,只要GPU的计算时间使用率没有达到80%-100%,,都是对GPU的极大浪费。

4.将数据的处理使用多线程的queue在CPU上进行,使得GPU随时都有充足的数据使用,更专注于训练,这样可以大幅度提升模型的训练速度。 
with tf.device(‘/cpu:0’): 
# function to get and process images or data. 
distorted_inputs = load_and_distort_images()
————————————————