tensorflow: libstdc++.so.6: version `CXXABI_1.3.8' not found
All of my tf-nightly
Travis CI pipelines started failing today with following error
ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /home/travis/virtualenv/python3.5.4/lib/python3.5/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so)
Example: https://travis-ci.org/yaroslavvb/chain_constant_memory/builds/323851093
Any ideas how to fix?
About this issue
- Original URL
- State: closed
- Created 6 years ago
- Comments: 29 (21 by maintainers)
Commits related to this issue
- Use `pip install tf-nightly` within .travis.yml (#852) The security certificate of ci.tensorflow.org expired, causing TensorBoard's tests on travis to fail. See https://github.com/tensorflow/tensorfl... — committed to tensorflow/tensorboard by chihuahua 6 years ago
- Fix Travis Due to a challenging intersection of vendor constraints, we must temporarily fetch our builds from tomservo while the TensorFlow team investigates the possibility of configuring a heteroge... — committed to jart/tensorboard by jart 6 years ago
- Fix Travis (#872) Due to a challenging intersection of vendor constraints, we must temporarily fetch our builds from tomservo while the TensorFlow team investigates the possibility of configuring a... — committed to tensorflow/tensorboard by jart 6 years ago
- Add C++ toolchain for portable Linux builds See #15777 — committed to jart/tensorflow by jart 6 years ago
- Add C++ toolchain for portable Linux builds See #15777 — committed to jart/tensorflow by jart 6 years ago
- Add C++ toolchain for portable Linux builds (#16173) See #15777 — committed to tensorflow/tensorflow by jart 6 years ago
PS, happy new year!
I get the same error on Centos 7
Oh, for posterity, here are some facts we uncovered for anyone who’s interested in using Debian 8 with Clang. This could potentially be useful for other people in the industry who are interested in distributing TensorFlow.
Debian 8 Jessie (lifetime 2015→2020) is my personal favorite. Clang team maintains an apt repo for Debian 8. The two have a surprising degree of synergy.
Unlike the GCC 4.9.2 which comes included with Debian 8, Clang 6.0 is able to generate opcodes for more recent instruction sets, e.g. AVX-512. Those can make TF potentially 10x faster on CPUs like Skylake Xeons (c. 2015) assuming
-march=native
is used.If one’s goal is compatibility,
-msse3
is a safe optimization that works on nearly every x86_64 CPU in existence. For example, the optional TF Debian 8 Clang 6 Bazel CROSSTOOL should in theory create binaries that are compatible with:Proof:
Some facts we uncovered about Linux distributions:
Some facts we uncovered about x86 CPUs (w.r.t. scientific computing):
One possibility Debian/Ubuntu distributors could explore is:
Please note
-msse3
or-march=native
is not a binary dilemma. It’s possible to use a single Debian 8 machine to cross-compile to-march=whatever
.There also appear to be sweet-spot combinations where you can build binaries that support large subsets in-between. For example, the following optimized CFLAGS have been carefully selected to represent the points in time where Intel and AMD microarchitectures came into alignment.
See also:
I’m pretty sure at this point it’s impossible to build TF binaries on Ubuntu 16 that work on Ubuntu 14. The dual ABI macro is able to remove a lot of the newer __cxx11 symbols, but no matter what I try, dependencies on new libc and libc++ interfaces just keep sneaking in.
Probably the only way it’d be possible to maintain Ubuntu 14 support, would be if our Ubuntu 16 machines used an Ubuntu 14 docker container to build the CPU package.
For posterity’s sake, here’s what I did to experiment:
Ubuntu 14 LTE doesn’t become EOL until April 2019. Are we planning to move it out of our support matrix? (See go/tf-issues-triage) What about CentOS 7, which has gcc 4.8.5? What are the benefits of this new ABI?
If changing our support matrix is the consensus here, I’d suggest we go a step further and compile prebuilt binaries with SSE4 (maybe AVX2, possibly even AVX512) since that makes TensorFlow CPU 4x faster.
Otherwise, maybe it’s possible to use _GLIBCXX_USE_CXX11_ABI to support the old ABI? According to this page, the new ABI is mostly meant to resolve the concerns of the C++ standards committee.
IMHO it’s too early to drop support for Ubuntu 14.04 and Docker still needs time to mature (ie, 3 months ago you couldn’t use GPUs properly with docker)