如何使用bazel和其他包含目录构建tenssorflow操作

问题描述 投票:0回答:1

我有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,include目录位于:

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

我怎么告诉bazel还包括这个目录?

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

tensorflow bazel
1个回答
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编译op库,请将-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安装在-L /usr/local/cuda-8.0/lib64/中,请添加/usr/local/cuda-8.0

此外,请注意,在某些Linux设置中,需要使用nvcc编译步骤的其他选项。将-D_MWAITXINTRIN_H_INCLUDED添加到nvcc命令行以避免来自mwaitxintrin.h的错误。

© www.soinside.com 2019 - 2024. All rights reserved.