硬件平台:PC台式机一台(带有Intel集成显卡以及一块NVIDIA GTX 1080Ti)
注意:本文是先安装ubuntu桌面系统,然后再安装NVIDIA驱动(网上还有一种在安装系统的过程中就联网安装NVIDIA驱动的安装方式,笔者未尝试过)。因此,在正式进入后续操作时,不能在BIOS中禁用集成显卡(否则没有任何显示输出)。

Step 1:安装Ubuntu系统

在安装ubuntu系统时,显示器接在Intel集成显卡输出端口(接在NVIDIA显卡上的话,是什么都看不到的,因为还没装驱动)。笔者采用的是U盘启动盘安装方式,安装过程没有什么特殊的。

Step 2:安装NVIDIA驱动

  • 查看是否已安装第三方NVIDIA驱动nouveau
    终端键入lsmod|grep nouveau若有输出,则表明需禁止nouveau,若无进入下一步。
    终端键入sudo gedit /etc/modprobe.d/blacklist-nouveau.conf,在打开的文件中添加如下几行并保存:
    blacklist nouveau
    options nouveau modeset=0

    然后,终端键入sudo update-initramfs -u
    最后,重启系统(可以终端键入reboot命令,或者通过图形化操作)
  • 安装NVIDIA驱动
    首先添加软件源
    终端键入
    cd /etc/apt/
    sudo cp sources.list sources.list.bak
    sudo gedit sources.list

    将如下内容添加到sources.list:
    deb http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse
    deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
    deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
    deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
    deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
    deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse
    deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
    deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
    deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
    deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse

    然后更新源
    终端键入sudo apt-get update
    然后终端键入
    sudo add-apt-repository ppa:graphics-drivers/ppa
    回车继续,键入
    sudo apt-get update
    然后,打开Software Centre,点击菜单栏中的softwares&updates,选择Additional Drivers,这时界面会出现几款NVIDIA驱动,选择一款(笔者的是384.111,专有非开源),然后点击Applied Changes,自动执行驱动安装
    安装完毕之后,终端键入sudo nvidia-smi如果列出了GPU的信息列表则表明驱动安装成功
    最后,修改grub文件,以使系统能正常登录
    在终端键入sudo gedit /etc/default/grub
    在打开的文件中,将原本的
    GRUB_CMDLINE_LINEX_DEFAULT="quiet splash"
    改为
    GRUB_CMDLINE_LINEX_DEFAULT="quiet splash acpi_osi=linux"
    保存之后,更新grub,在终端键入sudo update-grub
    重启测试下
    (说明一下,这里我们的NVIDIA驱动是从linux软件源安装的,而非NVIDIA官网下载安装的。acpi_osi=linux告诉grub,电脑将以linux系统启动,调用其中的驱动,所以NVIDIA驱动被正确调用)

Step 3:安装CUDA

在NVIDIA官网下载适合的CUDA版本(主要匹配ubuntu版本号以及NVIDIA驱动版本号)。笔者选择的是cuda_8.0.61_375.26_linux.run,即CUDA Toolkit 8.0 - Feb 2017。
笔者将下载的run文件放在~目录下,因此直接在终端键入
sudo sh cuda_8.0.61_375.26_linux.run即可开始安装,如果cuda_8.0.61_375.26_linux.run不放在~目录下,则需要首先用cd 目标路径
进入其所在目录,然后安装。
安装程序启动以后,一路enter,知道条款显示完毕,然后输入accept接受条款。之后的一系列选项中要注意以下几点
i) 输入n,不安装cuda自带的NVIDIA图像驱动,因为你前一步就是在安装。如果选择y,后果有二:1. cuda安装的NVIDIA驱动不适合你的显卡;2. cuda安装的驱动属于user manually installed,这样grub中的acpi_osi=linux就无法让linux加载NVIDIA驱动。当然,笔者未尝试cuda所带的NVIDIA驱动安装,对于相关问题目前无法解答。
ii)输入n,不安装cuda自带的opengl库
iii)输入y,安装samples,以便后面测试cuda是否能够正确使用
安装完成以后,添加两个环境变量,首先终端键入
sudo gedit ~/.bashrc
在文件末尾,添加如下两句
export PATH=/usr/local/cuda-8.0/bin:${PATH}
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:${LD_LIBRARY_PATH}

然后,终端键入source ~/bashrc使环境变量在该终端生效
然后,终端键入cd /usr/local/cuda-8.0/samples或者cd ~/cuda-8.0/NVIDIA_CUDA-8.0_Samples
然后,终端键入make
编译完成以后,终端键入cd bin/x86_64/linux/release
然后,终端键入./deviceQuery
如果输出有Result = PASS 继续在终端键入./bandwidthTest 如果输出有Result = PASS 表明cuda可成功使用

Step 4:安装cudnn

在NVIDIA官网注册开发者账号,然后下载合适的cudnn版本。笔者下载的是
cuDNN v5.1(Jan 20,2017)版本(主要匹配ubuntu版本号,NVIDIA驱动版本号以及CUDA版本号)。
将下载的cudnn解压在~目录,然后在终端依次键入

sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
sudo cp cuda/lib64/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.10 libcudnn.so.5
sudo ln -s libcudnn.so.5 libcudnn.so

Step 5:编译caffe

笔者这里为了测试SSD(Single Shot MultiBox Detector)算法,下载的不是Berkeley小组的原始caffe,但是安装与配置过程无不同。

  • 获取源码
    终端依次键入如下三条命令
git clone https://github.com/weiliu89/caffe.git
cd caffe
git checkout ssd # 如果编译Berkeley版本,无此步
  • 安装依赖库
    终端依次键入如下五条命令
sudo apt-get install build-essential
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 libatlas-base-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
  • 安装python的pip和easy_install
    终端依次键入如下五条命令
cd
wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.py
sudo python ez_setup.py --insecure
wget https://bootstrap.pypa.io/get-pip.py
sudo python get-pip.py
  • 安装科学计算和python所需部分库
    终端键入
sudo apt-get install libblas-dev liblapack-dev libatlas-base-dev gfortran python-numpy
  • 安装python依赖
    终端依次键入
sudo apt-get install python-pip
sudo su
for req in $(cat "requirements.txt");do pip install -i  https://pypi.tuna.tsinghua.edu.cn/simple $req;done

按Ctrl+D退出root

  • 编译caffe
    终端键入如下两条命令
    cd ~/caffe
    cp Makefile.config.example Makefile.config

    然后修改Makefile.config文件三处内容并保存
    1) 将USE_CUDNN := 1取消注释
    2) 将INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include改为INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
    3) 将LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib 改为LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial
    然后修改Makefile文件一处内容并保存
    1) 将NVCCFLAGS += -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)改为NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
    下面开始编译,终端依次键入如下四条命令
make -j8 #8线程
make py
make test -j8
make runtest -j8 #貌似不是必须的
  • 配置python环境变量
    在终端依次键入如下三条命令
echo "export PYTHONPATH=/home/username(你的用户名)/caffe/python" >> ~/.profile
source ~/.profile
echo $PYTHONPATH #检查环境变量的值

如果以上无错误出现,表明caffe已经编译和配置成功。接下来我们进行示例测试,为了节省时间,我们下载原作者已经训练好的模型:
具体参见 https://github.com/weiliu89/caffe/tree/ssd
将模型文件解压后放入~/caffe/models/VGGNet目录下,当然也可以下载预训练模型和数据集,自己训练。


运行两个测试例子体验一下深度学习开发的乐趣。

首先,切换目录

cd ~/caffe

1) 网络摄像头

python examples/ssd/ssd_pascal_video.py

GPU在k8s集群中的虚拟化怎么做_深度学习环境配置


镜子里的人也能识别,网络还是很强大的!2) 视频

注意,首先打开文件examples/ssd/ssd_pascal_video.py,定位到51行,修改视频路径,保存文件。然后在终端键入

python examples/ssd/ssd_pascal_video.py

GPU在k8s集群中的虚拟化怎么做_ubuntu_02


帧率达到50,速度还是很惊人的!