CentOS 7安裝GPU、Cuda、Tensorflow


一、安裝前准備工作

1、查看當前服務器的顯卡

  • 查看VGA接口顯卡:lspci | grep VGA
  • 查看Nvidia:lspci | grep NVIDIA
[root@localhost ~]# lspci | grep VGA
00:02.0 VGA compatible controller: Cirrus Logic GD 5446
[root@localhost ~]# lspci | grep NVIDIA
00:1a.0 3D controller: NVIDIA Corporation GV100GL [Tesla V100 PCIe] (rev a1)

這里結果中的“00:”前綴,表示該顯卡是虛擬機上掛載的顯卡。

2、查看是否有歷史安裝

  • 執行如下命令:
nvidia-smi

如果沒有找到命令,則說明驅動沒有安裝。

  • 執行如下命令:
nvcc -V

如果沒有找到命令,則說明cuda沒有安裝。如果已經安裝cuda,則會出現如下結果:

 [root@neuron ~]# nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2017 NVIDIA Corporation
Built on Fri_Sep__1_21:08:03_CDT_2017
Cuda compilation tools, release 9.0, V9.0.176

3、禁用nouveau

  • 可選,我驗證結果是沒有重啟機器仍然可以安裝。

(1)查看系統自帶的驅動:

lsmod | grep nouveau

如果有結果,則說明存在nouveau。沒有則直接跳過這一步。

(2)編輯如下文件:

vim /usr/lib/modprobe.d/dist-blacklist.conf

然后在最后添加如下內容:

blacklist nouveau
options nouveau modeset=0

(3)重啟服務器。

4、 安裝基礎rpm依賴包

  • 安裝Nvidia驅動所需要的依賴包為kernel-devel、gcc、dkms。
  • 驗證cudn,編譯並運行驗證Sample代碼所需要的依賴包為gcc-c++。

(1)確認並安裝對應服務器內核版本的kernel-devel包。

首先確認當前服務器的內核版本:

[root@localhost gpu-software]#  uname -r
3.10.0-862.el7.x86_64

然后查看當前yum環境中提供的kernel-devel包的版本:

[root@localhost gpu-software]# yum list|grep kernel-devel
kernel-devel.x86_64                     3.10.0-862.el7                 http239

yum提供的kernel-devel的版本是不是和當前服務器內核版本一致,如果一致則直接安裝,不一致則更換一個和當前內核一致的版本。

(2)可選:添加一個合適的yum源,因為默認的yum源沒有dkms包。參考yum源如下:

cat /etc/yum.repos.d/epel.repo

[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=http://mirrors.aliyun.com/epel/7/$basearch
failovermethod=priority
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

[epel-debuginfo]
name=Extra Packages for Enterprise Linux 7 - $basearch - Debug
baseurl=http://mirrors.aliyun.com/epel/7/$basearch/debug
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=0

[epel-source]
name=Extra Packages for Enterprise Linux 7 - $basearch - Source
baseurl=http://mirrors.aliyun.com/epel/7/SRPMS
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=0

(3)安裝rpm包。

[root@localhost ~]# yum install gcc dkms gcc-c++

二、安裝Nvidia驅動

1、安裝驅動

./NVIDIA-Linux-x86_64-418.87.00.run --kernel-source-path=/usr/src/kernels/3.10.0-862.el7.x86_64
  • 注意如下選項:

Would you like to register the kernel module sources with DKMS? This will allow DKMS to automatically build a new module, if you install a different kernel later.

這里選擇Yes。

  • 安裝結束后,執行如下命令可以查看顯卡信息:
nvidia-smi

2、查看顯卡基本信息

  • 執行“nvidia-smi”命令后,能看到類似下面對表格:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 410.73       Driver Version: 410.73       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  GeForce GTX 108...  Off  | 00000000:01:00.0  On |                  N/A |
| 35%   44C    P8    18W / 250W |   4694MiB / 11176MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   1  GeForce GTX 108...  Off  | 00000000:02:00.0 Off |                  N/A |
| 33%   38C    P8    17W / 250W |     12MiB / 11178MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1846      G   /usr/bin/X                                    29MiB |
|    0      1903      G   /usr/bin/gnome-shell                          15MiB |
|    0     11521      C   ./darknet_gpu                               2319MiB |
|    0     32297      C   ./darknet                                   2319MiB |
+-----------------------------------------------------------------------------+
  • 第一行表示當前顯卡驅動的版本和顯卡支持的CUDA的版本,注意:這里支持CUDA的版本是只能夠支持的最高版本,是可以向下兼容的。
  • 下面的表格中:
    • GPU:本機的GPU編號。
    • NAME:GPU名稱。
    • Persistence-M:驅動常駐模式,如果設置為ON,則GPU功耗大但是啟動新deGPU應用花費的時間更少。
    • Fan:風扇轉速百分比。
    • Temp:顯卡溫度。
    • Perf:當前的性能狀態,P0最高,P12最低。
    • Pwr:但前能耗。
    • Bus-Id:GPU總線。
    • Disp.A:GPU顯示功能是否初始化。
    • Memory-Usage:顯存的使用情況。
    • Volatile GPU-Util:浮動的GPU利用率。
    • ECC:未知。
    • Compute M:計算模式。
    • Processes:每塊GPU的進程情況。

三、安裝cuda和cuDNN

1、確定要下載的版本

  • CUDA:GPU編程的語言函數。CUDA 版本 (對應)> Tensorflow 版本。
  • cuDNN:深度學習/矩陣運算的加速庫。 CUDA 版本 (對應)> cuDNN 版本。
  • 顯卡驅動(CUDA驅動):向下兼容的,可以一直保持最新。
  • 下載cuda的地址如下:https://developer.nvidia.com/cuda-toolkit-archive
    這里選擇cuda-9.0的版本。(請注意附錄中關於cuda-9.2和Tensorflow的問題)這里選擇了cuda_9.0.176_384.81_linux.run進行安裝。
  • 下載cuDNN需要在官網上注冊后才能下載。

2、安裝cuda

執行如下命令:

sh cuda_9.0.176_384.81_linux.run

# 然后將文件翻到最后,進行一些選項。
-----------------
Do you accept the previously read EULA?
accept/decline/quit: accept

# 非常關鍵,我們已經在之前安裝了高版本的驅動,這個千萬別裝。
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 384.81?
(y)es/(n)o/(q)uit: n

Install the CUDA 9.0 Toolkit?
(y)es/(n)o/(q)uit: y

Enter Toolkit Location
 [ default is /usr/local/cuda-9.0 ]:

Do you want to install a symbolic link at /usr/local/cuda?
(y)es/(n)o/(q)uit: y

Install the CUDA 9.0 Samples?
(y)es/(n)o/(q)uit: y

Enter CUDA Samples Location
 [ default is /root ]:

Installing the CUDA Toolkit in /usr/local/cuda-9.0 ...

===========
= Summary =
===========

Driver:   Not Selected
Toolkit:  Installed in /usr/local/cuda-9.0
Samples:  Installed in /root, but missing recommended libraries

Please make sure that
 -   PATH includes /usr/local/cuda-9.0/bin
 -   LD_LIBRARY_PATH includes /usr/local/cuda-9.0/lib64, or, add /usr/local/cuda-9.0/lib64 to /etc/ld.so.conf and run ldconfig as root

To uninstall the CUDA Toolkit, run the uninstall script in /usr/local/cuda-9.0/bin

Please see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-9.0/doc/pdf for detailed information on setting up CUDA.

***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 384.00 is required for CUDA 9.0 functionality to work.
To install the driver using this installer, run the following command, replacing <CudaInstaller> with the name of this run file:
    sudo <CudaInstaller>.run -silent -driver

Logfile is /tmp/cuda_install_24940.log

千萬注意上面中的這個選項:

Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 384.81?

這里一定要選擇“n”,因為我們之前已經安裝過了顯卡驅動。安裝結果提示有問題也不用管,我們可以做后面的驗證。

  • 配置環境變量,修改/etc/profile文件,添加如下配置:
export PATH=${PATH}:/usr/local/cuda/bin
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/cuda/lib64

然后執行:

source /etc/profile
  • 驗證cuda以及版本,執行如下命令:
[root@aicloud-1 ~]# nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2017 NVIDIA Corporation
Built on Fri_Sep__1_21:08:03_CDT_2017
Cuda compilation tools, release 9.0, V9.0.176
  • 如果前面安裝了CUDA的example,這里可以執行如下操作:
[root@aicloud-1 ~]# cd /root/NVIDIA_CUDA-9.0_Samples/1_Utilities/deviceQuery
[root@aicloud-1 deviceQuery]# make

等編譯完成后,執行“deviceQuery”命令:

[root@aicloud-1 deviceQuery]# ./deviceQuery
./deviceQuery Starting...

 CUDA Device Query (Runtime API) version (CUDART static linking)

Detected 1 CUDA Capable device(s)

Device 0: "Tesla V100-PCIE-16GB"

3、安裝cuDNN

  • 解壓cuDNN的包:
tar -xvf cudnn-9.0-linux-x64-v7.tgz

注意這里解壓后的文件目錄叫做“cuda”。

  • 將解壓后的文件復制到cuda的安裝后的目錄中:
cp cuda/include/cudnn.h /usr/local/cuda-9.0/include
cp cuda/lib64/libcudnn* /usr/local/cuda-9.0/lib64

  • 將上面復制后的文件全部添加“a+r”權限:
chmod a+r /usr/local/cuda-9.0/include/cudnn.h  /usr/local/cuda-9.0/lib64/libcudnn*

附、幾個重要的問題

(1)關於cuda和tensorflow版本問題。

因此,下載cuda之前首先要了解tensorflow與cuda版本之間的對應關系。

TF版本 cuda版本 cuDNN版本
tenfowflow_gpu-1.0.0 ~ tenfowflow_gpu-1.2.0 8 5.1
tenfowflow_gpu-1.3.0 ~ tenfowflow_gpu-1.4.0 8 6
tenfowflow_gpu-1.5.0 ~ tenfowflow_gpu-1.12.0 9 7
tenfowflow_gpu-1.13.1 10 7.4 10 7.4
  • 注意下面的問題!!
    經過驗證發現如下問題:tensorflow_gpu-1.8.0,其官方說明是支持cuda版本為9。但是如果安裝了cuda-9.2,那么在安裝完成TF后,執行import的時候,會報錯誤:

ImportError: libcublas.so.9.0: cannot open shared object file: No such file or directory。

因為安裝后的so文件為libcublas.so.9.2,如果我們在“/usr/local/cuda-9.2/lib64”中手動添加了軟連接libcublas.so.9.0后,會報另外的錯誤:

ImportError: /usr/local/cuda/lib64/libcublas.so.9.0: version `libcublas.so.9.0' not found (required by /home/linxueqin/python3/lib/python3.6/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so)

這種情況說明tensorflow_gpu-1.8.0源碼編譯的時候已經寫死了cuda的版本是9.0。因此需要把cuda版本切換成9.0。這個問題在其他tensorflow的版本中沒有驗證。
但是為了不走彎路,請安裝cuda-9.0。

(2)擴展:關於tensorflow的CPU版本問題。

  • tensorflow在1.6.0開始,是在支持AVX指令集的CPU服務器中編譯的。因此,如果當前服務器的CPU不支持AVX指令集,則最高只能安裝tensorflow-1.5.0版本,否則在python中依賴tensorflow的時候就會出現如下錯誤:
Illegal instruction (core dumped)

在GPU版本中也會存在這個問題。因此,在安裝Tensorflow的時候,應該按照如下操作:

  1. 驗證當前服務器是否支持AVX指令集:

方法1:執行如下命令

cat /proc/cpuinfo |grep avx

如果沒有結果,則說明不支持AVX指令集,否則就會出現如下內容:

[root@neuron cuda9]# cat /proc/cpuinfo |grep avx
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp spec_ctrl intel_stibp flush_l1d

方法2:執行如下命令

gcc -march=native -Q --help=target|grep march

如果支持avx則是如下顯示(會包含avx,這里是avx版本2):

[root@neuron cuda9]# gcc -march=native -Q --help=target|grep march
  -march=                     		core-avx2

否則,可能會顯示如下內容(不包含avx):

[root@aicloud-1 nvidia-soft]# gcc -march=native -Q --help=target|grep march
  -march=                     		core2

  1. 如果支持avx指令集,可以安裝 tensorflow 1.6.0及以上的版本。
  2. 如果不支持,最高只能安裝 tensorflow 1.5.0的版本。

(3)擴展:Linux顯存持續占用問題。

  • 通過nvidia-smi查看GPU狀態:
[root@aicloud-1 ~]# nvidia-smi
Wed Aug 28 11:53:08 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 418.87.00    Driver Version: 418.87.00    CUDA Version: 10.1     |
|-------------------------------+----------------------+----------------------+
| 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 V100-PCIE...  Off  | 00000000:00:1A.0 Off |                  Off |
| N/A   29C    P0    35W / 250W |  16115MiB / 16130MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      3466      C   python3                                      509MiB |
+-----------------------------------------------------------------------------+

可以發現,GPU的顯存已經占滿,但是下面的進程列表卻沒有顯示。

而且,實際在運行python代碼的時候,卻出現如下問題,說明GPU顯存沒有被釋放。

failed to allocate 15.26M(15997184 bytes) from device : CUDA_ERROR_OUT_OF_MEMORY

執行如下代碼,可以查看當前實際占用顯存的進程號:

[root@aicloud-1 ~]# fuser /dev/nvidia*
25911 25912 25913 25914 25915 25916 25917 25918 25919 25924 25926 25927 25928 25929 25930 25931 25932 25933 25934 25935 25936 25939 25940 25941 25942 25943 25944 25945 25947 25948 25950 25957

將這些進程全部殺掉后再次執行,則發現顯存已經釋放:

[root@aicloud-1 ~]# kill -9 25911 25912 25913 25914 25915 25916 25917 25918 25919 25924 25926 25927 25928 25929 25930 25931 25932 25933 25934 25935 25936 25939 25940 25941 25942 25943 25944 25945 25947 25948 25950 25957
[root@aicloud-1 ~]# nvidia-smi
Wed Aug 28 12:04:25 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 418.87.00    Driver Version: 418.87.00    CUDA Version: 10.1     |
|-------------------------------+----------------------+----------------------+
| 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 V100-PCIE...  Off  | 00000000:00:1A.0 Off |                  Off |
| N/A   32C    P0    35W / 250W |      0MiB / 16130MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+
[root@aicloud-1 ~]#



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM