「TensorFlow」1. 安装 CUDA 和 cuDNN

简述:为了编译 TensorFlow C++,再次踩进 CUDA 之坑。这是一条不归路,但还是必须做个整理记录,因为这也许不是最后一次。


系统环境:

  • OSUbuntu 14.04.6 LTS x64 (trusty)
  • RAM64 GB
  • GPUGTX TITAN x 4

安装版本:

  • CUDA Toolkit:10.0
  • cuDNN:7.4.2

1 更新驱动

  1. 打开 ”附加驱动“ (Ubuntu 14.04 LTS)
    • Ubuntu-desktop + Ubuntu 主题:按 Win 键,搜索”附加驱动“
    • Ubuntu-desktop + Gnome 主题 :左上角”应用程序“ -> 系统工具 -> 首选项 -> 附加驱动
  2. 选择驱动程序:
    • 选择 ”使用 NVIDIA binary driver - version 410.56 来自 nvidia-410 (开源) ”
    • 点击右下角“应用更改”
    • 等待完成驱动更新

update nvidia driver


2 默认安装位置

Component 默认安装位置
CUDA Toolkit /usr/local/cuda-10.0
CUDA Samples $(HOME)/NVIDIA_CUDA-10.0_Samples
cuDNN /usr/lib/x86_64-linux-gnu & /usr/include

3 安装 CUDA

  1. 验证是否安装 gcc

    1
    $ gcc --version

    如果输出如:

    1
    2
    Command 'gcc' not found, but can be installed with:
    sudo apt install gcc

    则意味着当前主机尚未安装 gcc,需运行以下指令进行安装:

    1
    2
    $ sudo apt update
    $ sudo apt install build-essential manpages-dev
  2. 下载

    下载地址:CUDA 10.0

    download cuda

  3. 安装

    • 首先,停用 gdmUbuntu 桌面环境),在命令行界面( Ctrl + Alt + F1 ~ F6 )或者远程连接( SSH )的命令行界面下进行指令输入

      1
      $ sudo service gdm stop
    • 随后,安装 CUDA 以及补丁包,按照命令行提示进行操作

      1
      2
      $ sudo sh cuda_10.0.xxx_xxx.xx_linux.run
      $ sudo sh cuda_10.0.xxx.x_linux.run
    • 最后,恢复桌面环境

      1
      $ sudo service gdm start
  4. 验证是否安装成功,共有三种方法:

    1
    $ nvcc -V

    输出应为:

    1
    2
    3
    4
    nvcc: NVIDIA (R) Cuda compiler driver
    Copyright (c) 2005-2018 NVIDIA Corporation
    Built on Sat_Aug_25_21:08:01_CDT_2018
    Cuda compilation tools, release 10.0, V10.0.130

    1
    $ cat /proc/driver/nvidia/version
    输出应为:
    1
    2
    NVRM version: NVIDIA UNIX x86_64 Kernel Module  418.56  Fri Mar 15 12:59:26 CDT 2019
    GCC version: gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.4)

    1
    $ cat /usr/local/cuda/version.txt

    输出应为:

    1
    CUDA Version 10.0.130
  5. 系统重启

    若出现异常,这里也许能有相似的情况。

  6. 检查
    检查设备文件 /dev/nvidia* 是否存在,且文件权限是否正确 (666)。通常情况下,这些文件会被需要用到 NVIDIA 驱动的应用程序 (如 CUDA 应用或 X server) 经由调用 nvidia-modprobe自动生成。

    但你也可以通过下面的脚本程序,手动创建这些文件。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    #!/bin/bash

    /sbin/modprobe nvidia

    if [ "$?" -eq 0 ]; then
    # Count the number of NVIDIA controllers found.
    NVDEVS=`lspci | grep -i NVIDIA`
    N3D=`echo "$NVDEVS" | grep "3D controller" | wc -l`
    NVGA=`echo "$NVDEVS" | grep "VGA compatible controller" | wc -l`

    N=`expr $N3D + $NVGA - 1`
    for i in `seq 0 $N`; do
    mknod -m 666 /dev/nvidia$i c 195 $i
    done

    mknod -m 666 /dev/nvidiactl c 195 255

    else
    exit 1
    fi

    /sbin/modprobe nvidia-uvm

    if [ "$?" -eq 0 ]; then
    # Find out the major device number used by the nvidia-uvm driver
    D=`grep nvidia-uvm /proc/devices | awk '{print $1}'`

    mknod -m 666 /dev/nvidia-uvm c $D 0
    else
    exit 1
    fi
  7. 配置环境变量

    1
    2
    3
    $ export PATH=/usr/local/cuda-10.1/bin:/usr/local/cuda-10.0/NsightCompute-2019.1${PATH:+:${PATH}}
    $ export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64\
    ${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

    这样设置是临时性的,你可以将之复制到 ~/.bashrc 中,以达到永久设置的目的。


4 安装 cuDNN

  1. 下载

    下载地址:cuDNN 所有版本

    找到 Download cuDNN v7.4.2 (Dec 14, 2018), fro CUDA 10.0,下载三个 DEB 文件(cuDNN Runtime LibrarycuDNN Developer LibrarycuDNN Code Samples and User Guide

    download cudnn

  2. 安装

    1
    2
    3
    $ sudo dpkg -i libcudnn7_7.4.2.xx-1+cuda10.0_amd64.deb  // 运行时库
    $ sudo dpkg -i libcudnn7-dev_7.4.2.xx-1+cuda10.0_amd64.deb // 开发者库
    $ sudo dpkg -i libcudnn7-doc_7.4.2.24-1+cuda10.0_amd64.deb // 代码案例和用户指南
  3. 验证

    1
    $ grep -i cudnn_major -A 2 /usr/include/cudnn.h

    输出应为:

    1
    2
    3
    4
    5
    6
    7
    #define CUDNN_MAJOR 7
    #define CUDNN_MINOR 4
    #define CUDNN_PATCHLEVEL 2
    --
    #define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)

    #include "driver_types.h"

5 问题与解决

  • 无限重复登陆;重启后黑屏,左上角有一下划线不断闪烁:

    解决方案:远程登录 (SSH) ,更新 GPU 驱动至更高版本

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    ssh NAME@IP -p 22
    ......
    ......

    $ ubuntu-drivers devices
    == /sys/devices/pci0000:00/0000:00:03.0/0000:03:00.0/0000:04:10.0/0000:05:00.0 ==
    vendor : NVIDIA Corporation
    modalias : pci:vxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    driver : nvidia-418 - third-party free
    driver : xserver-xorg-video-nouveau - distro free builtin
    driver : nvidia-415 - third-party free
    driver : nvidia-430 - third-party free recommended
    driver : nvidia-384 - third-party non-free
    driver : nvidia-410 - third-party free

    $ sudo apt install nvidia-xxx

    $ sudo reboot
  • 启动并登陆系统后只显示壁纸,无顶栏与左侧快捷栏

    解决方案有两种:

    1. 新建一个用户账号,注销当前账号,换用新账号登陆。原理未知。
    2. 换用系统主题 (Ubuntu -> 其他)。在刚启动系统,进行账号登录时,在登录按钮左边有一个齿轮状的按钮,点击一下你就了解了。

6 参考


7 系列

  1. 「TensorFlow」1. 安装 CUDA 和 cuDNN
  2. 「TensorFlow」2. 编译 TensorFlow C++

以上!


作者

Alex

发布于

2019-10-22

更新于

2021-06-19

许可协议

评论