【问题标题】:How to build tenssorflow op with bazel with additional include directories如何使用带有附加包含目录的 bazel 构建 tensorflow op
【发布时间】:2018-11-15 01:59:59
【问题描述】:

我得到了 tensorflow 二进制文件(已经编译) 我已添加到 tensorflow 源: tensorflow\core\user_ops\icp_op_kernel.cc - 包含: https://github.com/tensorflow/models/blob/master/research/vid2depth/ops/icp_op_kernel.cc tensorflow\core\user_ops\BUILD - 包含:

load("//tensorflow:tensorflow.bzl", "tf_custom_op_library")

tf_custom_op_library(
    name = "icp_op_kernel.so",
    srcs = ["icp_op_kernel.cc"],
)

我正在尝试构建:

bazel build --config opt //tensorflow/core/user_ops:icp_op_kernel.so

我得到:

tensorflow/core/user_ops/icp_op_kernel.cc(16): fatal error C1083: Cannot open include file: 'pcl/point_types.h': No such file or directory

因为 bazel 不知道 pcl 包含文件在哪里。 我已经安装了 pcl 并且包含目录在:

C:\Program Files\PCL 1.6.0\include\pcl-1.6

我如何告诉 bazel 也包含这个目录?

另外我可能需要在链接中添加C:\Program Files\PCL 1.6.0\lib,我该怎么做?

【问题讨论】:

    标签: tensorflow bazel


    【解决方案1】:

    如果失败,您不需要 bazel 来构建操作。

    我在 CPU 和 GPU 上都实现了自定义操作,基本上遵循两个 Tensorflow 教程。

    对于 CPU 操作,请遵循 Build the op library 上的 Tensorflow 教程:

    TF_CFLAGS=( $(python -c 'import tensorflow as tf; print(" ".join(tf.sysconfig.get_compile_flags()))') )
    TF_LFLAGS=( $(python -c 'import tensorflow as tf; print(" ".join(tf.sysconfig.get_link_flags()))') )
    g++ -std=c++11 -shared zero_out.cc -o zero_out.so -fPIC ${TF_CFLAGS[@]} ${TF_LFLAGS[@]} -O2
    

    关于gcc 版本>=5 的注意事项:gcc 从版本 5 开始使用新的C++ ABI。TensorFlow 网站上提供的二进制 pip 包是使用使用旧 ABI 的 gcc4 构建的。如果您使用gcc>=5 编译您的操作库,请将-D_GLIBCXX_USE_CXX11_ABI=0 添加到命令行以使该库与旧的abi 兼容。

    对于 GPU 操作,请在 Tensorflow adding GPU op support 上查看当前官方 GPU 操作构建说明

    nvcc -std=c++11 -c -o cuda_op_kernel.cu.o cuda_op_kernel.cu.cc \
      ${TF_CFLAGS[@]} -D GOOGLE_CUDA=1 -x cu -Xcompiler -fPIC
    
    g++ -std=c++11 -shared -o cuda_op_kernel.so cuda_op_kernel.cc \
      cuda_op_kernel.cu.o ${TF_CFLAGS[@]} -fPIC -lcudart ${TF_LFLAGS[@]}
    

    正如它所说,请注意,如果您的 CUDA 库未安装在 /usr/local/lib64 中,您需要在上面的第二个 (g++) 命令中明确指定路径。例如,如果您的 CUDA 安装在 /usr/local/cuda-8.0 中,则添加 -L /usr/local/cuda-8.0/lib64/

    另外,请注意在某些 linux 设置中,需要 nvcc 编译步骤的附加选项。在 nvcc 命令行中添加-D_MWAITXINTRIN_H_INCLUDED 以避免来自mwaitxintrin.h 的错误。

    【讨论】:

    • 我实际上是在尝试在windows上构建它,我会尝试翻译你提出的内容。
    • 以下失败:nvcc -std=c++11 -c -o cuda_op_kernel.cu.o cuda_op_kernel.cu.cc -IC:\Users\dorp\Desktop\tensorflow-1.11.0 -D_GLIBCXX_USE_CXX11_ABI=0 -D GOOGLE_CUDA=1 -x cu -Xcompiler -fPIC 错误:C:/Users/dorp/Desktop/tensorflow-1.11.0\third_party/eigen3/unsupported/Eigen/CXX11/Tensor(1): fatal error C1083: Cannot open include file: 'unsupported/Eigen/CXX11/Tensor': No such file or directory
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多