linux 安装 TensorFlow-GPU(1.X.X) CUDA CUDNN各种坑指南

安装环境 centos7 虚拟机 (Ubuntu安装原理相同,命令不同)

TensorFlowGPU版本 1.14.0、1.15.0 测试了两个版本

显卡 Tesla T4

上来就入坑

装了好几次TensorFlow,在 import tensorflow as tf ,一直出现‘非法指令’,最终发现是CPU内核指令级的问题,花费了很多时间排查这个问题...

第一坑

cat  /proc/cpuinfo

先查看一下CPU的flags

processor       : 0
vendor_id       : HygonGenuine
cpu family      : 24
model           : 1
model name      : Hygon C86 7285 32-core Processor
stepping        : 1
microcode       : 0x1000065
cpu MHz         : 2000.000
cache size      : 512 KB
physical id     : 0
siblings        : 2
core id         : 0
cpu cores       : 2
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm art rep_good nopl extd_apicid eagerfpu pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy svm cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw perfctr_core retpoline_amd ssbd ibpb vmmcall fsgsbase tsc_adjust bmi1 avx2 smep bmi2 rdseed adx smap clflushopt sha_ni xsaveopt xsavec xgetbv1 clzero xsaveerptr virt_ssbd arat npt nrip_save arch_capabilities

如果flags中只有 sse、sse2这两项,就会因为指令集出现‘非法指令’的问题,要升级为上图的形式才可以,包含 sse、sse2、sse4_1、sse4_2,具体需要查询相关的知识,不在这里展开

目前linux上面默认安装的是 Python 2.7.5,一般情况是安装conda环境,然后用conda虚拟一个TensorFlow环境,然后在这个环境下安装TensorFlow,但是我们这次直接在linux系统上安装TensorFlow,相当于直接在物理机上安装

因为这个linux是虚拟出来的,所以有一定的安全性,如果是真的物理机,不建议大家这样操作,连系统都会提示大家

WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv

我们进行NVIDIA显卡驱动的安装,本次使用的是Tesla T4,大家对于自己的显卡进行相应安装就可以

第二坑

安装NVIDIA显卡驱动后,会显示相应信息

# nvidia-smi

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.106.00   Driver Version: 460.106.00   CUDA Version: 11.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Tesla T4            Off  | 00000000:06:10.0 Off |                    0 |
| N/A   55C    P0    27W /  70W |      0MiB / 15109MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

其中显示了 NVIDIA-SMI的版本和驱动的版本,两个版本是一样的

还显示了CUDA Version: 11.2 ,CUDA版本,但实际上这个时候并没有安装CUDA,这个是NVIDIA自带的CUDA,我们后续还需要自己安装

参照表进行CUDA版本的选择,本次安装的是CUDA 10.(如果这个表中没有,大家需要自己找一下对应表),下载地址 https://developer.nvidia.com/cuda-toolkit-archive

具体安装步骤可以参考 https://blog.csdn.net/weixin_48185819/article/details/107953955

安装完成后需要配置环境变量,输入nvcc -V,验证安装

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

此时是CUDA10.0,大家可以看到

但是如果输入 nvidia-smi,还是会显示 CUDA 11.2,不用理它,以自己安装的为准

下一步安装 cudnn

具体安装步骤可以参考 https://blog.csdn.net/weixin_48185819/article/details/107953955

也需要找到相关对应版本(如果这个表中没有,大家需要自己找一下对应表)

其实就是几个copy操作,就像小时候玩游戏,将几个文件拷贝到指定目录下才能玩

至此我们安装了CUDA,CUDNN,就结束了

接下来是安装TensorFlow需要的环境

目前linux上面默认安装的是 Python 2.7.5,我们需要安装更高版本的python

此次安装的是Python 3.6.8,具体步骤可以参考https://blog.csdn.net/weixin_48185819/article/details/122586200?spm=1001.2014.3001.5501

第三坑

在系统中会存在两个python版本,python2、python3

大家一定要注意软连接的问题,在安装python3时,一定记住python3的安装路径,因为系统在输入python是指向的是python2,我们将python2的原软连接删除,重新指向了输入命令python2,然后新建了新的软连接python3指向了命令python

which python 定位python
/usr/bin/python

rm /usr/bin/python
rm:是否删除符号链接 "/usr/bin/python"?


ln -s /usr/local/python3/bin/python3.6 /usr/bin/python

首先定位python的位置,然后删除软连接,注意是 ‘删除符号链接’,不是删除文件,这个在操作时要注意一下,然后一定要建立新的软连接,不然后续会找不到python

我们的python3的安装位置是 /usr/local/python3/bin/python3.6,将这个位置指向了/usr/bin/python,此时我们输入python时,就进入到了python3, python2就进入到了python2,两个版本共存

python

Python 3.6.8 (default, Jan 20 2022, 17:26:16) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
>>> 
>>> 



python2

Python 2.7.5 (default, Oct 14 2020, 14:45:30) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 
>>> 

关于软连接构建两个版本共存,参考  https://blog.csdn.net/weixin_48185819/article/details/122586200?spm=1001.2014.3001.5501

第四坑

pip install tensorflow-gpu==1.14.0  -i https://pypi.douban.com/simple/

使用pip安装TensorFlow时,使用豆瓣源会速度快一点

此时使用pip,可能使用的是python2的pip,大家有了上面的经验,应该意识到是软连接的问题,所以我们删除目前pip软连接,建立python3中pip的软连接

whereis python3

python3: /usr/lib/python3.6 /usr/lib64/python3.6 /usr/local/lib/python3.6 /usr/include/python3.6m /usr/local/python3 /usr/share/man/man1/python3.1.gz

如果忘记了安装位置,可以用whereis找一下,我们找到python3相关的pip3,然后建立软连接

ln -s /usr/bin/pip3  /usr/local/bin/pip

大家的位置不一定和我一样,根据实际情况改一下

此时使用pip安装软件时,就是使用的pip3

下面我们使用pip安装TensorFlow

pip install tensorflow-serving-api==1.15.0 -i https://pypi.douban.com/simple/

安装完成后,测试GPU显示True,说明GPU可以正常使用,如果是False,根据相关问题进行排查,可以参考 https://blog.csdn.net/weixin_48185819/article/details/107953955

import tensorflow as tf
tf.test.is_gpu_available()


2021-01-05 10:09:11.372576: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcudart.so.10.0
2021-01-05 10:09:11.374501: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcublas.so.10.0
2021-01-05 10:09:11.376425: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcufft.so.10.0
2021-01-05 10:09:11.376776: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcurand.so.10.0
 
2021-01-05 10:09:11.408957: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1326] Created TensorFlow device (/device:GPU:1 with 30555 MB memory) -> physical GPU (device: 1, name: Graphics Device, pci bus id: 0000:b1:00.0, compute capability: 7.0)
True

还有各种问题,可以容易找到解决办法的没有在这里说明,欢迎大家补充

猜你喜欢

转载自blog.csdn.net/weixin_48185819/article/details/122622101