古いiMac(2012)を使っているのでGPUが馬力がないので、CPUでもIntel MKLを使って高速化をすべく、macOS(High Sierra)でTensorFlowをコンパイルしようとしたら嵌りました。
TensorFlowはコンパイル時にデフォルトのApple clangを使うのですが、このclangはOpenMPをサポートしていないので、omp.hが見つからないというエラーです。
で、コンパイラを変える方針で対処し始めたら相当失敗しました。
結論ですが、HomeBrewでlibompをインストールして、これをtensorflowのthird_partyフォルダーで登録する方法でうまくいきました。以下、必要な手順です。
1. Installing TensorFlow from Sources | TensorFlowでbazel buildを起動する手前まで準備する。
2. HomeBrewでlibompをインストールする
brew install libomp
3. libompをtensorflow/third_partyフォルダに登録する
cd tensorflow/third_pary mkdir libomp cd libomp ln -s /usr/local/opt/libomp/include . ln -s /usr/local/opt/libomp/lib touch BUILD
以下はBUILDの内容です。
licenses(["notice"]) cc_library( name = "libomp", hdrs = glob(["include/*.h"]), visibility = ["//visibility:public"], )
4. tensorflow/tensorflow/core/BUILDを編集する
name="core_cpu_impl"のライブラリで、
copts = tf_copts(),
を
copts = tf_copts() + ["-Ithird_party/libomp/include"],
に変更します。
copts = tf_copts() + ["-Xpreprocessor -fopenmp", "-Ithird_party/libomp/include"],
のほうが筋がいいかもしれませんが、試してません。ヘッダーだけが必要だったようで上記変更でコンパイルはできました。
また、name="core_cpu_impl"のライブラリのdepsに
"//third_party/libomp",
を追加します。
以上で準備完了です。コンパイルしてインストールしましょう。
bazel build --config=mkl //tensorflow/tools/pip_package:build_pip_package && bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg && pip install /tmp/tensorflow_pkg/tensorflow-1.8.0-cp36-cp36m-macosx_10_13_x86_64.whl
動作確認するには、tensorflowフォルダから出てください。(出ないとimport tensorflowが失敗します)