最近在复现Mask-RCNN时,发现训练数据集的速度非常慢,后用nvidia-smi命令查看GPU使用情况,发现GPU并未使用。问题在于TensorFlow没有与CUDA、cudnn、gcc的版本对应。如下图所示。
图片来源于官网:Build from source | TensorFlow (google.cn)
首先是CUDA和cudnn与tensorflow版本的对应
我用的服务器已经安装了多个版本的CUDA和cudnn,因此通过创建硬链接和软链接来切换CUDA和cudnn的版本,流程如下:
在.bashrc文件中添加环境变量(创建硬链接,告诉计算机到哪里找cuda)
export PATH="$PATH:/usr/local/cuda/bin"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64/"
export LIBRARY_PATH="$LIBRARY_PATH:/usr/local/cuda/lib64"
别忘了source一下,刷新环境变量。
接下来创建软链接(即指定使用哪个版本的cuda)
sudo rm -rf /usr/local/cuda # 将原来的软链接删除,如果有的话。
sudo ln -s /usr/local/cuda-8.0 /usr/local/cuda # 将cuda-8.0,链接到cuda这个文件夹上(类似于快捷方式吧)
stat cuda 查看软链接的情况
创建好了软链接,就会出现上图所示的一个cuda快捷方式。
可以回到主目录下用命令查看是否软链接成功。
nvcc -V
最后更改下gcc的版本
查看自己当前的gcc版本,查出来的版本为4.8.5
gcc -v
查看已安装的gcc版本有哪些
ls /usr/bin/gcc*
可以通过以下命令安装其他版本的gcc,比如gcc-7
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install -y gcc-7 g++-7
具体可以参考博客:(5条消息) ubuntu系统查看gcc版本及版本切换_wongHome的博客-CSDN博客_显示gcc版本
有的时候训练训不动了,是因为有些僵尸进程占了GPU的内存
通过以下命令查看僵尸进程:
fuser -v /dev/nvidia *
kill -9 <进程号> # 结束进程