zoukankan      html  css  js  c++  java
  • Google Tensorflow 源码编译(二):Bazel<v0.1.0>

    这几天终于把tensorflow安装上了,中间遇到过不少的问题,这里记录下来。供大家想源码安装的参考。

    安装环境:POWER8处理器,Docker容器Ubuntu14.04镜像。

    Build Bazel<v0.1.0> for IBM POWER8 CPU from Source Code

    My computer's os is ubuntu 14.04 , and I want to install bazel, There is only java7 available, so I choose bazel 0.1.0.
    Here are the steps that I succeed to install bazel 0.1.0 on my computer:

    1. Get source code
      git clone https://github.com/bazelbuild/bazel.git
      git checkout 0.1.0

    2. Install protobuf
      Check which version is needed:

      opuser@nova:~/tensorflow/bazel-0.1.0$ ls third_party/protobuf/
      LICENSE protobuf-java-3.0.0-alpha-3.jar protoc-linux-x86_64.exe protoc-osx-x86_32.exe protoc-windows-x86_32.exe
      README.md protoc-linux-x86_32.exe protoc-linux-x86_64.real protoc-osx-x86_64.exe protoc-windows-x86_64.exe

      protobuf-java-3.0.0-alpha-3.jar is the jar file bazel uses. so we need to install protobuf with version <3.0.0-alpha-3> , you can refer to "Build Protobuf<v3.0.0-alpha-3> for IBM POWER8 CPU from Source Code" to build protobuf .

    3. Create a link protoc-linux-x86_64.exe to protoc binary file
      such as : ln -s /usr/bin/protoc $(pwd)/ third_party/protobuf/protoc-linux-x86_64.exe

    4. Install other dependencies
    4.1 sudo apt-get install zlib1g-dev zip unzip openjdk-7-jre openjdk-7-jdk
    4.2 add java path to ~/.bashrc
      export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-ppc64el
      export JRE_HOME=${JAVA_HOME}/jre
      export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
      export PATH=${JAVA_HOME}/bin:$PATH

    5. Modify bazel source code to support POWER cpu
    5.1 in src/main/java/com/google/devtools/build/lib/util/CPU.java
      in enum "public enum CPU" add
      POWER("power", ImmutableSet.of("power", "power64le", "power64be", "ppc")),

    5.2 in /src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
      in function "public static class HostCpuConverter implements Converter<String>"add:
      case POWER:
      return "power";
    5.3 in tools/cpp/CROSSTOOL, add
      default_toolchain {
      cpu: "power"
      toolchain_identifier: "local_linux"
      }
    5.4 in third_party/BUILD, add
      config_setting(
      name = "power",
      values = {"host_cpu": "power"},
      )
    5.5 in scripts/bootstrap/buildenv.sh, add
      MACHINE_IS_64BIT='yes'

    6. Compile bazel
      ./compile // better to see step 7 before run ./compile
      after a long time, a message displayed:
      Build successful! Binary is here: /home/opuser/tensorflow/tools/bazel-0.1.0/output/bazel

    7. Problems during compiling
      It is not easy to build bazel from source code. not to mention that I build it in a docker container. there are mainly two problems.

    7.1 namespace-sandbox
      <error: mount() permission denied!>
      bazel may choose to build a sanbox which uses namespace . but there are priority strictions in container. to avoid this problem, you can choose not to build sandbox .
      I refer to dcreager's solution posted at https://github.com/bazelbuild/bazel/issues/418. create a bazelrc and use command "BAZELRC=/tmp/bazelrc ./compile.sh" to compile the code. the bazelrc file  contains:  
      startup --batch
      build --spawn_strategy=standalone --genrule_strategy=standalone

    7.2 openjdk-7 

      <error: unrecognized option -client!>

      The java installed on my computer does not support -client option, but -server option is ok. just as the issue  opened at

      https://github.com/bazelbuild/bazel/issues/56

        Although there is a commit about this: 

      https://github.com/bazelbuild/bazel/commit/1fa163c42ee26a72c21c118ec820d677a431ee49#commitcomment-13207150.

      But it does not work to me. so I changed all the -client option to -server.  

    8. Reference

    Can't run Bazel as part of a Docker build due to sandboxing issues
    https://github.com/bazelbuild/bazel/issues/418
    Compiling the Java example with SAP JVM does not work
    https://github.com/bazelbuild/bazel/issues/56
    Add jvm_opts attribute to the java_toolchain rule
    https://github.com/bazelbuild/bazel/commit/1fa163c42ee26a72c21c118ec820d677a431ee49#commitcomment-13207150.

      

  • 相关阅读:
    OpenJDK源码研究笔记(十二):JDBC中的元数据,数据库元数据(DatabaseMetaData),参数元数据(ParameterMetaData),结果集元数据(ResultSetMetaDa
    Java实现 LeetCode 257 二叉树的所有路径
    Java实现 LeetCode 257 二叉树的所有路径
    Java实现 LeetCode 257 二叉树的所有路径
    Java实现 LeetCode 242 有效的字母异位词
    Java实现 LeetCode 242 有效的字母异位词
    Java实现 LeetCode 242 有效的字母异位词
    Java实现 LeetCode 241 为运算表达式设计优先级
    Java实现 LeetCode 241 为运算表达式设计优先级
    Java实现 LeetCode 241 为运算表达式设计优先级
  • 原文地址:https://www.cnblogs.com/rodenpark/p/5007846.html
Copyright © 2011-2022 走看看