美文网首页我爱编程
深度学习配置机器:Nvidia + Ubuntu + DL框架

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

作者: 齐州读经客 | 来源:发表于2017-09-23 14:58 被阅读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等框架安装失败)。

    下载最新版本:

    • cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb
    • cuda-repo-ubuntu1604-8-0-local-cublas-performance-update_8.0.61-1_amd64.deb (这是更新包)
    $ 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)

    • cudnn-8.0-linux-x64-v7.tgz
    # 解压
    $ 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,参见官网
    几个注意点:

    • 自己编译生成后的默认的whl不要修改名字,否则安装会有问题
    • bazel 尽量下载最新版本
    • 选项均选择默认,使用GPU需要配置cuda等选项;
      • 部分选项导致编译异常如:ERROR: missing input file '//third_party/mpi:mpio.h'.

    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)还有其他的依赖包

    • 通用的以来包 libXXX
    $ 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
    
    • CUDA包
    • BLAS包:3选1(BLAS实现了基本的线性代数运算)
    $ 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


    参考文档

    相关文章

      网友评论

        本文标题:深度学习配置机器:Nvidia + Ubuntu + DL框架

        本文链接:https://www.haomeiwen.com/subject/sczxextx.html