Python Tensorflow docker映像无法导入Tensorflow库,但相同的设置是否适用于裸机?

Python Tensorflow docker映像无法导入Tensorflow库,但相同的设置是否适用于裸机?,python,docker,tensorflow,nvidia-docker,Python,Docker,Tensorflow,Nvidia Docker,我在一台具有以下CPU和GPU属性的计算机上安装了Ubuntu 18.04 ..$cat /proc/cpuinfo/ ... 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_p

我在一台具有以下CPU和GPU属性的计算机上安装了Ubuntu 18.04

..$cat /proc/cpuinfo/
...
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 cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor
ds_cpl vmx est tm2 ssse3 sdbg cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer
aes xsave rdrand lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single pti ssbd ibrs ibpb stibp
tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust smep erms invpcid mpx rdseed smap
clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm arat pln pts hwp hwp_notify hwp_act_window
hwp_epp md_clear flush_l1d

..$ nvidia-smi
Sat Nov 16 13:41:35 2019       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 430.26       Driver Version: 430.26       CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| 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 106...  Off  | 00000000:01:00.0  On |                  N/A |
|  8%   56C    P0    37W / 150W |    216MiB /  3016MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
...
+-------------------------------+----------------------+----------------------+
|   7  GeForce GTX 106...  Off  | 00000000:07:00.0 Off |                  N/A |
|  0%   26C    P8     5W / 150W |      2MiB /  3019MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
需要注意的是,我的CPU不支持
AVX
AVX2
指令。此外,我还安装了CUDA和英伟达驱动程序(以及<代码> Nvidia DokKue/COD>)。p>
在我的裸机系统上安装了
tensorflow:1.14.0
。由于我所面临的问题,我特意对此版本进行了更好的解释;在tensorflow 1.15.0之后,默认使用
AVX
指令。在我的裸机上安装了这个版本的tensorflow,我可以导入库并成功地训练模型

(base) :~$ conda list
# packages in environment at /home/kevin/anaconda3:
#
# Name                    Version                   Build  Channel
...
keras                     2.2.4                         0  
keras-applications        1.0.8                      py_0  
keras-base                2.2.4                    py37_0  
keras-preprocessing       1.1.0                      py_1  
...
python                    3.7.3                h0371630_0  
...
tensorboard               1.14.0           py37hf484d3e_0  
tensorflow                1.14.0          mkl_py37h45c423b_0  
tensorflow-base           1.14.0          mkl_py37h7ce6ba3_0  
tensorflow-estimator      1.14.0                     py_0  
...
(base) :~$ python -c "import tensorflow"
(base) :~$ 
虽然我的问题出现在尝试使用tensorflow docker映像时,该映像是由以下Dockerfile生成的

FROM tensorflow/tensorflow:1.14.0-gpu-py3
LABEL description="SRCNN-Nvidia-Docker-Keras"
WORKDIR /app
# Install the libraries required for opencv-python
RUN apt-get update
RUN apt-get install -y libsm6 libxext6 libxrender-dev
# Install the required python libraries
ADD library-requirements.txt .
RUN pip install -r library-requirements.txt
# Create a mount point in the container to link file systems
VOLUME /app/SRCNN
# library-requiremnets: keras, numpy, matplotlib, h5py, pillow, opencv-python, scipy
虽然在容器中无法导入tensorflow,但我可以成功构建映像并运行容器

root@8a221a7eca5f:/app# pip list
Package              Version 
-------------------- --------
...  
Keras                2.3.1   
Keras-Applications   1.0.8   
Keras-Preprocessing  1.1.0   
...
tensorboard          1.14.0  
tensorflow-estimator 1.14.0  
tensorflow-gpu       1.14.0  
...
root@8a221a7eca5f:/app# python -c "import tensorflow"
Illegal instruction (core dumped)
root@8a221a7eca5f:/app# 

据我所知,我应该看到
非法指令
错误的唯一原因是由于没有
AVX
指令而试图加载
tensorflow
>1.15.0。不过,使用1.14版时,我可以在裸机上导入,但不能在1.14版docker容器中导入

这还有什么原因?


我唯一真正的解决方案是在docker映像中从源代码编译tensorflow吗?

如果罪魁祸首是AVX支持(我认为是这种情况),而不是编译你自己,你可以使用-没有AVX编译的很少。

啊,现在我想起来了。tensorflow 1.14和1.15 docker图像是在过去几个月或几周内编辑的。可能是在它们建成时,它们实际上并没有关闭AVX,因为它们是最近建成的。在尝试安装各种轮子之后,它们发生故障,并尝试从源代码进行编译(在我的小G3930上花费了约22个小时),我选择了最简单的解决方案。我刚为这台机器买了一个新的CPU。这也是一个解决方案,但也有可能,如果你对CPU的使用还满意,你也可以使用谷歌云平台、azure等的免费试用版,并在试用期间免费使用这些平台的资源(但你不能在谷歌云平台上免费试用gpu或tpu)大多数审判都非常慷慨。。。