2016-01-08 76 views
4

我想从源码安装bazel,并使用bazel编译运行redhat 6.7的群集上的tensorflow。当我尝试安装bazel时,glibc版本(2.12)太旧了。我没有对群集的root访问权限。在这种情况下可以安装tensorflow吗?如何在Red Hat上安装bazel和tensorflow 6.7

我的系统信息:

-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-0.1.1/_bin/build-runfiles: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found 

有些人还报告此问题: https://github.com/tensorflow/tensorflow/issues/110https://github.com/tensorflow/tensorflow/issues/527

如何安装在本地缺少的依赖项,并且bazel拿起正确的图书馆?

+0

我想你甚至没有安装docker的权利?询问管理员或使用AWS实例。 – fabrizioM

+0

@fabrizioM我认为管理员不愿意安装docker。在Redhat 6.X上,Redhat不支持Docker。此外,我不确定码头工人将如何与扭矩(作业分配系统)相互作用。 AWS不适合我。 –

+0

现在1年后,我试图在Redhat 6.9上安装Bazel(用于tenserflow)。同样的问题。 – Gadi

回答

3

您应该能够从源文件中使用Bazel导出LD_FLAGS,CXX和CC的新版本进行编译,并调整Bazel的tools/cpp/CROSSTOOL文件。如果您还有其他问题,请在Bazel上打开github问题(https://github.com/bazelbuild/bazel/issues)。

我目前正在努力使所有更容易。对不起,一塌糊涂。

+0

较新版本您指的是Bazel 0.1.2?我正在编译bazel 0.1.1,因为只有bazel 0.1.1可以编译tensorflow。在tensorflow github上,人们也提出Bazel 0.1.2不能编译tensorflow。 –

0

如果有人需要手动执行此操作:

  1. 编译了最新的glibc,gcc和从源代码的选项--disable-rpath他们所有的依赖关系,以避免glibc的路径被硬编码到系统默认值。请勿直接将glibc添加到LD_LIBRARY_PATH,否则所有可执行文件(包括rm)都将停止工作。

  2. 与您的gcc编译蟒,安装PIP和官方轮

./configure --prefix=$PWD/build --enable-unicode=ucs4 --with-cxx-main=g++ && make && make install

  • 开始蟒用下面的命令来加载正确的glibc,其中$ {} GLIBC_PATH是您的安装位置到glibc,使一个别名
  • alias tensorflow='${GLIBC_PATH}/lib/ld-2.23.so --library-path ${GLIBC_PATH}/lib:${LD_LIBRARY_PATH}这蟒蛇'

  • 导入tensorflow检查没有错误发生
  • 能够导入tensorflow模块没有任何错误后,您可以使用任何其他电脑(可能是Ubuntu的虚拟机在PC上)编译自定义车轮与机器特定选项,并将其复制到您的集群遵循指南

    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 
    
    相关问题