编译真的是一个大坑!一是外网连不上,二是很多地址在更新。就很难,经历n次尝试我终于编译成功了。

以下教程是CPU的,GPU服务器我还没有,有了再更新吧。

首先下载源码(别真的下)

也可以直接从github(https://github.com/tensorflow/tensorflow)上下载

git clone https://github.com/tensorflow/tensorflow.git
cd tensorflow

然后通过运行 TensorFlow 源代码树根目录下的 ./configure 配置系统 build(先别运行)

# ./configure

根据官网教程本应该执行这个命令,但是我经过n次尝试,发现一个问题就是他系统和你系统不一样,很难编译成功,所有我选择了他提供的docker容器

# bazel build //tensorflow/tools/pip_package:build_pip_package

因为我没成功,或许有人能成功吧,不信邪的人可以试试,不行还是docker吧

开始docker

可以参照官网(https://www.tensorflow.org/install/source#docker_linux_builds)

docker pull tensorflow/tensorflow:devel
docker run -it -w /tensorflow_src -v $PWD:/mnt -e HOST_PERMS="$(id -u):$(id -g)" tensorflow/tensorflow:devel bash
git pull

进入了容器,上面的 docker run 命令会在 /tensorflow_src 目录(即源代码树的根目录)中启动 shell

然后这时候再开始进行编译

#
./configure
#
bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package
#然后在这个./bazel-bin/tensorflow/tools/pip_package/build_pip_package目录里会有这个whl的包
cd bazel-bin/tensorflow/tools/pip_package/build_pip_package
pip install tensorflow-version-tags.whl #根据系统还有python名字都不一样,具体看自己了

然后你就有了一个编译过tensorflow的docker容器了

接下来是一些问题的解决方案

其实就是连不上外网的问题

第一个问题就是告诉你io_bazel_rules_docker下不了

Vi WORKSPACE
# 在上面添加下面内容
http_archive(
    name = "io_bazel_rules_docker",
    sha256 = "87fc6a2b128147a0a3039a2fd0b53cc1f2ed5adb8716f50756544a572999ae9a",
    strip_prefix = "rules_docker-0.8.1",
    urls = ["https://github.com/bazelbuild/rules_docker/archive/v0.8.1.tar.gz"],
)
# 解决方案来自https://github.com/tensorflow/tensorflow/issues/28824
# 这个上面的请到官网上看,会更新的
# 官网:https://github.com/bazelbuild/rules_docker

第二个问题还是下载不动的几个包,比较大,llvm和aws,根据编译过程的出来的地址下载github上的包,然后放到电脑里,我是用的Apache整的网络地址,就像这样:127.0.0.1:1234/1.7.336.tar.gz.

llvm这个修改要在tensorflow/workspace.bzl里面

vi tensorflow/workspace.bzl
# 找到llvm
 LLVM_COMMIT = "c4b5a66e44f031eb89c9d6ea32b144f1169bdbae"
    LLVM_SHA256 = "8463cbed08a66c7171c831e9549076cf3fd4f7e6fe690b9b799d6afef2465007"
    LLVM_URLS = [
        "https://storage.googleapis.com/mirror.tensorflow.org/github.com/llvm/llvm-project/archive/{commit}.tar.gz".format(commit = LLVM_COMMIT),
    "http://127.0.0.1:1234/{commit}.tar.gz".format(commit = LLVM_COMMIT),#添加这行
        "https://github.com/llvm/llvm-project/archive/{commit}.tar.gz".format(commit = LLVM_COMMIT),
    ]
# 注意把包的名字改完c4b5a66e44f031eb89c9d6ea32b144f1169bdbae.tar.gz

aws修改,在tensorflow/workspace.bzl这个里面我们能看到load("//third_party/aws:workspace.bzl", aws = "repo"),应该在third_party里修改

vi third_party/aws/workspace.bzl
# 一样的方法
third_party_http_archive(
        name = "aws",
        urls = [
            "https://mirror.bazel.build/github.com/aws/aws-sdk-cpp/archive/1.7.336.tar.gz",
            "http://127.0.0.1:1234/1.7.336.tar.gz", #添加这行
            "https://github.com/aws/aws-sdk-cpp/archive/1.7.336.tar.gz", 
        ],
        sha256 = "758174f9788fed6cc1e266bcecb20bf738bd5ef1c3d646131c9ed15c2d6c5720",
        strip_prefix = "aws-sdk-cpp-1.7.336",
        build_file = "//third_party/aws:BUILD.bazel",
    )

经过以上过程,基本完成了编译,就等时间就好了,搞完以后,可以docker commit一个images

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐