docker tensorflow_Tensorflow源码编译
编译真的是一个大坑!一是外网连不上,二是很多地址在更新。就很难,经历n次尝试我终于编译成功了。以下教程是CPU的,GPU服务器我还没有,有了再更新吧。首先下载源码(别真的下)也可以直接从github(https://github.com/tensorflow/tensorflow)上下载cd tensorflow然后通过运行 TensorFlow 源代码树根目录下的 ./configure 配置系
编译真的是一个大坑!一是外网连不上,二是很多地址在更新。就很难,经历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
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)