装了好几次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
还有各种问题,可以容易找到解决办法的没有在这里说明,欢迎大家补充