The TensorFlow library was compiled to use SSE instructions, but these aren't available on your machine. : How to solve this?
Asked Answered
R

1

6

i compiled Tensorflow with bazel on my Ubuntu 17.04 32bit and I installed the resulted .whl with pip. But when i try to import tensorflow, I got this error

palash@ash:~$ python
Python 3.6.0 |Anaconda custom (32-bit)| (default, Dec 23 2016, 12:22:10) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow
F tensorflow/core/platform/cpu_feature_guard.cc:35] The TensorFlow library was compiled to use SSE instructions, but these aren't available on your machine.
Aborted (core dumped)

my bazel version:

palash@ash:~$ bazel version
Build label: 0.4.5- (@non-git)
Build target: bazel-out/local-opt/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar
Build time: Fri May 19 01:31:26 2017 (1495157486)
Build timestamp: 1495157486
Build timestamp as int: 1495157486

my system provided gcc info:

palash@ash:~$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-linux-gnu/6/lto-wrapper
Target: i686-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 6.3.0-12ubuntu2' --with-bugurl=file:///usr/share/doc/gcc-6/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-6 --program-prefix=i686-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-6-i386/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-6-i386 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-6-i386 --with-arch-directory=i386 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --with-target-system-zlib --enable-objc-gc=auto --enable-targets=all --enable-multiarch --disable-werror --with-arch-32=i686 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu
Thread model: posix
gcc version 6.3.0 20170406 (Ubuntu 6.3.0-12ubuntu2) 

here is my "cat /proc/cpuinfo" output:

palash@ash:~$ cat /proc/cpuinfo
processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 58
model name  : Intel(R) Pentium(R) CPU G2020 @ 2.90GHz
stepping    : 9
microcode   : 0x19
cpu MHz     : 1861.883
cache size  : 3072 KB
physical id : 0
siblings    : 2
core id     : 0
cpu cores   : 2
apicid      : 0
initial apicid  : 0
fdiv_bug    : no
f00f_bug    : no
coma_bug    : no
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 dts acpi mmx fxsr sse sse2 ss ht tm pbe nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 popcnt tsc_deadline_timer xsave lahf_lm epb tpr_shadow vnmi flexpriority ept vpid fsgsbase smep erms xsaveopt dtherm arat pln pts
bugs        :
bogomips    : 5787.11
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 48 bits virtual
power management:

processor   : 1
vendor_id   : GenuineIntel
cpu family  : 6
model       : 58
model name  : Intel(R) Pentium(R) CPU G2020 @ 2.90GHz
stepping    : 9
microcode   : 0x19
cpu MHz     : 1935.693
cache size  : 3072 KB
physical id : 0
siblings    : 2
core id     : 1
cpu cores   : 2
apicid      : 2
initial apicid  : 2
fdiv_bug    : no
f00f_bug    : no
coma_bug    : no
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 dts acpi mmx fxsr sse sse2 ss ht tm pbe nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 popcnt tsc_deadline_timer xsave lahf_lm epb tpr_shadow vnmi flexpriority ept vpid fsgsbase smep erms xsaveopt dtherm arat pln pts
bugs        :
bogomips    : 5787.11
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 48 bits virtual
power management:

Edit: if I add 'O2' while using './configure', I got this:

palash@ash:/media/palash/MULTIMEDIA/tensorflow$ bazel build --local_resources 2048,.5,1.0 --config=opt //tensorflow/tools/pip_package:build_pip_package
WARNING: /media/palash/MULTIMEDIA/tensorflow/tensorflow/contrib/learn/BUILD:15:1: in py_library rule //tensorflow/contrib/learn:learn: target '//tensorflow/contrib/learn:learn' depends on deprecated target '//tensorflow/contrib/session_bundle:exporter': Use SavedModel Builder instead.
WARNING: /media/palash/MULTIMEDIA/tensorflow/tensorflow/contrib/learn/BUILD:15:1: in py_library rule //tensorflow/contrib/learn:learn: target '//tensorflow/contrib/learn:learn' depends on deprecated target '//tensorflow/contrib/session_bundle:gc': Use SavedModel instead.
INFO: Found 1 target...
ERROR: /home/palash/.cache/bazel/_bazel_palash/35d3992f70764c5755bc1ae18a968326/external/farmhash_archive/BUILD.bazel:12:1: C++ compilation of rule '@farmhash_archive//:farmhash' failed: gcc failed: error executing command /usr/bin/gcc -U_FORTIFY_SOURCE -fstack-protector -Wall -B/usr/bin -B/usr/bin -Wunused-but-set-parameter -Wno-free-nonheap-object -fno-omit-frame-pointer -g0 -O2 '-D_FORTIFY_SOURCE=1' -DNDEBUG ... (remaining 33 argument(s) skipped): com.google.devtools.build.lib.shell.BadExitStatusException: Process exited with status 1.
gcc: error: O2: No such file or directory
gcc: error: O2: No such file or directory
Target //tensorflow/tools/pip_package:build_pip_package failed to build
Use --verbose_failures to see the command lines of failed build steps.
INFO: Elapsed time: 141.033s, Critical Path: 80.60s
palash@ash:/media/palash/MULTIMEDIA/tensorflow$ 
Roswald answered 20/5, 2017 at 5:5 Comment(8)
https://mcmap.net/q/1917811/-disable-sse4-1-when-compiling-tensorflow/1918193 ? Where did you find a cpu without SSE, is it running in some kind of virtual machine that disables SSE?Swamper
No it's not eunning in virtual machine. It is running in my pc.Roswald
I would be quite surprised if your PC did not support SSE, most likely something in software is disabling it somehow... I assume that cat /proc/cpuinfo shows nothing about sse?Swamper
Then, while configuring the build, unselect the SSE capability, or just use the supplied .whl from Google.Eskisehir
How can i unselect sse capability?Roswald
@marc-glisse I added the output of "cat/proc/cpuinfo"Roswald
Well, your processor and OS do support SSE, no idea why the program thinks otherwise.Swamper
Can anybody tell me how to compile tensorflow without SSE instructions?Roswald
S
1

It seems that -march=native directive does not work properly on 32bit boxes. Using O2 instead solved the problem for me.

You could chose -O2 during configuration

$ ./configure 
Please specify the location of python. [Default is /usr/bin/python]: 
Please specify optimization flags to use during compilation [Default is -march=native]: O2
Stanleystanly answered 22/6, 2017 at 23:36 Comment(4)
I've tried it. But it is not working. Check the question for log.Roswald
gcc: error: O2: No such file or directory Well, it sounds like gcc does not recognize O2 as a directive.Stanleystanly
What can i do now?Roswald
I made the same error: when entering the optimization flags the first time, I entered O2 and received the same No such file or directory message during compilation. The second time I entered -O2 (with a dash) and everything compiled okay.Trisect

© 2022 - 2024 — McMap. All rights reserved.