我已经在我的ubuntu 16.04中安装了tensorflow,使用的是ubuntu内置的apt cuda安装。
现在我的问题是,我如何测试tensorflow是否真的使用gpu?我有一个gtx 960m gpu。当我导入tensorflow时,这是输出
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcublas.so locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcudnn.so locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcufft.so locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcurand.so locally
这个输出是否足够检查tensorflow是否使用gpu ?
好的,首先从终端启动一个ipython shell,然后导入TensorFlow:
$ ipython --pylab
Python 3.6.5 |Anaconda custom (64-bit)| (default, Apr 29 2018, 16:14:56)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.4.0 -- An enhanced Interactive Python. Type '?' for help.
Using matplotlib backend: Qt5Agg
In [1]: import tensorflow as tf
现在,我们可以在控制台中使用以下命令查看GPU内存的使用情况:
# realtime update for every 2s
$ watch -n 2 nvidia-smi
因为我们只导入了TensorFlow,但还没有使用任何GPU,所以使用统计数据将是:
注意GPU内存使用非常少(~ 700MB);有时GPU内存使用甚至可能低至0 MB。
现在,让我们在代码中加载GPU。如tf文档所示,请执行:
In [2]: sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
现在,手表的统计数据应该显示一个更新的GPU使用内存如下:
现在观察一下我们在ipython shell中的Python进程是如何使用大约7 GB的GPU内存的。
附注:你可以在代码运行时继续观察这些统计数据,看看随着时间的推移GPU的使用有多激烈。
Tensorflow 2.1
一个简单的计算,可以用nvidia-smi验证GPU上的内存使用情况。
import tensorflow as tf
c1 = []
n = 10
def matpow(M, n):
if n < 1: #Abstract cases where n < 1
return M
else:
return tf.matmul(M, matpow(M, n-1))
with tf.device('/gpu:0'):
a = tf.Variable(tf.random.uniform(shape=(10000, 10000)), name="a")
b = tf.Variable(tf.random.uniform(shape=(10000, 10000)), name="b")
c1.append(matpow(a, n))
c1.append(matpow(b, n))