我们在使用tensorflow 的时候, 有时候会在控制台终止掉正在运行的程序,但是有时候程序已经结束了,nvidia-smi也看到没有程序了,但是GPU的内存并没有释放,那么怎么解决该问题呢?
首先执行下面的命令:
fuser -v /dev/nvidia* #查找占用GPU资源的PID
1.
因为我们只有一块显卡,所以显示如下图所示:
可以看到我们的nvidia0上还有一个python 2.7的PID
然后我们执行:
kill -9 pid
1.
然后再执行nvidia-smi就可以看到内存已经被释放了
GPU 显存实施查看:
但是有时我们希望不仅知道那一固定时刻的GPU使用情况,我们希望一直掌握其动向,此时我们就希望周期性地输出,比如每 10s 就更新显示。
这时候就需要用到 watch命令,来周期性地执行nvidia-smi命令了。
了解一下watch的功能:
$ whatis watch
watch(1) - execute a program periodically, showing output fullscreen
作用:周期性执行某一命令,并将输出显示。
watch的基本用法是:
$ watch [options] command
最常用的参数是 -n, 后面指定是每多少秒来执行一次命令。
监视显存:我们设置为每 10s 显示一次显存的情况:
$ watch -n 10 nvidia-smi
查看是否使用GPU计算:
import tensorflow as tf
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
查看日志信息若包含gpu信息,就是使用了gpu。
其他方法:跑计算量大的代码,通过 nvidia-smi 命令查看gpu的内存使用量。