Compilation 如何在Red Hat 6.7上安装bazel和tensorflow

Compilation 如何在Red Hat 6.7上安装bazel和tensorflow,compilation,redhat,glibc,tensorflow,bazel,Compilation,Redhat,Glibc,Tensorflow,Bazel,我想从源代码安装bazel,并使用bazel在运行Redhat6.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

我想从源代码安装bazel,并使用bazel在运行Redhat6.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
一些人还报告了这一问题: 及


如何在本地安装缺少的依赖项,并让bazel选择正确的库?

您应该能够从源代码处使用更新版本的bazel进行编译,导出LD_标志、CXX和CC,并调整bazel的tools/cpp/CROSSTOOL文件。如果您还有其他问题,请在Bazel()上打开github问题


我目前正在努力使这一切变得更容易。很抱歉弄得一团糟。

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

  • 使用选项
    --disable rpath
    从源代码编译最新的glibc、gcc及其所有依赖项,以避免glibc路径硬编码为系统默认值。不要直接将glibc添加到
    LD\u LIBRARY\u路径
    ,否则包括
    rm
    在内的所有可执行文件都将停止工作

  • 用gcc编译python,安装pip和官方程序

  • /configure--prefix=$PWD/build--enable unicode=ucs4--with cxx main=g++&&make&&make安装

  • 使用以下命令启动python以加载正确的glibc,其中${glibc_PATH}是glibc的安装位置,请创建别名
  • alias tensorflow='${GLIBC_-PATH}/lib/ld-2.23.so--library-PATH${GLIBC_-PATH}/lib:${ld_-library_-PATH}
    哪个python
    '

  • 导入tensorflow以检查是否发生错误
  • 在能够毫无错误地导入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
    

    我猜你连docker都没有安装对吧?询问管理员或使用AWS实例。@fabrizioM我认为管理员不愿意安装docker。Redhat 6.X上的Redhat不支持Docker。此外,我不确定docker将如何与torque(作业分配系统)交互。AWS对我来说不是一个选项。现在已经过了一年,我正在尝试在Redhat6.9上安装Bazel(用于tenserflow)。同样的问题。你说的更新版本是指Bazel0.1.2?我编译Bazel0.1.1是因为只有Bazel0.1.1可以编译tensorflow。在tensorflow github上,人们还建议Bazel 0.1.2不能编译tensorflow。