安装nvidia driver
查看本机显卡
1
lspci | grep -i VGA
终端输出显卡名称,现在电脑一般都有集显+独显2块显卡,若都是nvidia公司的,后续如果安装openGL就不会冲突,因为openGL只支持nvidia的显卡,其他公司的会被openGL安装覆盖。我这里是intel集显,所以安装cuda的时候就不能安装openGL.
查看本机nvidia GPU型号
1
lspci | grep -i nvidia
到官网official nvidia driver下载对应自己系统版本和GPU型号的driver,cuda和nvidia driver的对应关系可以参考cuda vs nvidia-driver。我这里下载的GeForce GTX 1060,linux 64bit,game ready版本的driver。在真实安装之前还需要禁用系统现有的driver。
禁用nouveau driver
nouveau是ubuntu16.04默认安装的第三方开源驱动,安装cuda会跟nouveau冲突,需要事先禁掉,运行命令
lsmod | grep nouveau
后需要没有任何输出就代表禁掉了。具体禁用方法如下:在/etc/modprobe.d中创建文件blacklist-nouveau.conf,在文件中添加以下内容
1
2blacklist nouveau
options nouveau modeset=0命令行下执行
sudo update-initramfs –u
,然后在执行lsmod | grep nouveau
,若无内容输出,则禁用成功,若仍有内容输出,请检查操作,并重复上述操作。卸载已有nvidia driver
可能本机上已安装过nvidia driver,但是安装更高版本的cuda需要安装更高版本的nvidia driver,查看系统是否已安装的nvidia driver
1
2sudo dpkg --list | grep nvidia-* # dpkg安装的
sudo apt list | grep nvidia-* # apt安装的如果包含nvidia-*开头的一系列文件则说明系统已安装过nvidia driver,执行以下命令下载已有驱动
1
2sudo dpkg purge nvidia-* # dpkg或.run安装的
sudo /usr/bin/nvidia-uninstall # cuda打包安装的或者dpkg或.run安装的(建议)正式安装nvidia driver
ctrl+alt+f1
进入文字界面(ctrl+alt+f7
回到图形桌面),执行以下命令关闭图形界面1
sudo service lightdm stop
进入到nvidia driver runfile所在目录执行
1
2chmod a+x NVIDIA-*.run
./NVIDIA-*.run --no-opengl-files # 务必加上--no-opengl-files,否则安装过后将处于登录界面而无法进入桌面参数解释:
–no-opengl-files
:表示只安装驱动文件,不安装OpenGL文件。这个参数不可省略,否则会导致登陆界面死循环,英语一般称为”login loop”或者”stuck in login”。–no-x-check
:表示安装驱动时不检查X服务,非必需。–no-nouveau-check
:表示安装驱动时不检查nouveau,非必需。-Z, --disable-nouveau
:禁用nouveau。此参数非必需,因为之前已经手动禁用了nouveau(建议手动禁用)。
-A
:查看更多高级选项。
必选参数解释:因为NVIDIA的驱动默认会安装OpenGL,而Ubuntu的内核本身也有OpenGL、且与GUI显示息息相关,一旦NVIDIA的驱动覆写了OpenGL,在GUI需要动态链接OpenGL库的时候就引起问题。提示安装基本上都是accept,yes,当提示你nvidia-xconfig时,就视自己的电脑情况而定,如果电脑是双显卡(双独显、集显和独显)就选择不安装,如果只有一个显卡就选择安装。我的电脑是intel集显+nvidai独显,所以拒绝安装nvidia-xconfig。
安装cuda10
在官网nvidia cuda downloads下载对应版本的cuda,然后根据自己硬件和系统选择合适的cuda进行安装,我这里下载的cuda10,下载选项如下
下载好之后进入到所在目录进行安装
1 | chmod a+x cuda-*.run |
安装过程中要借用/tmp目录,如果/tmp目录空间不足可以用—tmpdir指定一个tmp目录如上所示。安装过程中会询问你安装各种各样的东西,除了cuda toolkit,其它的都不需要安装,安装路径自己确定也可以保持默认,确认建立软连接到/usr/local/cuda。如果有补丁patch,则在安装完主模块之后再安装patch,方法一致。
安装cudnn7
在官网nvidia cudnn downloads下载对应cuda版本的cudnn,cudnn下载要求必须登录账户才可以,我这里下载最新的cuDNN v7.6.3 for cuda 10 .0,下载好之后解压,然后将其库文件copy到cuda中
1 | cp CUDNN_HOME/include/cudnn.h CUDA_HOME/include |
ldconfig要求.so文件是软链接,所以必须ln -sf之后再执行ldconfig上面命令中的CUDNN_HOME和CUDA_HOME分别是cudnn和cuda安装目录,安装好之后配置环境~/.bashrc
1 | # CUDA |
source ~/.bashrc之后,执行nvcc -V
查看cuda版本,测试cuda是否已可用
1 | cd CUDA_HOME/samples/1_Utilities/deviceQuery |
如果最后显示pass则表明cuda安装成功,否则不可用
源码编译安装tensorflow1.14
安装tensorflow之前查看cuda和cudnn版本号以安装相匹配版本的tensorflow
1 | 查看cuda版本 |
git clone tensorflow的官方仓库
1 | git clone https://github.com/tensorflow/tensorflow.git |
基于tag(版本)创建分支
1 | git tag # 查看分支 |
使用python3.6安装,tensorflow的源码编译安装还需要使用google的一款编译器bazel,具体安装教程以及tensoflow版本与cuda,cudnn,bazel的版本匹配请参考官网的tensorflow install.
Caution:这里记录一下我安装过程中出现的几个问题及经验,在正式bazel编译之前执行./configure
进行配置,配置过程中建议使用gcc而不是clang,这样编译过程中不容易出错,然后配置过程中可能会报以下错误
1 | Traceback (most recent call last): |
这个问题可以参考github issue: find_cuda进行解决,具体做法:在third_party/gpus/find_cuda_config.py文件中找到match = pattern.match(line.decode(“ascii”)),并将其修改为match = pattern.match(line.decode(sys.stdin.encoding))即可,重新执行./configure
就不会再报错了。
google提供了tensorflow多标签的docker镜像,使用docker容器安装使用tensorflow是最便捷且安全的,用户可以在tensorflow多版本之间自由切换,在服务器上使用也不用再受权限问题困扰了,而且最新的docker 19.03已经原生支持容器使用物理机上的gpu了,不再需要安装nvidia-docker来支持gpu使用了,用户只需在物理机上安装nvidia驱动,其它的都有镜像提供,喜大普奔。docker安装可以参考我之前写的一篇博客Linux下docker安装教程,至于docker下使用tensorflow镜像的教程可以参考tensorflow官方教程Docker。