我正在尝试添加外部头文件(如OpenCL头文件)进行tensorflow的一些实验.我试着将它添加到tensorflow/core/BUILD文件下的BUILD文件中:
# This includes implementations of all kernels built into TensorFlow.
cc_library(
name = "all_kernels",
visibility = ["//visibility:public"],
copts = tf_copts() + ["-Ithird_party/include"], <==== this is the line I added
Run Code Online (Sandbox Code Playgroud)
我还在这个目录中创建了一个软链接,从OpenCL驱动程序(在tensorflow/third_party下)这些头文件的位置(如ln -s/opt/opencl /),但它仍然抱怨它没有找到头文件.
如果我直接添加外部头文件(如/ opt/opencl/CL /),它会抱怨无法包含外部文件(或某些此类内容).
我没有root密码将这些头文件复制到/ usr/include /中.
有人可以解释如何准确地将外部头文件转换为tensorflow进行构建吗?
感谢您的快速帮助.
小智 6
当我使用英特尔 MKL 构建 TensorFlow 并且不得不添加 MKL 标头时,我遇到了类似的问题。我的解决方案如下:
在第三方文件夹中创建指向标头的符号链接,例如:
<your tensorflow folder>/third_party/opencl/include -> /opt/OpenCL/include
Run Code Online (Sandbox Code Playgroud)
使用命令:
ln -s /opt/OpenCL/include <your tensorflow folder>/third_party/opencl
Run Code Online (Sandbox Code Playgroud)在<your tensorflow folder>/third_party/opencl文件夹中创建简单的 BUILD 文件:
cc_library(
name = "opencl",
hdrs = glob(["include/CL/*.h"]),
visibility = ["//visibility:public"],
)
Run Code Online (Sandbox Code Playgroud)将 deps 添加到目标库中:
cc_library(
name = "all_kernels",
visibility = ["//visibility:public"],
copts = tf_copts() + ["-Ithird_party/opencl/include"],
deps = [
"//third_party/opencl",
...
],
)
Run Code Online (Sandbox Code Playgroud)不要忘记将编译器选项添加到目标库中,如上所示,或者只是作为 bazel 的标志:
bazel build --copt="-Ithird_party/opencl/include" ...
Run Code Online (Sandbox Code Playgroud)Bazel 试图非常严格地确保其构建仅包含它知道的文件,以确保它们是可重现的。不幸的是,这可能会让实验变得困难。解决问题的正确方法是为要包含的标头创建一个 BUILD 文件和规则。您也可以通过弄乱 bazel-* 生成的文件夹来破解某些内容,但我不推荐这样做。