8

テンソルフローの実験のために、外部ヘッダー ファイル (OpenCL ヘッダー ファイルなど) を追加しようとしています。これを 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

また、このディレクトリに OpenCL ドライバー (tensorflow/third_party の下) からのこれらのヘッダー ファイルの場所へのソフトリンクも作成しました ( ln -s /opt/opencl/ など)。

外部ヘッダー ファイル (/opt/opencl/CL/ など) を直接追加すると、外部ファイルをインクルードできない (またはそのようなもの) というメッセージが表示されます。

これらのヘッダー ファイルを /usr/include/ にコピーするためのルート パスワードも持っていません。

ビルドのために外部ヘッダーファイルをテンソルフローにする方法を誰かが正確に説明できますか?

迅速なご協力ありがとうございます。

4

3 に答える 3

6

Intel MKL を使用して TensorFlow を構築し、MKL ヘッダーを追加しなければならなかったときに、同様の問題に直面しました。私の解決策は次のとおりです。

  1. 次のように、ヘッダーへのシンボリック リンクを third_party フォルダーに作成します。

    <your tensorflow folder>/third_party/opencl/include -> /opt/OpenCL/include
    

    コマンドで:

    ln -s /opt/OpenCL/include <your tensorflow folder>/third_party/opencl
    
  2. シンプルな BUILD ファイルを<your tensorflow folder>/third_party/openclフォルダーに作成します。

    cc_library(
        name = "opencl",
        hdrs = glob(["include/CL/*.h"]),
        visibility = ["//visibility:public"],
    )
    
  3. dep をターゲット ライブラリに追加します。

    cc_library(
        name = "all_kernels",
        visibility = ["//visibility:public"],
        copts = tf_copts() + ["-Ithird_party/opencl/include"],
        deps = [
            "//third_party/opencl", 
            ...
        ],
    )
    
  4. 上記のようにターゲット ライブラリにコンパイラ オプションを追加するか、bazel へのフラグとして追加することを忘れないでください。

     bazel build --copt="-Ithird_party/opencl/include" ...
    
于 2016-11-09T10:07:12.910 に答える
0

Bazel は、そのビルドに既知のファイルのみが含まれるようにすることについて非常に厳密にしようとし、それらが再現可能であることを確認しようとします。残念ながら、それは実験を難しくする可能性があります. この問題を解決する正しい方法は、組み込みたいヘッダーの BUILD ファイルとルールを作成することです。bazel-* で生成されたフォルダーもいじることで何かをハッキングできるかもしれませんが、お勧めしません。

于 2016-06-13T23:37:29.257 に答える