小编Rob*_*ama的帖子

如何使用自定义protobuf构建tensorflow 1.13.1?

系统信息

  • 我是否编写了自定义代码:修改bazel文件
  • 操作系统平台和发行版:Ubuntu 16.04
  • TensorFlow的安装来源:
  • TensorFlow版本:1.13.1从对应的标签下载(https://github.com/tensorflow/tensorflow/archive/v1.13.1.tar.gz
  • Python版本:Python 3.5.2
  • Bazel版本:0.21.0
  • Protobuf版本:3.7.0(从源代码构建并放置在文件系统中的某个位置)
  • CUDA / cuDNN版本:10.0 / 7
  • GPU型号和内存:GeForce GTX 1060 Ti

上下文:默认情况下,tensorflow会构建自己的protobuf代码。尽管protobuf也被其他库使用,但它的导出符号与tensorflow提供的符号冲突。解决该问题的唯一好的方法是对所有库(包括张量流)使用唯一且独立的(即在张量流之外)protobuf版本。所以我基本上需要使用目标安装版本的protobuf构建tensorflow,该版本位于文件系统中的某个位置。

问题:构建tensorflow 1.13.1时,使用protobuf的自定义版本,该版本安装在文件系统中的某个位置(不在默认系统路径中)。更具体地说,我的问题是:需要对tensorflow的bazel文件进​​行哪些修改才能使其实现。我是bazel的新手,我对如何做感到非常困惑。

这是我所做的:

1)停用protobuf的内部构建,在.tf_configure.bazelrc我添加的代码行中:

build --action_env TF_SYSTEM_LIBS="protobuf_archive"
Run Code Online (Sandbox Code Playgroud)

这可以按预期工作,除了安装在默认系统路径中的protobuf太旧以至于无法解析proto3文件。无论如何这都不是真正的问题,因为我想使用3.7.0版的自定义protobuf。

2)指定在哪里找到protobuf我通过使用new_local_repository而不是更改了workspace.bzl文件tf_http_archive

如果我的文件系统中安装了protobuf库的路径,则为@ PATH_TO_PROTOBUF @。

    new_local_repository(
        name =  "protobuf_archive",
        path = "@PATH_TO_PROTOBUF@",
        build_file = clean_dep("//third_party/systemlibs:protobuf.BUILD"),
    )

    new_local_repository(
        name = "com_google_protobuf",
        path = "@PATH_TO_PROTOBUF@",
        system_build_file = clean_dep("//third_party/systemlibs:protobuf.BUILD"),
        system_link_files = {
            "//third_party/systemlibs:protobuf.bzl": "protobuf.bzl",
        },
    )
    new_local_repository(
        name = "com_google_protobuf_cc",
        path = "@PATH_TO_PROTOBUF@",
        system_build_file = clean_dep("//third_party/systemlibs:protobuf.BUILD"), …
Run Code Online (Sandbox Code Playgroud)

protocol-buffers tensorflow

5
推荐指数
1
解决办法
1293
查看次数

标签 统计

protocol-buffers ×1

tensorflow ×1