ubuntu16.04下NVIDIA+CUDA+CUDNN+TensorFlow+Pytorch+Opencv等深度学习环境配置

1.Ubuntu16.04配置

1.1 更改Ubuntu源

所谓源,可以理解为Ubuntu从何处下载软件。默认的源是server for china,个人测试这是从美国的服务器下载软件进行安装的,为了加快下载安装软件的速度,我们通常把软件源更改为国内的服务器。

打开软件中心,找到Software&Updates:

选择updates那个选项,出现

Download from那个选项里面选择就行,比如我是用的阿里云的。然后关闭,reload即可。

安装一些依赖项目,这里安装的依赖项是为后面的安装做准备的,反正是要安装的(当然后面还有一些要安装),这里一行一行复制到你的命令行执行就行。

sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler 
sudo apt-get install --no-install-recommends libboost-all-dev 
sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev 
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

要是上面的安装出现了一些问题,随时执行下面指令:

sudo apt-get update

1.2 Pip换源

先安装pip管理工具

sudo apt install python3-pip

sudo apt install python-pip

修改 ~/.pip/pip.conf (没有就创建一个), 内容如下:

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple

2.安装NVIDIA显卡驱动

下面方法一与方法二,若不适用NVIDIA作为显示,则可以不干掉nouveau nvidia驱动(即下面的第2步),但是还是推荐干掉它,防止意外。

安装之前要先关闭secret boot,对于华硕主板bios,进入cms打开只有uefi启动,然后进入secret boot,改windows uefi为other uefi

若把显示器接到显卡上,发现没有亮屏。则进入Bios->高级->高级\北桥\显示设置,将首选显卡改为Auto,初始化iGPU改为关闭(这里以华硕主板为例)。

2.1 安装

2.1.1 方法一:在线安装驱动

1.卸载你电脑中此刻有的nvidia的驱动。(复制命令就行,方便,后面也一样)

sudo apt-get remove --purge nvidia*

运行了这个命令之后,你系统中的NVIDIA、的一些驱动就应该被卸载了。
2.然后干掉Ubuntu自带的nouveau nvidia驱动,刚装的系统木有vim ,gedit这个图形的还不错嘛

sudo gedit /etc/modprobe.d/blacklist-nouveau.conf

打开后把这些复制进去

blacklist nouveau
options nouveau modeset=0

保存 ,更新一个

sudo update-initramfs -u

接着重启,使用下这个命令看看nouveau有没有被干掉,若什么也没有输出,则已经被干掉了

lsmod | grep nouveau

3.添加一个PPA到系统,等一下安装驱动要用的。复制下面的话命令就行(放在这里是因为你现在还在图形界面,复制方便)

sudo add-apt-repository ppa:graphics-drivers/ppa

复制完上面那个命令执行之后,千万记得

sudo apt-get update

4.上面的准备工作做完,按CTRL+ATL+F1进入终端1(很基础的东西不用我解释啦),这个时候你应该就**脱离图形界面**进入字符界面了(需要重新登录一次就登陆一次。),要是这个时候你看不到教程,还是推荐用手机或者平板或者其他的边看教程边操作。
在终端下面运行:

sudo service lightdm stop

打开右上角的设置,找到Software&Updates,接着找到Additional Drivers,即可查看适用于你电脑的显卡驱动。这里我的显示的是NVIDIA 384版本,然后运行:

sudo apt-get install nvidia-384

5.重新进入图像化界面:

sudo service lightdm start

如果,你见到了久违的图像化熟悉界面,且没有卡在循环登陆界面,那么恭喜你,你已经通过了最难的一步。

2.1.1 方法二:离线安装驱动

1.卸载你电脑中此刻有的nvidia的驱动。(复制命令就行,方便,后面也一样)

sudo apt-get remove --purge nvidia*

2.然后干掉Ubuntu自带的nouveau nvidia驱动,刚装的系统木有vim ,gedit这个图形的还不错嘛

sudo gedit /etc/modprobe.d/blacklist-nouveau.conf

打开后把这些复制进去

blacklist nouveau
options nouveau modeset=0

保存 ,更新一个

sudo update-initramfs -u

接着重启,使用下这个命令看看nouveau有没有被干掉,若什么也没有输出,则已经被干掉了

lsmod | grep nouveau

3.按CTRL+ATL+F1进入终端1,登陆后在终端下面运行:

sudo service lightdm stop

找到自己从官网下载的run文件,然后cd到下载好的NVIDIA384.130驱动目录
先给个权限吧

chmod 777 NVIDIA-Linux-x86_64-384.130.run

执行下面指令安装!

sudo ./NVIDIA-Linux-x86_64-384.130.run -no-opengl-files

后面就一路Accept就可以~报错**The distribution-provided pre-install script failed!**不必理会,继续安装。最重要的一步,安装程序问你是否使用nv的xconfig文件,这里一点要选yes,否则在启动x-window时不会使用nv驱动。
4.重新进入图像化界面:

sudo service lightdm start

如果,你见到了久违的图像化熟悉界面,且没有卡在循环登陆界面,那么恭喜你,你已经通过了最难的一步。

2.2 测试

无论通过2.1中的方法一还是2.2中的方法二,没有卡在登陆界面,可以通过运行:

nvidia-smi

来看是不是能够输出你的GPU的一些信息。要是不能够输出的话,重启。能够输出的话,也建议重启一次。

2.3 Bug

2.3.1 Bug1

若出现sudo service lightdm stop无法关闭图像化界面,出现运行上述语句直接跳转到登陆界面,上述语句改为:

`systemctl disable lightdm.service`

则对应的方法一与方法二的第4步改为:

# 开启图形界面命令
ln -s /lib/systemd/system/lightdm.service /etc/systemd/system/display-manager.service
reboot

2.3.2 Bug2

如果是服务器的u,麻烦了不带核显。。遇到开机黑的情况
进入grub界面后,第三行有一个“高级选项”,选择后,按下“e”键进入编辑模式,找到“linux”那一行,将光标移动到这一行最后,先按下空格键加一个空白,然后输入

acpi_osi=linux nomodeset

应该可以,待测试
如果你有便宜的亮机卡,先插上去开机也行呀

3.CUDA9.0+CUDNN

CUDA9.0已经发布了挺久的了,最新的TensorFlow、Mxnet、Pytorch都已经开始支持CUDA9了,而且安装CUDA9的过程比CUDA8简单,所以在此推荐先试试CUDA9.0。
点击此处下载CUDA
找到CUDA9,平台选择如下所示,然后点击下载。

3.1 安装CUDA9.0

cd到你下载CUDA9.0的位置,运行

sudo sh cuda_9.0.176_384.81_linux.run

接着会出现很长很长的license让你看。之前都是老老实实的按键盘的下键,翻到最后,累到吐。后来查了查怎么调到最后,下面放大招,同时按住键盘的ctrl+C即可跳转到最后的一行。
注意:执行后会有一些提示让你确认,在第二个提示的地方,有个让你选择是否安装驱动时(Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 384.81?),一定要选择否:因为前面我们已经安装了更加新的nvidia367,所以这里不要选择安装。然后其余的让你萱蕚选择yes/no/quit的时候均选择yes,没有选择项的直接回车保持默认即可

安装成功后,会出现类似于下面的语句:

===========
= Summary =
===========
Driver: Not Selected
Toolkit: Installed in /usr/local/cuda-9.0Samples: Installed in /home/textminer
Please make sure that
– PATH includes /usr/local/cuda-9.0/bin
– LD_LIBRARY_PATH includes /usr/local/cuda-9.0/lib64, or, add /usr/local/cuda-9.0/lib64 to /etc/ld.so.conf and run ldconfig as rootTo uninstall the CUDA Toolkit, run the uninstall script in /usr/local/cuda-9.0/bin
Please see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-9.0/doc/pdf for detailed information on setting up CUDA.
***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 361.00 is required for CUDA 9.0 functionality to work.To install the driver using this installer, run the following command, replacing with the name of this run file:
sudo .run -silent -driver
Logfile is /opt/temp//cuda_install_6583.log

接下来到了很关键的一步了,配置环境变量
运行下面语句来编辑.bashrc配置文件

gedit ~/.bashrc

在该文件的最后加上下面几句即可

export PATH=/usr/local/cuda/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export CUDA_HOME=/usr/local/cuda

安装完毕后,来个自带的例子测一下。

cd /usr/local/cuda-9.0/samples/1_Utilities/deviceQuery 
sudo make 
./deviceQuery

出现了下面的你的GPU的一些信息的话,就是真的安装成功了。

到这里,CUDA就安装成功了,其实不算是很难,注意一些情况就行了。

3.2 安装CUDNN7

这里需要一个NVIDIA的开发者账号,注册一个就OK,需要登陆后到cuDNN选择安装包,这里选择的版本是V7

cd到你下载CUDNN7的位置,运行下面语句即可,从下面语句可以看出来,CUDNN7不用安装,直接复制到对应路径即可

tar -zxvf 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/ -d
sudo chmod a+r /usr/local/cuda/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*

3.3 卸载CUDA

在登陆界面状态下,按Ctrl + Alt + f1,进入TUI

执行

sudo /usr/local/cuda-9.0/bin/uninstall_cuda_9.0.pl
sudo /usr/bin/nvidia-uninstall

然后重启

sudo reboot

4.CUDA8.0+CUDNN

4.1 安装CUDA8.0

cd到你下载CUDA8.0的位置,运行

sudo sh cuda_8.0.61_375.26_linux.run

接着会出现很长很长的license让你看。之前都是老老实实的按键盘的下键,翻到最后,累到吐。后来查了查怎么调到最后,下面放大招,同时按住键盘的ctrl+C即可跳转到最后的一行。
注意:执行后会有一些提示让你确认,在第二个提示的地方,有个让你选择是否安装驱动时(Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 375.26?),一定要选择否:因为前面我们已经安装了更加新的nvidia367,所以这里不要选择安装。然后其余的让你萱蕚选择yes/no/quit的时候均选择yes,没有选择项的直接回车保持默认即可

安装成功后,会出现类似于下面的语句:

===========
= Summary =
===========
Driver: Not Selected
Toolkit: Installed in /usr/local/cuda-8.0Samples: Installed in /home/textminer
Please make sure that
– PATH includes /usr/local/cuda-8.0/bin
– LD_LIBRARY_PATH includes /usr/local/cuda-8.0/lib64, or, add /usr/local/cuda-8.0/lib64 to /etc/ld.so.conf and run ldconfig as rootTo uninstall the CUDA Toolkit, run the uninstall script in /usr/local/cuda-8.0/bin
Please see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-8.0/doc/pdf for detailed information on setting up CUDA.
***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 361.00 is required for CUDA 8.0 functionality to work.To install the driver using this installer, run the following command, replacing with the name of this run file:
sudo .run -silent -driver
Logfile is /opt/temp//cuda_install_6583.log

接下来到了很关键的一步了,配置环境变量
运行下面语句来编辑.bashrc配置文件

gedit ~/.bashrc

在该文件的最后加上下面几句即可

export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}} 
export LD_LIBRARY_PATH=/usr/local/cuda8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export CUDA_HOME=/usr/local/cuda

安装完毕后,来个自带的例子测一下。

cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery 
sudo make 
./deviceQuery

出现了下面的你的GPU的一些信息的话,就是真的安装成功了。

到这里,CUDA就安装成功了,其实不算是很难,注意一些情况就行了。

4.2 CUDNN安装

CUDA8.0对应的CUDNN版本有5.1和6两个版本,这两个版本使用与不同的深度学习框架,具体安装哪个根据自己的需求而定。这里需要一个NVIDIA的开发者账号,注册一个就OK,需要登陆后到cuDNN选择安装包

4.2.1 版本一:安装CUDNN5.1

下载完cudnn5.1之后进行解压
cd进入cudnn5.1解压之后的include目录,在命令行进行如下操作:

sudo cp cudnn.h /usr/local/cuda/include/ #复制头文件

再将cd进入lib64目录下的动态文件进行复制和链接:

sudo cp lib* /usr/local/cuda/lib64/ #复制动态链接库 
cd /usr/local/cuda/lib64/
sudo rm -rf libcudnn.so libcudnn.so.5 #删除原有动态文件
sudo ln -s libcudnn.so.5.1.5 libcudnn.so.5 #生成软衔接
sudo ln -s libcudnn.so.5 libcudnn.so #生成软链接
sudo ldconfig -v

执行完之后,cuDNN5.1算是安装完成了。

4.2.2 版本一:安装CUDNN6

下载完cudnn6之后进行解压,cd进入cudnn5.1解压之后的include目录,在命令行进行如下操作:

sudo cp *.h /usr/local/cuda/include/

再将cd进入lib64目录下的动态文件进行复制和链接:

sudo cp libcudnn* /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
sudo ln -s libcudnn.so.6.0.21 libcudnn.so.6
sudo ln -s libcudnn.so.6 libcudnn.so

执行完之后,cuDNN6算是安装完成了。

4.3 卸载CUDA

在登陆界面状态下,按Ctrl + Alt + f1,进入TUI

执行

sudo /usr/local/cuda-8.0/bin/uninstall_cuda_8.0.pl
sudo /usr/bin/nvidia-uninstall

然后重启

sudo reboot

4.4 Bug

若出现CUDA未安装成功的情况,尝试降级GCC,可能你下载的CUDA8.0最高支持的版本只到GCC5.3。

下载GCC源码并且解压

wget ftp://mirrors.kernel.org/gnu/gcc/gcc-5.3.0/gcc-5.3.0.tar.gz 
或者到 http://www.netgull.com/gcc/releases/gcc-5.3.0/ 下载
tar -zxvf gcc-5.3.0.tar.gz

下载编译所需依赖项:

cd gcc-5.3.0 //进入解包后的gcc文件夹 
./contrib/download_prerequisites //下载依赖项 
cd .. //返回上层目录

建立编译输出目录:

mkdir gcc-build-5.3.0

进入输出目录,执行以下命令,并生成makefile文件:

cd gcc-build-5.3.0 
../gcc-5.3.0/configure -enable-checking=release -enable-languages=c,c++ -disable-multilib

编译(这里会花一点时间):

make -j4

安装

sudo make install

弄好了,然后你可以看一下自己的gcc版本

5.CUDA9.0与CUDA8.0并存

现在cuda9.0是大趋势,常见的框架,Mxnet,Pytorch,TensorFlow已经支持cuda9.0了,所以这里我们假设默认情况下使用的都是cuda9.0。

首先,按照步骤3中的安装cuda9.0的方法,装上cuda9.0。

然后,安装cuda8.0的时候,注意下面几个步骤的选择,其余的选择与上文中的步骤4一样。

Enter Toolkit location
[ default is /usr/local/cuda-8.0]: /home/ubuntu/cuda8

Do you want to install a symbolic link at /usr/local/cuda?
(y)es/(n)o/(q)uit: n

安装cudnn的时候,注意复制的路径:

sudo cp -a cuda/include/cudnn.h /home/ubuntu/cuda8/include/
sudo cp -a cuda/lib64/libcudnn* /home/ubuntu/cuda8/lib64/

运行下面语句来编辑.bashrc配置文件

gedit ~/.bashrc

在该文件的最后加上下面几句即可

export PATH=/home/ubuntu/cuda8/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/home/ubuntu/cuda8/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export CUDA_HOME=/home/ubuntu/cuda8

经过上述步骤,就完成了CUDA8.0和CUDA9.0的并存。想适应那个CUDA,只需要更改 .bashrc 文件中的环境变量即可。

值得注意的是,深度学习框架通常不同时支持cuda9.0与cuda8.0,所以当你切换CUDA版本的时候,需要重新安装适合对应CUDA版本的深度学习框架版本,这个比较无语

6. Pycharm配置

Pycharm下会出现ImportError: libcublas.so.9.0: cannot open shared object file: No such file or directory的bug,更改为bin/pycharm.sh为如下的形式,对于pycharm2017.3.4以及以后版本,则要改第5行和第6行:

# ---------------------------------------------------------------------
# Run the IDE.
# ---------------------------------------------------------------------
IFS="$(printf '\n\t')"
LD_LIBRARY_PATH='/usr/local/cuda/lib64'
LD_LIBRARY_PATH="$IDE_BIN_HOME:$LD_LIBRARY_PATH" "$JAVA_BIN" \
  ${AGENT} \
  "-Xbootclasspath/a:$IDE_HOME/lib/boot.jar" \
  -classpath "$CLASSPATH" \
  ${VM_OPTIONS} \
  "-XX:ErrorFile=$HOME/java_error_in_PYCHARM_%p.log" \
  "-XX:HeapDumpPath=$HOME/java_error_in_PYCHARM.hprof" \
  -Didea.paths.selector=PyCharmCE2017.3 \
  "-Djb.vmOptionsFile=$VM_OPTIONS_FILE" \
  ${IDE_PROPERTIES_PROPERTY} \
  -Didea.platform.prefix=PyCharmCore \
  com.intellij.idea.Main \
  "$@"

或者可以采取下面方式修复该bug:
设置环境变量和动态链接库,在命令行输入:

sudo gedit /etc/profile

在打开的文件末尾加入:

export PATH=/usr/local/cuda/bin:$PATH

保存之后,创建链接文件:

sudo gedit /etc/ld.so.conf.d/cuda.conf

在打开的文件中添加如下语句:

/usr/local/cuda/lib64

然后执行

sudo ldconfig

使链接立即生效。此时有可能会报什么 is not a symbol 之类的错了,忽略不计。

7.安装Opencv

7.1 方法一:非编译式

Opencv经常使用,以前经常采用编译的方法去安装Opencv,比较郁闷的是为啥Opencv只有Windows下的非编译安装方法。最近终于在论坛上找到了在Ubuntu下非编译安装方法,吓得我赶紧记录下来

for Python2:

sudo apt-get install libopencv-dev
sudo apt-get install python-opencv

for Python3:

sudo pip3 install opencv-python

7.2 方法二:编译式

编译的方法好处是,C++也能调用,以安装Opencv3.1为例

首先肯定是先安装依赖了,官方列出了一些:

sudo apt-get install build-essential
sudo apt-get install cmake Git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
sudo apt-get install --assume-yes libopencv-dev libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libxine2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev libtbb-dev libqt4-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils unzip
sudo apt-get install ffmpeg libopencv-dev libgtk-3-dev python-numpy python3-numpy libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libxine2-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libv4l-dev libtbb-dev qtbase5-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev

反正不管了,全部都装上去。
在你喜欢的地方建立一个工作目录,随便什么名字,就在home目录下面建立了一个OpenCV的目录

mkdir OpenCV

进入这个工作目录(OpenCV)然后用git克隆官方的项目(下载接受会需要一点时间,等待)

cd Opencv 
git clone [https://github.com/opencv/opencv.git](https://github.com/opencv/opencv.git) 
git clone [https://github.com/opencv/opencv_contrib.git](https://github.com/opencv/opencv_contrib.git)

克隆好了之后,你就会看见你的工作目录(OpenCV)下面有了两个项目的文件夹opencv了。
进入到你下载的那个opencv文件夹,这时候建立一个build的文件夹,用来接收cmake之后的文件。
cd build进入到build里面,运行这句命令(直接复制就行):

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

这里要解释一下,后面是一个空格加上两个点,不要搞错了。
运行之后,下图表示cmake完成了。

这个时候的build下面也有了一些文件。你当然不用管这些是什么。
直接运行sudo make -j4,编译等待

make完成之后,再sudo make install就安装好了。
你能够在/usr/local中找到你新安装的opencv的一些头文件和库了。
这里要说明一下,要是中途出现了一些问题是与cuda有关的,打开opencv下面那个cmakelist文件把with_cuda设置为OFF,如下图,之后再cmake,再编译。

OK,OpenCV也到这里了。

8. TensorFlow

若你安装的是CUDA8.0,则需要指定TensorFLow版本,因为最新的版本是根据CUDA9.0编译的

sudo pip install tensorflow-gpu==1.4.0
sudo pip3 install tensorflow-gpu==1.4.0

若安装的是CUDA9.0

sudo pip install tensorflow-gpu
sudo pip3 install tensorflow-gpu

然后就安装好啦,运行下面的代码检验一下

import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))

正确输出Hello, TensorFlow!的话,就表示安装成功啦。

9. Pytorch

点击这里,os选择Linux,Package Manager选择pip方式。接着根据Python和自己安装CUDA版本,按照下方提示安装即可。这里以CUDA9.0和Python3.5为例:

sudo pip3 install http://download.pytorch.org/whl/cu90/torch-0.3.1-cp35-cp35m-linux_x86_64.whl 
sudo pip3 install torchvision

10. Mxnet

按照这里的教程安装即可
这里以安装的CUDA9.0,Python3.5为例

sudo pip3 install mxnet-cu90
sudo apt-get install graphviz
sudo pip3 install graphviz

11. theano

11.1 for CUDA8.0

sudo pip install theano

直接复制下面的测试代码看是不是能够出来结果。

from theano import function, config, shared, sandbox
import theano.tensor as T
import numpy
import time
vlen = 10 * 30 * 768  # 10 x #cores x # threads per core
iters = 1000
rng = numpy.random.RandomState(22)
x = shared(numpy.asarray(rng.rand(vlen), config.floatX))
f = function([], T.exp(x))
print(f.maker.fgraph.toposort())
t0 = time.time()
for i in range(iters):
    r = f()
t1 = time.time()
print("Looping %d times took %f seconds" % (iters, t1 - t0))
print("Result is %s" % (r,))
if numpy.any([isinstance(x.op, T.Elemwise) for x in f.maker.fgraph.toposort()]):
    print('Used the cpu')
else:
    print('Used the gpu')


成功,但是这个时候使用的CPU来跑的。然后接下来的任务就是给他添加GPU加速。
在你的主目录下面,(就是你直接~/文件夹,后者你自己cd之后回车的那个文件夹)。

sudo vim .theanorc

建立一个.theanorc的文件。
文件中的的内容直接复制下面就行了。

[global]

floatX=float32 
device=gpu 
base_compiledir=~/external/.theano/ 
allow_gc=False 
warn_float64=warn 
[mode]=FAST_RUN

[nvcc] 
fastmath=True

[cuda] 
root=/usr/local/cuda

保存。再次运行那个例子。得到结果

CPU那个用了30多秒,这个只用了0.8秒,说明GPU的加速还是有点用的。
至此,theano安装完成了。

11.2 for CUDA9.0

sudo pip install theano
# 安装 pygpu
git clone https://github.com/Theano/libgpuarray.git
cd libgpuarray
cd <dir>
mkdir Build
cd Build
# you can pass -DCMAKE_INSTALL_PREFIX=/path/to/somewhere to install to an alternate location
cmake .. -DCMAKE_BUILD_TYPE=Release # or Debug if you are investigating a crash
make
make install
cd ..
# This must be done after libgpuarray is installed as per instructions above.
python setup.py build
python setup.py install
sudo ldconfig

在你的主目录下面,(就是你直接~/文件夹,后者你自己cd之后回车的那个文件夹)。

sudo vim .theanorc

建立一个.theanorc的文件,如何使用GPU:http://deeplearning.net/software/theano/tutorial/using_gpu.html。

[global]
device = cuda
floatX = float32

运行下面的例子,注意例子的命名不能是 theano.py,否则的话,导包错误

from theano import function, config, shared, tensor
import numpy
import time
vlen = 10 * 30 * 768  # 10 x #cores x # threads per core
iters = 1000
rng = numpy.random.RandomState(22)
x = shared(numpy.asarray(rng.rand(vlen), config.floatX))
f = function([], tensor.exp(x))
print(f.maker.fgraph.toposort())
t0 = time.time()
for i in range(iters):
    r = f()
t1 = time.time()
print("Looping %d times took %f seconds" % (iters, t1 - t0))
print("Result is %s" % (r,))
if numpy.any([isinstance(x.op, tensor.Elemwise) and
              ('Gpu' not in type(x.op).__name__)
              for x in f.maker.fgraph.toposort()]):
    print('Used the cpu')
else:
    print('Used the gpu')

运行:

THEANO_FLAGS=device=cuda0 python test.py

最后输出的是

12. Caffe

因为Caffe是最难安装的,因此就放到了最后了。废话不说多了。
首先你需要从github上面clone或者下载.zip的压缩包。效果是一样的。然后你得到一个cafffe-master的压缩包或者文件夹。进到这个文件夹里面,你会看到是这个样子的。

m你会看到其中有一个文件叫Makefile.config.example.这个文件是官方给出了编译的“模板”,我们可以直接拿过来小小的修改一下就行。复制下面的命令把名字改为Makefile.config

sudo cp Makefile.config.example Makefile.config

你会发现下面多了一个Makefile.config的文件

打开这个文件并且修改(我这里用的是sublime,你可以换成其他的编辑器比如vim):

sudo subl Makefile.config

你能够看到类似于这样的东西

然后根据个人情况修改文件:
1.若使用cudnn,则将#USE_CUDNN := 1修改成: USE_CUDNN := 1 (就是去掉注释的‘#’号)
2.若使用的opencv版本是3的,则将#OPENCV_VERSION := 3 修改为: OPENCV_VERSION := 3
3.若要使用python来编写layer,则将#WITH_PYTHON_LAYER := 1修改为 WITH_PYTHON_LAYER := 1
4.要是你是用的anaconda的话,还需要改一些地方

把之前的PYTHON_INCLUDE加上注释,把ANACONDA_HOME以及下面的PYTHON_INCLUDE 都去掉,并且改为如下图最终的样子。

5.重要 : 将# Whatever else you find you need goes here.下面的

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include 
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib

修改为:

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial

(因为ubuntu16.04的文件包含位置发生了变化)
6.修改makefile文件
打开makefile文件,做如下修改:
将(大概409行的样子):

NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)

替换为:

NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

在Makefile文件的第大概181行,把 hdf5_hlhdf5修改为hdf5_serial_hlhdf5_serial,即
将:

LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5

改为:

LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial


(6)编辑/usr/local/cuda/include/host_config.h
将其中的第115行注释掉:

#error-- unsupported GNU version! gcc versions later than 5 are not supported!

改为

//#error-- unsupported GNU version! gcc versions later than 5 are not supported!

然后就可以开始编译了

sudo make all -j4

然后就编译好了

这里测试一下

sudo make test

可能有个缓慢的编译过程,然后出现如下如所示的


One more thing

更多关于人工智能、Python、C++、计算机等知识,欢迎访问我的个人博客进行交流, 点这里~~

你可能感兴趣的:(环境配置,Ubuntu,深度学习,环境)