Tensorflow compile from source

GPU 编译环境配置:

0、GPU驱动安装:

首先根据本机的显卡版本,确定nvidia显卡的驱动版本,然后根据驱动版本确定CUDA toolkit的版本。
\1. 查看显卡类型

1
2
$ lspci | grep -i nvidia
00:07.0 3D controller: NVIDIA Corporation TU104GL [Tesla T4] (rev a1)

显示所有的pci设备信息 lspci

Linux 驱动安装

Linux GPU驱动安装采用 Shell 脚本安装方式,适用于任何 Linux 发行版,包括 CentOS,Ubuntu 等。

NVIDIA Telsa GPU 的 Linux 驱动在安装过程中需要编译 kernel module,系统需提前安装 gcc 和编译 Linux Kernel Module 所依赖的包,例如 kernel-devel-$(uname -r) 等。

  1. 执行以下命令,检查当前系统中是否已安装 dkms。

    1
    2
    $ rpm -qa | grep -i dkms
    dkms-2.8.4-1.el7.noarch

    返回结果如下图,则表示已安装 dkms。

    img

    如未安装 dkms,则执行以下命令进行安装。

    1
    $ sudo yum install -y dkms
  2. 登录 NVIDIA 驱动下载 或访问 http://www.nvidia.com/Download/Find.aspx。

  3. tensorflow cuda版本要求
    https://www.tensorflow.org/install/source?hl=zh-cn#linux DeepRec要求CUDA版本=11.2

  4. 选择操作系统和安装包,并单击【SEARCH】搜寻驱动,选择要下载的驱动版本。注意要选Linux 64-bit,而不是RHEL8

  5. 依次执行以下命令,检查当前系统中是否已安装 gcc 和 kernel-devel 包。

    1
    $ rpm -qa | grep kernel-devel
    1
    $ rpm -qa | grep gcc

    返回结果如下,则表示已安装 gcc 和 kernel-devel。
    img
    如未安装,则请执行以下命令进行安装。

    1
    $ sudo yum install -y gcc kernel-devel
  6. 执行以下命令,运行驱动安装程序,并按提示进行后续操作。

    1
    $ sudo sh NVIDIA-Linux-x86_64-418.126.02.run
  7. 安装完成后,执行以下命令进行验证。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    $ nvidia-smi
    Fri Sep 3 20:00:41 2021
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 410.129 Driver Version: 410.129 CUDA Version: 10.0 |
    |-------------------------------+----------------------+----------------------+
    | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
    | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
    |===============================+======================+======================|
    | 0 Tesla T4 On | 00000000:00:07.0 Off | 0 |
    | N/A 31C P8 9W / 70W | 0MiB / 15079MiB | 0% Default |
    +-------------------------------+----------------------+----------------------+

    +-----------------------------------------------------------------------------+
    | Processes: GPU Memory |
    | GPU PID Type Process name Usage |
    |=============================================================================|
    | No running processes found |
    +-----------------------------------------------------------------------------+

    如返回信息类似下图中的 GPU 信息,则说明驱动安装成功。

    img

Docker安装:https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker

# Step 1:download docker image
CPU version: sudo docker pull registry.cn-shanghai.aliyuncs.com/pai-dlc/tensorflow-developer:1.15deeprec2106-cpu-py36-ubuntu18.04

GPU version: sudo docker pull registry.cn-shanghai.aliyuncs.com/pai-dlc/tensorflow-developer:1.15deeprec2106-gpu-py36-cu110-ubuntu18.04
# Step 2:enter docker with GPU
sudo docker run -it –name=’cpu’ –network=host registry.cn-shanghai.aliyuncs.com/pai-dlc/tensorflow-developer:1.15deeprec2106-cpu-py36-ubuntu18.04 /bin/bash

sudo docker run –gpus all -it –name=’gpu’ –network=host registry.cn-shanghai.aliyuncs.com/pai-dlc/tensorflow-developer:1.15deeprec2106-gpu-py36-cu110-ubuntu18.04 /bin/bash

sudo docker run –gpus all -it –name=’gpu’ –network=host registry.cn-shanghai.aliyuncs.com/pai-dlc/tensorflow-developer:1.15deeprec2106-gpu-py36-cu110-ubuntu18.04 bash

# Step 3:compile DeepRec

CUDA安装:

下载CUDA文件

下载最新的CUDA软件安装包, CUDA Toolkit 9.2 Download。

\4. 安装过程的选项选择

(1). 会先有个阅读声明,一直按D即可,然后accept。
(2). 选项install nvidia accelerated Graphics Driver,输入n,因为我们已经安装了nvidia的驱动。
(3). 选项install the OpenGL libraries,如果双显卡(集显+独显)选择n,如果只有独显可以选择y,如果双显卡选择y的话,会出现黑屏或者循环登录的问题,如果加了上面的参数就不会出现这个选项了。
(4). 后面的可以都选择yes,最后一个选项我们可以选择n,也就是不复制Samples,因为安装目录下有samples。

安装过程结束后会有以下信息:

Driver :Installed
Toolkit :Installed in /usr/local/cuda-9.2
Samples :Installed in /home/vincent

代表安装完成,但是不代表成功。这时需要重启。

\5. 验证cuda是否成功安装

重启进入界面,打开终端输入:

export PATH=”/usr/local/cuda-9.2/bin:$PATH”
export LD_LIBRARY_PATH=”/usr/local/cuda-9.2/lib64:$LD_LIBRARY_PATH”

这两条命令是将cuda的bin文件和lib导出到系统环境中。
如果安装的版本不是一样的,更换路径中的cuda-9.2。

(1). 终端输入:

1
2
3
4
5
$ nvcc -V
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

如果有CUDA的版本信息代表正常。

(2). 编译samples例子

#编译并测试设备 deviceQuery:
cd /usr/local/cuda-9.2/samples/1_Utilities/deviceQuery
sudo make
./deviceQuery

#编译并测试带宽 bandwidthTest:
cd ../bandwidthTest
sudo make
./bandwidthTest

如果这两个测试的最后结果都是Result = PASS,说明CUDA安装成功啦。

备注:
如果安装失败,有可能是缺少依赖,终端执行:

sudo apt-get install freeglut3-dev
build-essential
libx11-dev
libxmu-dev
libxi-dev
libgl1-mesa-glx
libglu1-mesa
libglu1-mesa-dev

(6). 将cuda的bin和lib写入系统环境

打开~.bashrc文件在末尾追加两句:

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

然后退出重新打开终端即可。

CUDA卸载
CUDA默认安装在 /usr/local/cuda-9.2下,用下面的命令卸载::

sudo /usr/local/cuda-9.2/bin/uninstall_cuda-9.2.pl
NVIDIA驱动卸载:

sudo /usr/bin/nvidia-uninstall
卸载过程一路都是yes。
————————————————
CUDNN安装:https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html

tar -zxvf cudnn-10.0-linux-x64-v7.4.2.24.tgz
sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*

验证CUDNN 7.1 for CUDA 9.0是否安装成功
使用如下命令将示例代码复制到当前用户目录,编译并运行其中的一个示例程序mnistCUDNN:

cp -r /usr/src/cudnn_samples_v7/ ~
cd ~/cudnn_samples_v7/mnistCUDNN
make clean && make
./mnistCUDNN