我想从源代码安装bazel,并使用bazel在运行redhat 6.7的集群上编译tensorflow。当我尝试安装bazel时,glibc版本(2.12)太旧了。我没有对群集的root访问权限。在这种情况下是否可以安装tensorflow?
我的系统信息:
-bash-4.1$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 6.7 (Santiago)
-bash-4.1$ which gcc
/usr/bin/gcc
-bash-4.1$ gcc -v
Using built-in specs.
Target: x86_64-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-ppl --with-cloog --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
Thread model: posix
gcc version 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)
-bash-4.1$ ldd --version
ldd (GNU libc) 2.12
系统也安装了更新的gcc。我试过用它,bazel仍然不会编译。
-bash-4.1$ /usr/local/gcc/4.8.4/bin/gcc -v
Using built-in specs.
COLLECT_GCC=/usr/local/gcc/4.8.4/bin/gcc
COLLECT_LTO_WRAPPER=/usr/local/gcc/4.8.4/libexec/gcc/x86_64-unknown-linux-gnu/4.8.4/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: ../configure --prefix=/usr/local/gcc/4.8.4
Thread model: posix
gcc version 4.8.4 (GCC)
当我编译bazel时,我收到以下错误:
bazel-0.1.1/_bin/build-runfiles: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found
有些人还报告了这个问题: https://github.com/tensorflow/tensorflow/issues/110 和https://github.com/tensorflow/tensorflow/issues/527
如何在本地安装缺少的依赖项,并让bazel选择正确的库?
答案 0 :(得分:3)
您应该可以使用较新版本的Bazel导出LD_FLAGS,CXX和CC以及调整Bazel的tools / cpp / CROSSTOOL文件从源代码编译。如果您还有其他问题,请在Bazel(https://github.com/bazelbuild/bazel/issues)上打开github问题。
我目前正致力于让这一切变得更轻松。抱歉这个烂摊子。
答案 1 :(得分:1)
如果有人需要手动执行此操作:
使用选项--disable-rpath
从源代码编译最新的glibc,gcc及其所有依赖项,以避免将glibc路径硬编码为系统默认值。请勿直接向LD_LIBRARY_PATH
添加glibc,否则包括rm
在内的所有可执行文件都将停止工作。
用你的gcc编译python,安装pip和官方轮
./configure --prefix=$PWD/build --enable-unicode=ucs4 --with-cxx-main=g++ && make && make install
alias tensorflow='${GLIBC_PATH}/lib/ld-2.23.so --library-path ${GLIBC_PATH}/lib:${LD_LIBRARY_PATH}
python '
能够在没有任何错误的情况下导入tensorflow模块后,您可以使用任何其他计算机(可能是PC上的ubuntu VM)编译具有机器特定选项的自定义滚轮,并按照指南将其复制到您的群集
bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-mfpmath=both --copt=-msse4.2 --copt=-msse4.1 //tensorflow/tools/pip_package:build_pip_package