我爱编程

深度学习配置机器:Nvidia + Ubuntu + DL框架

2017-09-23  本文已影响212人  齐州读经客

0 硬件(机器)

Nvidia硬件产品

参考资料


1 操作系统

选择目前稳定的长期支持版本:Ubuntu 16.04 LTS (Xenial Xerus)

查看系统版本:

uname -a
lsb_release -a

查看硬件信息

# 查看显卡
lspci | grep -i vga
lspci | grep -i nvidia
# (VGA接口编号)
lspci -v -s 02:00.0 

# 查看驱动版本
dpkg -l | grep nvidia
# 显卡设备
ls /dev/nvidia*
# Nvidia显卡运行状态
nvidia-smi
sudo apt update
sudo apt dist-upgrade
sudo apt autoremove
sudo do-release-upgrade -d

2 Nvidia驱动和开发包

驱动:

安装新版本前推荐卸载已有的Nvidia驱动:

sudo apt-get remove --purge nvidia*
# 添加源
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
 # 选择合适的且尽可能新的版本(2018年)
# 使用apt search '^nvidia\-[0-9]+$'
sudo apt-get install nvidia-396
# 删除源
sudo add-apt-repository --remove ppa:graphics-drivers/ppa
支持Ubuntu 16.04的驱动(2018年)

补充:
使用apt full-upgrade后升级后(包括驱动),可能造成运行nvidia-smi出现以下问题:

Failed to initialize NVML: Driver/library version mismatch.

原因:内核模块中nvidia驱动没有同步更新。
解决方案:
方式1: 直接重启
方式2:手动重新加载内核模块(先移除旧模块,再加载新模块)

# 查看依赖(可略)
lsmod | grep -i nvidia

# 依次依次依赖模块
sudo rmmod nvidia_uvm
sudo rmmod nvidia_drm 
sudo rmmod nvidia_modeset

# 移除旧模块(上一步不执行,会报错)
sudo rmmod nvidia

# 会自动加载相关模块
sudo nvidia-smi

参考:comzyh, 解决Driver/library version mismatch, 2017-04-06

查看已有驱动版本

dpkg -l | grep -i nvidia
cat /proc/driver/nvidia/version

CUDA:

CUDA(Compute Unified Device Architecture)是由NVIDIA所推出的一种集成技术,是该公司对于GPGPU的正式名称。这里主要指用于对Nvidia GPU进行并行计算的软件开发包,避免直接对GPU等底层编程,与之相类似还有OpenCL。

注意:
安装CUDA和CuDNN的版本需要符合Tesorflow相应版本的要求(版本过低可能导致后续tensorflow等框架安装失败)。

下载最新版本:

$ sudo dpkg -i cuda-xx.deb # 两个包都要,其实解压dk /var中
$ sudo apt update
$ sudo apt install cuda

.deb安装包:

# cuda 9.1 (2018年)下载安装
wget https://developer.nvidia.com/compute/cuda/9.1/Prod/local_installers/cuda_9.1.85_387.26_linux
sudo sh cuda_9.1.85_387.26_linux.run

设置环境变量(写入到~/.bashrc/etc/profile

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

验证(运行一个样例程序)

$ nvidia-smi

# 进入sample安装的目录
$ cd /usr/local/cuda/samples/1_Utilities/deviceQuery
$ makesudo 
$ ./deviceQuery # 看到GPU相关信息,RESULT=PASS

CuDNN

cudnn是一个构建在CUDA之上的神经网络层加速库。需要注册账户登录后才能下载,一般就选择适合自己系统的最新稳定版
选择 Library for Linux (Runtime和Development)

# 解压
$ tar -zxvf cudnn.tgz
# 复制相关头文件
$ sudo cp includue/cudnn.h /usr/local/cuda/include/
# 复制动态链接库
$ sudo cp lib/lib* /usr/local/cuda-8.0/lib64/ 

# 在/usr/local/cuda-8.0/lib64/链接相关文件
 # 删除原有动态文件
$ sudo rm -rf libcudnn.so libcudnn.so.5   
# 生成软衔接(注意这里注意libcudnn的版本)
$ sudo ln -s libcudnn.so.5.1.10 libcudnn.so.5  
$ sudo ln -s libcudnn.so.5 libcudnn.so  

补充:cudnn 7.1版本(cuda9.0版本)

tar -zxvf cudnn-9.0-linux-x64-v7.1.tgz
sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
# 复制库文件,同时也复制符号链接(-d)
sudo cp -d cuda/lib64/libcudnn* /usr/local/cuda/lib64/ 

3 深度学习框架

Google Tensorflow

推荐使用anaconda, 建立一个虚拟环境:

$ pip install tensorflow-gpu

问题:
运行tensorflow可能会出现:I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA
原因:不支持部分CPU指令
解决:自己编译tensorflow,参见官网
几个注意点:

Caffe

见官网:
http://caffe.berkeleyvision.org/install_apt.html
http://caffe.berkeleyvision.org/installation.html

Ubuntu 17.04以上版本有预编译包,直接安装

 # 仅有CPU
$ sudo apt install caffe-cpu
 # CUDA(有Nvidia GPU)
$ sudo apt install caffe-cuda

低版本(16以下)需要先安装一些包,主要:
更低的版本(14, 12)还有其他的依赖包

$ 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 libgflags-dev libgoogle-glog-dev liblmdb-dev
$ sudo apt-get install libatlas-base-dev  # ATLAS
$ sudo apt-get install libopenblas-dev # OpenBLAS
$ 安装Interl MKL
  1. 依赖包
  2. 编译安装
    make或cmake, cmake方式如下
mkdir build
cd build
cmake ..
make all
make install
make runtest
  1. 测试
$ cd ~/caffe-1.0 # 切换到caffe根目录
$ ./data/mnist/get_mnist.sh # 下载数据集
$  cd examples/mnist
$ ./create_mnist.sh # 转换数据格式
$ ./train_lenet.sh # 训练网络

中间出现的错误:
anaconda2/bin/../lib/libstdc++.so.6: version 'GLIBCXX_3.4.20' not found

解决:conda install libgcc

其他DL框架

mxnet, pylearn2, torch, theano, caffe2, keras

4 其他开发包SDK

OpenCV

从官网(代码托管在Github)下载源代码,3.3.0 安装参考:

基本步骤:

  1. 安装依赖包
  2. 下载源代码并解压
  3. 编译
# 最简单的形式
$ cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
$ make -j7 # -j表示并行进程数目,提高编译速度
$ sudo make install 

cmake指定Python(不要忘了最后的..上级目录):

cmake -D CMAKE_BUILD_TYPE=Release \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D INSTALL_PYTHON_EXAMPLES=ON \
      -D INSTALL_C_EXAMPLES=ON \
      -D PYTHON_EXECUTABLE=/usr/bin/python2.7 ..

4.测试
查询opencv版本号的命令:

pkg-config --modversion opencv

问题:
ippicv包下载失败
参考:http://blog.csdn.net/yiyuehuan/article/details/52951574
github opencv_3rdparty的Branch中搜一下选择最新版

存放的目录和hash值有关:

ipp_file=../ippicv_linux_文件日期.tgz              &&
ipp_hash=$(md5sum $ipp_file | cut -d" " -f1)      &&
ipp_dir=3rdparty/ippicv/downloads/linux-$ipp_hash &&

mkdir -p $ipp_dir &&
cp $ipp_file $ipp_dir

Python 2中使用(编译时选择了Python2):
第二行是添加cv2.so所在路径,可以复制或建立符号链接

>>> import sys
>>> sys.path.append('/usr/local/lib/python2.7/site-packages') 
>>> import cv2
>>> print cv2.__version__

Matlab

Python


参考文档

上一篇下一篇

猜你喜欢

热点阅读