电脑型号:微星(MSI)GL62VR 7RFX-848CN
系统:ubuntu16.04 64位
处理器:英特尔 Core i7-7700HQ
内存:16GB(8G+8G) (三星 DDR4 2400MHz)
显卡:英伟达Nvidia GeForce GTX 1060 6GB
搭建TensorFlow的开发环境需要至少需要安装3个软件,分别为:1.python,2.CUDA和CuDNN,3.TensorFlow(GPU版)。安装前一定要确认好每个软件的版本是否相互支持。
安装Tensorflow,重要的一环是要安装对应的CUDA版本,我的电脑显卡是GTX1060,最高支持CUDA9.2,目前网上的版本大多都是基于CUDA9.0的,所以这里使用CUDA9.0,从下文看,这两个工具对Ubuntu16.04支持比较好,所以使用Ubuntu16.04(在这个坑中重装过好几次Ubuntu系统)。
CUDA9.0下载地址: https://developer.nvidia.com/cuda-90-download-archive
从这里可以发现CUDA9.0只有Ubuntu16.04和17.04的版本,为了后续更容易配置成功,只好选择16.04的系统。
cuDNN下载地址: https://developer.nvidia.com/cudnn
下载时需要注册英伟达账户。
cuDNN可以看到对Ubuntu16.04支持比较好,所以综合来说不要使用过新的Ubuntu18.04系统。
分区时可以从装系统的固态硬盘中分出来一个分区,这样Ubuntu安装在固态硬盘中运行比较快。
需要一个8GB以上优盘
安装过程中界面卡死是因为英伟达显卡过新,Ubuntu不支持的原因,参考网上教程把显卡先屏蔽掉,安装好系统后再重新安装英伟达显卡驱动。
详细原因见Windows10和Ubuntu双系统安装
如果安装的Ubuntu版本有问题,那么可以在Windows10下下载Ubuntu,第一步进入Windows10,设备管理器中删除Ubuntu的几个分区,这时候Ubuntu就从电脑删除了,但是这时候注意,因为电脑启动的时候加载的是Ubuntu加载启动项,删除了Ubuntu无法启动Windows10,这时候可以使用大白菜、老毛桃等工具进入PE,使用启动修复工具修复。然后就可以进入Ubuntu了。
首先运行以下代码,看是否有输出。
lsmod | grep nouveau
如果终端中有输出,则证明该驱动正在运行,需要手动禁掉nouveau,如果有运行下面命令
sudo gedit /etc/modprobe.d/blacklist-nouveau.conf
在文本中加入以下代码:
blacklist nouveau
options nouveau modeset=0
执行下面语句进行更新
sudo update-initramfs -u
再执行下面语句查看nouveau禁用结果,没有信息输出说明禁用成功,仍有信息输出,重启即可。
lsmod | grep nouveau
输入一下命令看英伟达驱动版本,如果在前期解决安装时界面卡死问题的时候安装了英伟达驱动,此时系统运行的可能就是安装的英伟达驱动。
nvidia-smi
如果之前有不合适的英伟达驱动,需要删除驱动,安装新的驱动版本。
执行删除驱动命令:
sudo apt-get remove –purge nvidia
安装新的NVIDIA驱动,我安装的是384
sudo apt-get install nvidia-384
输入以下代码看是否安装成功
nvidia-smi
显示以上显卡信息,则安装成功,否则重启,再执行以上代码看是否成功。
这里如果安装有错误版本的话,需要先卸载错误版本,版本一定要对应。
执行以下命令进入cuda安装文件夹,如果安装的是9.0,安装的其他版本号9.0改成其他的:
cd /usr/local/cuda-9.0/bin
执行一下命令卸载cuda
sudo ./uninstall_cuda_9.0.pl
sudo rm -rf /usr/local/cuda-9.0
CUDA9.0下载地址: https://developer.nvidia.com/cuda-90-download-archive
可以下载多种版本的,这里我下载的是deb(local)版本,需要下载1个Base Installer和4个Patch包,也可以下载runfile版本,这时候用的命令是:sudo sh xxxxxx.run
。注意:过程中终端提示你安装英伟达驱动,选择no,因为之前装好了合适版本了。
sudo dpkg -i cuda-repo-ubuntu1604-9-0-local_9.0.176-1_amd64.deb
sudo apt-key add /var/cuda-repo-9-0-local/7fa2af80.pub
这两句话相当于在建立了一个可信任的本地仓库/var/cuda-repo-9-0-local
。
仓库包括:cuda的安装包,cuda的开发包,cuda的动态库,nvidia的安装包。。。
7fa2af80.pub
cuda_9.0.176-1_amd64.deb
cuda-9-0_9.0.176-1_amd64.deb
cuda-command-line-tools-9-0_9.0.176-1_amd64.deb
cuda-core-9-0_9.0.176-1_amd64.deb
cuda-cublas-9-0_9.0.176-1_amd64.deb
cuda-cublas-dev-9-0_9.0.176-1_amd64.deb
cuda-cudart-9-0_9.0.176-1_amd64.deb
cuda-cudart-dev-9-0_9.0.176-1_amd64.deb
cuda-cufft-9-0_9.0.176-1_amd64.deb
cuda-cufft-dev-9-0_9.0.176-1_amd64.deb
cuda-curand-9-0_9.0.176-1_amd64.deb
cuda-curand-dev-9-0_9.0.176-1_amd64.deb
cuda-cusolver-9-0_9.0.176-1_amd64.deb
cuda-cusolver-dev-9-0_9.0.176-1_amd64.deb
cuda-cusparse-9-0_9.0.176-1_amd64.deb
cuda-cusparse-dev-9-0_9.0.176-1_amd64.deb
cuda-demo-suite-9-0_9.0.176-1_amd64.deb
cuda-documentation-9-0_9.0.176-1_amd64.deb
cuda-driver-dev-9-0_9.0.176-1_amd64.deb
cuda-drivers_384.81-1_amd64.deb
cuda-gdb-src-9-0_9.0.176-1_amd64.deb
cuda-libraries-9-0_9.0.176-1_amd64.deb
cuda-libraries-dev-9-0_9.0.176-1_amd64.deb
cuda-license-9-0_9.0.176-1_amd64.deb
cuda-minimal-build-9-0_9.0.176-1_amd64.deb
cuda-misc-headers-9-0_9.0.176-1_amd64.deb
cuda-npp-9-0_9.0.176-1_amd64.deb
cuda-npp-dev-9-0_9.0.176-1_amd64.deb
cuda-nvgraph-9-0_9.0.176-1_amd64.deb
cuda-nvgraph-dev-9-0_9.0.176-1_amd64.deb
cuda-nvml-dev-9-0_9.0.176-1_amd64.deb
cuda-nvrtc-9-0_9.0.176-1_amd64.deb
cuda-nvrtc-dev-9-0_9.0.176-1_amd64.deb
cuda-runtime-9-0_9.0.176-1_amd64.deb
cuda-samples-9-0_9.0.176-1_amd64.deb
cuda-toolkit-9-0_9.0.176-1_amd64.deb
cuda-visual-tools-9-0_9.0.176-1_amd64.deb
libcuda1-367_384.81-0ubuntu1_amd64.deb
libcuda1-384_384.81-0ubuntu1_amd64.deb
libxnvctrl0_384.81-0ubuntu1_amd64.deb
libxnvctrl-dev_384.81-0ubuntu1_amd64.deb
nvidia-367_384.81-0ubuntu1_amd64.deb
nvidia-367-dev_384.81-0ubuntu1_amd64.deb
nvidia-384_384.81-0ubuntu1_amd64.deb
nvidia-384-dev_384.81-0ubuntu1_amd64.deb
nvidia-libopencl1-367_384.81-0ubuntu1_amd64.deb
nvidia-libopencl1-384_384.81-0ubuntu1_amd64.deb
nvidia-modprobe_384.81-0ubuntu1_amd64.deb
nvidia-opencl-icd-367_384.81-0ubuntu1_amd64.deb
nvidia-opencl-icd-384_384.81-0ubuntu1_amd64.deb
nvidia-settings_384.81-0ubuntu1_amd64.deb
最后一句才是安装的命令。Attention,如果你有多版本的本地仓库,比如我:
cuda-repo-9-0-local
cuda-repo-9-2-localap
所以正确的安装方式变成了:
sudo apt-get install cuda-9.0
从官方文档中可以看到,提示安装cuda-libraries-9-0。注意,这种方式实际上并没有完成安装,
你会发现/usr/local/cuda没有被建立(这个目录下包含了一部分的头文件和动态库)
一共分为4步,第一步,进入文件目录,执行:
sudo dpkg -i cuda-repo-ubuntu1604-9-0-local_9.0.176-1_amd64.deb
第二步,在第一步执行完后,终端有提示,提示的命令和网页内的第二步相同,执行:
sudo apt-key add /var/cuda-repo-<version>/7fa2af80.pub
执行后,终端显示OK。
第三步,执行:
sudo apt-get update
第四步,执行:
sudo apt-get install cuda
这里提示需要安装很多个包,需要约为2GB的空间。
输入y,回车确定,等待设置完成。
sudo dpkg -i cuda-repo-ubuntu1604-9-0-local-cublas-performance-update_1.0-1_amd64.deb cuda-repo-ubuntu1604-9-0-local-cublas-performance-update-2_1.0-1_amd64.deb cuda-repo-ubuntu1604-9-0-local-cublas-performance-update-3_1.0-1_amd64.deb cuda-repo-ubuntu1604-9-0-176-local-patch-4_1.0-1_amd64.deb
一次性把4个Patch包安装上。
这种方式也会在本地建立4个仓库,建议在本地仓库全部安装完成后再进行cuda的安装。
这时/usr/local/cuda
中已经有文件了。
这时候应该添加环境变量:
#打开该文件配置环境变量
sudo gedit ~/.bashrc
#在文件中写入以下环境变量:
export CUDA_HOME=/usr/local/cuda
export PATH=$PATH:$CUDA_HOME/bin
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
# 保存后执行以下命令立即生效
source ~/.bashrc
查看CUDA版本
nvcc -V
sudo apt install nvidia-cuda-toolkit
在这里应该不要执行上条命令,感觉问题时在安装CUDA完没有设置好环境变量,另外如果安装过程中提示你安装旧版本的英伟达驱动,那么选择no,因为最开始已经安装好了适合的英伟达新版本驱动了。
如果执行了sudo apt install nvidia-cuda-toolkit
,此时提示需要大概1GB的空间,后面执行后发现使用nvcc --version
显示版本号的7.0,应该是这句话自动从清华源下载了老版本的CUDA并进行了安装。
输入y,回车确定。
安装完成后,再次执行命令。
cuDNN下载地址: https://developer.nvidia.com/cudnn
下载时需要注册英伟达账户。
cuDNN可以看到对Ubuntu16.04支持比较好,所以综合来说不要使用过新的Ubuntu18.04系统。
这个直接参考官方文档:https://developer.nvidia.com/rdp/cudnn-download
里面的Installation Guide:https://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html#install-linux
$ tar -xzvf cudnn-9.0-linux-x64-v7.tgz # 解压压缩包,也可以直接使用右键,提取到此处进行解压
$ sudo cp cuda/include/cudnn.h /usr/local/cuda/include
$ sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
$ sudo chmod a+r /usr/local/cuda/include/cudnn.h
/usr/local/cuda/lib64/libcudnn*
在这里插入代码片
验证CUDA安装
nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2015 NVIDIA Corporation
Built on Tue_Aug_11_14:27:32_CDT_2015
Cuda compilation tools, release 7.5, V7.5.17
这里的软件版本有问题,需要后续解决。
下载anaconda3
进入目录
sudo bash Anaconda3-xxxxxx.sh
安装后执行
sudo gedit ~/.bashrc
打开该文件,最后可看到
# added by Anaconda3 installer
export PATH="/home/ubuntu/anaconda3/bin:$PATH"
两行文字,说明环境变量一定添加上了,退出该文件后,执行:
source ~/.bashrc
让环境变量生效。
此时检查anaconda3安装是否安装成功:conda --version
或conda -V
检查目前的安装环境:conda info --envs
在没有虚拟出新的环境之前,只有一个base环境在/home/ubuntu/anaconda3
路径下。
检查目前有哪些版本的python可以安装:conda search --full-name python
一般能够显示出从python2到python3很多版本。
选择一个python版本安装(这里选择python3.6版本):conda create --name tensorflow-gpu python=3.6
联网检测需要下载的安装的包,输入y后进行联网下载安装。
安装后终端会提示激活该虚拟环境和退出该环境的方法。
#
# To activate this environment, use:
# > source activate tensorflow-gpu
#
# To deactivate an active environment, use:
# > source deactivate
#
终端中使用
source activate tensorflow-gpu
进入tensorflow-gpu虚拟环境,这时如果使用pip list
查看虚拟环境中的包数量,只有少数几个。
安装tensorflow-gpu==1.8.0版本。
pip install tensorflow-gpu==1.8.0
需要权限的话也可以使用:
sudo pip install tensorflow-gpu==1.8.0
运行Python程序,可在终端中,也可在pycharm中运行:
import tensorflow as tf
hello = tf.constant("Hello, TensorFlow!")
sess = tf.Session()
print(sess.run(hello))
cuDNN出现问题:
Python 3.6.5 |Anaconda, Inc.| (default, Apr 29 2018, 16:14:56)
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
Traceback (most recent call last):
File "/home/ubuntu/.conda/envs/tensorflow-gpu-1.4.1/lib/python3.6/site-packages/tensorflow/python/pywrap_tensorflow.py", line 58, in <module>
from tensorflow.python.pywrap_tensorflow_internal import *
File "/home/ubuntu/.conda/envs/tensorflow-gpu-1.4.1/lib/python3.6/site-packages/tensorflow/python/pywrap_tensorflow_internal.py", line 28, in <module>
_pywrap_tensorflow_internal = swig_import_helper()
File "/home/ubuntu/.conda/envs/tensorflow-gpu-1.4.1/lib/python3.6/site-packages/tensorflow/python/pywrap_tensorflow_internal.py", line 24, in swig_import_helper
_mod = imp.load_module('_pywrap_tensorflow_internal', fp, pathname, description)
File "/home/ubuntu/.conda/envs/tensorflow-gpu-1.4.1/lib/python3.6/imp.py", line 243, in load_module
return load_dynamic(name, filename, file)
File "/home/ubuntu/.conda/envs/tensorflow-gpu-1.4.1/lib/python3.6/imp.py", line 343, in load_dynamic
return _load(spec)
ImportError: libcublas.so.8.0: cannot open shared object file: No such file or directory
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "" , line 1, in <module>
File "/home/ubuntu/.conda/envs/tensorflow-gpu-1.4.1/lib/python3.6/site-packages/tensorflow/__init__.py", line 24, in <module>
from tensorflow.python import *
File "/home/ubuntu/.conda/envs/tensorflow-gpu-1.4.1/lib/python3.6/site-packages/tensorflow/python/__init__.py", line 49, in <module>
from tensorflow.python import pywrap_tensorflow
File "/home/ubuntu/.conda/envs/tensorflow-gpu-1.4.1/lib/python3.6/site-packages/tensorflow/python/pywrap_tensorflow.py", line 72, in <module>
raise ImportError(msg)
ImportError: Traceback (most recent call last):
File "/home/ubuntu/.conda/envs/tensorflow-gpu-1.4.1/lib/python3.6/site-packages/tensorflow/python/pywrap_tensorflow.py", line 58, in <module>
from tensorflow.python.pywrap_tensorflow_internal import *
File "/home/ubuntu/.conda/envs/tensorflow-gpu-1.4.1/lib/python3.6/site-packages/tensorflow/python/pywrap_tensorflow_internal.py", line 28, in <module>
_pywrap_tensorflow_internal = swig_import_helper()
File "/home/ubuntu/.conda/envs/tensorflow-gpu-1.4.1/lib/python3.6/site-packages/tensorflow/python/pywrap_tensorflow_internal.py", line 24, in swig_import_helper
_mod = imp.load_module('_pywrap_tensorflow_internal', fp, pathname, description)
File "/home/ubuntu/.conda/envs/tensorflow-gpu-1.4.1/lib/python3.6/imp.py", line 243, in load_module
return load_dynamic(name, filename, file)
File "/home/ubuntu/.conda/envs/tensorflow-gpu-1.4.1/lib/python3.6/imp.py", line 343, in load_dynamic
return _load(spec)
ImportError: libcublas.so.8.0: cannot open shared object file: No such file or directory
Failed to load the native TensorFlow runtime.
See https://www.tensorflow.org/install/install_sources#common_installation_problems
for some common reasons and solutions. Include the entire stack trace
above this error message when asking for help.
解决办法见:http://www.bubuko.com/infodetail-2325869.html
16 #======更新软连接======
17 cd /usr/local/cuda/lib64/
18 sudo rm -rf libcudnn.so libcudnn.so.7 #删除原有动态文件,版本号注意变化,可在cudnn的lib64文件夹中查看
19 sudo ln -s libcudnn.so.9.0.176 libcudnn.so.7 #生成软衔接(注意这里要和自己下载的cudnn版本对应,可以在/usr/local/cuda/lib64下查看自己libcudnn的版本)我的是9.0.176,使用命令:nvcc --version查看
20 sudo ln -s libcudnn.so.7 libcudnn.so #生成软链接
21 sudo ldconfig -v #立刻生效
这时候python的程序能够正确运行了,在后期的工作中,只需要使用conda命令虚拟出多个环境,分别配置每个环境下需要的包即可,使用pycharm来修改解释器路径来应用不同的conda虚拟环境。
Windows下打开英伟达控制面板
查看显卡支持的CUDA版本,GTX1060支持最高支持CUDA 9.2,所以一定不要使用最新的CUDA10的版本。