概要
タイトルの通りです。
widnows環境でcmakeの方でtensorflowをビルドします。
その時にいろいろと小技が必要だったので、その内容を備忘録的に書いておきます。
注意点
- 公式バイナリでもSSEやAVXが有効になっているはずなので、自分でビルドする必要はないと思います。(どのレベルが有効になっているかは確認できていません。)
- ビルドにとても時間がかかります。
- i5(4 core)のCPUで24時間以上かかります。
- ビルドに失敗するとほとんどのビルドがやり直しになるので、とても時間がかかります。
方法
- cmakeでVisual Studioのプロジェクトを生成します。
- CMAKE_CXX_FLAGSに/arch:AVX2を追加しください。
- あとは通常通りです。
- Visual Studioを使って、リンクするライブラリのパス修正します。
- tensorflow.slnを開きます。
- 名前が_から始まるプロジェクトのリンクするライブラリのパスが間違っているので修正します。
- \pywrap_tensorflow_internal.libをRelease\pywrap_tensorflow_internal.libに修正
- Visual Studioはメモリ節約のために終了します。
- スタートメニューからx64 Native Tools Command Promptを開きます。
- 生成したプロジェクトがあるディレクトリに移動し、以下のコマンドを実行します。
- msbuild tf_python_build_pip_package.vcxproj /p:PreferredToolArchitecture=x64 /p:configuration=release /p:platform=x64
- Visual Studioの方でビルドするとピープ不足で失敗します。
- 32bitコンパイラが使われるせいだそうです。
- このコマンドでは64bitコンパイラが使われるようにします。
- あとはひたすら待ちます。
- distというディレクトリにwhlが生成されるはずなので、インストールします。
- 私の環境では、最後のwhlを作る工程でエラーになりました。
- ファイルのコピーができなかったみたいですが、良く分かりません。
- やり直すのは大変なので、コマンドプロンプトに表示されている内容を手動で実行しました。
- それでも生成されたwhlが変なようで、インストールしてもファイルが不足しているので、tf_python内にあるそれらしいファイルを手動でインストール先にコピーしました。
メモ
方法6.で、インストール先に手動でファイルをコピーしていますが、予めpipで公式バイナリをインストールしてから_pywrap_tensorflow_internal.pydを自分でビルドしたものに変更すればいいと思います。
参考
VC 2017のIDE上から64bitのcl.exeを使う
チュートリアル: MSBuild を使用した Visual C++ プロジェクトの作成